Oracle 在索引组织表(IOT)试图删除行时报告ORA-8102

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:[email protected]

 

Oracle Server – 标准版版本: 10.1.0.3
该问题会发生在任何平台.

症状

在索引组织表(IOT)中试图删除行时会报告ORA-8102错误(Index Key Not Found)

它产生了带有相似条目的跟踪文件

ORA-08102: index key not found, obj# <object_id>, file <file#>, block <block#>

(3) delete from <table> where <primary key> = <value>

分析表验证结构分析表验证结构成功,没有出现错误 

跟踪文件的例子如下

oer 8102.3 – obj# 192539, rdba: 0x03418552(afn 13, blk# 99666)

原因

错误: 4904810 ORA-8102 CORRUPTION REPEATED ON SAME TABLE/INDEX 报告同一个问题。

这个问题好像是IOT的导入导出中保持的原始 IOT的不一致性,不知为何,它和导入过程中IOT表上的唯一限制的创建有关,如果该表用 CONSTRAINTS=N导入,错误就不会再次出现,即使导入完成后,唯一限制被增加到表上。 同时,如果表和唯一限制预先创建,用IGNORE=Y运行导入,错误再也不会重新产生,同样地,如果表和唯一限制在另一种模式下创建,在运行选择时插入,错误也不会再次出现。

解决方法

通常情况下解决此错误的行动方案是删除并重新创建索引,但由于这是一个IOT,所以是不可能的。

解决方法:

通过指定IOT表的主键的两个组成部分删除个别行。

即,

光标 : select <primary key> from <table> where <primary key> = :val ( 相同的值导致删除失败)
循环中的光标: delete from <table> where <primary key> = cursor.<primary key>;

参考文献

BUG:5020090 – Ora-8102 (Index Key Not Found) During A Delete


Posted

in

by

Tags:

Comments

Leave a Reply

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