删除表标识会导致Oracle 12c上出现ORA-00600错误

时间:2018-02-16 20:19:48

标签: oracle oracle12c

我的Oracle数据库版本是12.1.0.2.0。

我很难删除列标识。还试图删除列并使用purge命令删除表,但每次我得到相同的Oracle错误:

  

ORA-00600:内部错误代码,参数:[12811],[96650],[],[],[],[],[],[],[],[],[],[]

只是无法触摸标识栏。我试过下面的命令,但没有运气:

ALTER TABLE DYS_CATEGORY MODIFY CATEGORY_ID DROP IDENTITY;

ALTER TABLE DYS_CATEGORY DROP COLUMN CATEGORY_ID;

DROP TABLE DYS_CATEGORY PURGE;

我可以从表格中删除任何其他列,但问题在于标识列

标识列是Oracle的新功能,刚刚在12c中引入。

3 个答案:

答案 0 :(得分:1)

这是Oracle 12.1.0.2.0的问题。至少有一个人有reported it (on Windows, which may be relevant)

您遇到的错误是ORA-00600,这是Oracle未处理异常的默认消息,即Oracle错误。正确的答案是通过Oracle Support提出服务请求;如果您需要修复损坏的表,他们将能够为您提供补丁或解决方法。如果您没有支持合同,可能会运气不佳。

对于将来参考,删除identity列的过程分为两个阶段:

alter table t42 modify id drop identity;

alter table t42 drop column id;

实际上,这不是最新版本产品的问题。在Oracle 18c中,我们可以放弃列而不先修改它。 LiveSQL demo

答案 1 :(得分:0)

正如威廉在上面说的那样,似乎已经/正在有一个系统为被删除的标识列生成序列,但是idnseq$中的记录保持不变。

我不会推荐给任何人,但是我在同一模式中创建了一个称为垃圾的新序列。然后,我找到了表的object_id以及我为表的对象#手动将idnseq$更改为新序列的seqobj#的创建和更新的object_id的序列有问题。

然后我可以放下桌子并成功清除回收站。

真的不建议入侵oracle系统表,但这只是一个测试系统,实际上并没有关系,并且可以正常工作。

答案 2 :(得分:0)

经过大量搜索和艰苦工作后,如果表stil显示错误ORA-00600:内部错误代码,参数:

执行以下步骤。

  1. 备份原始表 语法:Create table original_table_back as select * from original_table;

  2. 将原始表重命名为一些新表名 语法:Rename original_table to original_table_1;

  3. 将备份重命名为原始表 语法:Rename Original_table_back to original_table.