Heim  >  Artikel  >  Datenbank  >  细说ORA-01450错误

细说ORA-01450错误

WBOY
WBOYOriginal
2016-06-07 17:33:251285Durchsuche

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

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

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

呵呵,Oracle竟然没有给出合理建议。但是从字面意义可以看出,01450是由于我们的关键字超出了某些限定值而引起的。oracle不推崇单条索引记录占用较大的存储空间,在9i之前的版本,oracle规定每个数据块至少存放两条完整索引记录,在9i之后条件放宽,每个数据块至少存放一条完整索引记录。毫无疑问,在数据块中除去索引记录本身的数据,还存储了一些辅助信息(大概占用了192个字节),除此之外,每条索引记录还包含了除key值之外的附加信息,如rowid等。因此,,在创建索引时,被索引列的长度是受限制的,大概范围为(blocksize-192)*80%。

 

下面我们来验证一下:

在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;

索引已创建。

更多详情见请继续阅读下一页的精彩内容:

相关阅读:

ORA-01172、ORA-01151错误处理

ORA-00600 [2662]错误解决

ORA-01078 和 LRM-00109 报错解决方法

ORA-00471 处理方法笔记

ORA-00314,redolog 损坏,或丢失处理方法

ORA-00257 归档日志过大导致无法存储的解决办法

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn