关于Oracle Bug - 在对存在NOSEGMENT index的表进行exchange partition操作后返回ORA-600: [ktadrprc-1]报错
受影响Oracle数据库版本:
- 12.1.0.2 (Server Patch Set)
- 11.2.0.4
此问题在12.2及18版本中被修复。
症状:
- 数据字典讹误
- 内部ORA-600报错
- ORA-600 [ktadrprc-1]
举例:
CREATE TABLE TAB1 ( COL1 NUMBER NOT NULL ENABLE )
PARTITION BY RANGE (COL1)
(PARTITION TAB1_PART1 VALUES LESS THAN (10),
PARTITION TAB1_PART2 VALUES LESS THAN (20));
-- Create the index as NOSEGMENT
CREATE INDEX IDX1 ON TAB1 (COL1) LOCAL nosegment;
-- Create a table partitioned to be exchanged
CREATE TABLE TAB2 ( "COL1" NUMBER NOT NULL ENABLE );
CREATE INDEX IDX2 ON TAB2 (COL1) LOCAL;
ALTER TABLE TAB1 EXCHANGE PARTITION TAB1_PART2 WITH TABLE TAB2 INCLUDING INDEXES UPDATE GLOBAL INDEXES ;
DROP INDEX IDX2; ERROR at line 1: ORA-00600: internal error code, arguments: [ktadrprc-1]
通过hCheck脚本可以了解到关于NOSEGMENT index信息
HCKW-0021: NOSEGMENT IND$ exists
临时方案:
在进行exchange前,请确保两边都已经定义好NOSEGMENT。
如果为定义好,在exchange后,数据字典就不得不进行更新以允许DROP index操作。