报错详细信息:
将索引进行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.