Oracle 12.1.0.2.0删除Identity列/表触发ORA-00600[12811]错误求助
解决Oracle 12.1.0.2中删除Identity列触发ORA-00600 [12811]的问题
嘿,这个问题我之前在处理12c早期版本的时候碰到过!ORA-00600 [12811]在操作Identity列时触发,其实是12.1.0.2版本的已知官方bug,和你对Identity特性不熟悉没关系——早期版本的Identity实现确实有不少坑。下面是几个可行的解决办法:
方法1:先禁用Identity属性再删除列
直接删除列会触发bug,但可以先解除列的Identity绑定,再执行删除操作:
ALTER TABLE your_table MODIFY (your_identity_column DROP IDENTITY); ALTER TABLE your_table DROP COLUMN your_identity_column;
这个操作绕开了直接删除Identity列的bug触发点,大部分场景下都能生效。
方法2:通过CTAS重建表规避
如果方法1还是报错,可以用“创建表并查询数据”的方式重建表,直接排除掉那个有问题的Identity列:
-- 只选择需要保留的列,排除Identity列 CREATE TABLE new_table AS SELECT col1, col2, col3 FROM your_table; -- 记得重建原表的约束、索引、触发器等对象 DROP TABLE your_table PURGE; RENAME new_table TO your_table;
这种方式适合数据量不大的场景,相当于完全绕开了原表的Identity列bug。
方法3:升级到更高版本(彻底解决)
12.1.0.2是12c的第一个补丁集,后续的12.1.0.3或者12.2版本已经修复了这个Identity列的操作bug。如果业务允许的话,升级到更高版本可以从根源上避免这类问题。
最后提醒一句:遇到ORA-00600这类内部错误时,别反复执行相同操作,避免引发更多潜在问题,生产环境操作前一定要做好数据备份!
内容的提问来源于stack exchange,提问作者mdemir
相关产品推荐
相关产品推荐

