细说ORA-01450错误

2014-11-24 17:40:53 · 作者: · 浏览: 0

ora-01450是索引维护中可能会出现的错误。首先通过oerr来看一下01450的相关信息:


SQL> ho oerr ora 01450
01450, 00000, "maximum key length (%s) exceeded"
// *Cause:
// *Action:



下面我们来验证一下:


在8k的表空间中:被索引列的长度不可以超过 (8192-192)*0.8=6400


SQL> create tablespace ts8k datafile '/oracle/app/oradata/easy/e01.dbf' size 10m blocksize 8192;


表空间已创建。


SQL> create table t8(c1 varchar2(1000),c2 varchar2(2000),c3 varchar2(3000),c4 varchar2(4000));


表已创建。


SQL> create index ind8 on t8(c1,c2,c3,c4);
create index ind8 on t8(c1,c2,c3,c4)
*
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)



SQL> create index ind8 on t8(c2,c3,c4);
create index ind8 on t8(c2,c3,c4)
*
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)



SQL> create index ind8 on t8(c1,c2,c3);


索引已创建。


在16k的表空间中:被索引列的长度不可以超过 (16384-192)*0.8=12593.6


SQL> create tablespace ts16k datafile '/oracle/app/oradata/easy/s01.dbf' size 10m blocksize 16384;


表空间已创建。



SQL> create table t16(c1 varchar2(4000),c2 varchar2(4000),c3 varchar2(4000),c4 varchar2(4000)) tablespace ts16k;


表已创建。



SQL> create index ind16 on t16(c1,c2,c3,c4) tablespace ts16k;
create index ind16 on t16(c1,c2,c3,c4) tablespace ts16k
*
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (12958)



SQL> create index ind16 on t16(c1,c2,c3) tablespace ts16k;


索引已创建。


相关阅读: