客户在创建表空间时,出现这个错误。
详细错误信息为:
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错误。