[ORA-01450] maximum key length (3215) exceeded


报错详细信息:
将索引进行online重建时,报错:
SQL> alter index XX_DESC_INDEX rebuild online parallel 10;
alter index XX_DESC_INDEX rebuild online tablespace XX_idx_new
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01450: maximum key length (3215) exceeded
创建索引所需要的字段,字段长度加起来超过3215,ORA报错。
  name     VARCHAR2(100),
  name2  VARCHAR2(200),
  name 3 VARCHAR2(4000)

9i之后每个index key最大可以为block size的80%。
所以理论上来说,是可以创建最大长度为block size=8096*80%约为6400左右长度的index。
但因为online创建的过程中会生成一个中间表,用来记录创建过程中的变化,而这个表是IOT表。经过测试,发现IOT表的限制比较严格,8k的block size,最大长度只能有3215,所以普通创建可以成功,而online创建则不行,关键还在背后的IOT表上。

去掉online可以成功:
alter index XX_DESC_INDEX rebuild online parallel 10;

alter index XX_DESC_INDEX noparallel;


Index altered.

上一篇:53. Maximum Subarray


下一篇:SQL in、not in、exists和not exists的区别: