ORA-600(2901)错误

客户在创建表空间时,出现这个错误。
详细错误信息为:

SQL> CREATE TABLESPACE T_DATA DATAFILE '/dev/tdat01' SIZE 13369336K 
  2  EXTENT MANAGEMENT LOCAL 
  3  SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE HS_ARCH_DATA DATAFILE '/dev/tdat01' SIZE 13369336K 
* 
ERROR at line 1: 
ORA-00600: internal error code, arguments: [2901], [1671166], [1671167], [], [], [], [], []

对应的详细TRACE信息为:

*** 2012-11-20 16:25:39.981 
ksedmp: internal OR fatal error 
ORA-00600: internal error code, arguments: [2901], [1671166], [1671167], [], [], [], [], [] 
CURRENT SQL statement FOR this SESSION: 
CREATE TABLESPACE T_DATA DATAFILE '/dev/tdat01' SIZE 13369336K 
EXTENT MANAGEMENT LOCAL 
SEGMENT SPACE MANAGEMENT AUTO 
----- Call Stack Trace ----- 
calling              CALL     entry                argument VALUES IN hex 
location             TYPE     point                (? means dubious VALUE) 
-------------------- -------- -------------------- ---------------------------- 
ksedst+001c          bl       ksedst1              000000000 ? 110074DE8 ? 
ksedmp+0290          bl       ksedst               104C20490 ? 
ksfdmp+02d8          bl       03F34EF4 
kgeriv+0108          bl       _ptrgl 
kgesiv+0080          bl       kgeriv               1104BD230 ? 000000010 ? 
                                                   000000000 ? 1109724D0 ? 
                                                   000000000 ? 
ksesic2+0060         bl       kgesiv               6368646174303100 ?

这个ORA-600[2901]的错误经常出现在创建表空间或添加数据文件的过程中,当Oracle尝试初始化数据文件时发现数据文件的空间不满足创建语句的要求时,就会引发这个错误。
其第二个参数为数据文件可用的BLOCK数,而第三个参数为当前需要创建的数据文件所需的BLOCK数:

SQL> SELECT 13369336*1024/8/1024 FROM dual;
13369336*1024/8/1024
--------------------
             1671167

解决这个问题很简单,只需要将数据文件缩小一点就可以了。相比较导致这个问题的原因更有技术含量。
根据客户的主机工程师反馈,在AIX上创建VG的时候没有将类型设置为BIG类型,导致在创建裸设备时mklv指定的-T O参数没有生效,这样LVCB就占用了裸设备的第一个块,从而导致Oracle创建数据文件时空间不足,从而引发了ORA-600错误。

This entry was posted in BUG and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *