Email: service@parnassusdata.com 7 x 24 online support!

Oracle 当更新表时生成ORA-1410: invalid ROWID

Oracle 当更新表时生成ORA-1410: invalid ROWID

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

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

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

 

 

适用于:

Oracle Database – Enterprise Edition – 版本7.3.4.010.2.0.5 [Release 7.3.4 to 10.2]

本文信息适用于任何平台。
*** 24-Sept-2014检查相关性***

症状

当尝试更新表时,可能发生以下错误。

示例:
update acd_person set CONTACT_MAIL_FLAG=’Y’ where PRS_CD_ID=’292177803′

ERROR at line 1:
ORA-01410: invalid ROWID

A select will work fine on the table.

实例未崩溃
错误是可重复出现

.

更改

对环境无更改

原因

Rowid是允许直接访问行的一个结构。Rowid包含对象号,数据文件所在位置,块号,块中slot号的信息。

当信息所基于的查询在运行过程中更改时,生成ORA-01410 。这表示当由于在索引块leaf中发现了ROWID的???而索引块delete未完成时会发生该问题。Meaning that the issue can occur when a index block delete is not completed as ROWID’s are found in the index block leaf.

解决方案

1.  在表上运行explain plan,以update 语句来找到有问题的索引。

(Note 199081.1)

PLAN_TABLE_OUTPUT
———————————————————————————-
| Id  | Operation            |  Name          | Rows  | Bytes |  Cost  |
———————————————————————–
|   0 | UPDATE STATEMENT     |                |     1 |     9 |     3 |
|   1 |  UPDATE              | ACD_PERSON     |       |       |       |
|*  2 |   INDEX  UNIQUE SCAN  | PK_ACD_PERSON  |     1 |     9 |     2 |
———————————————————————–

2.  运行以下来找出索引语句。

set long 100000
select dbms_metadata.get_ddl(‘INDEX’,'<index name>’,'<owner>’) from dual;

3.  Drop 索引

DROP INDEX <index_name>;

4.  重建索引。

CREATE INDEX <index_name> ON table(column);

 

 

更新应当运行不出错

:  索引必须被drop并重建。联机重建不能修复坏的ROWID

参考

NOTE:199081.1 – SQL_TRACE (10046), TKProf and Explain Plan – Overview Reference
NOTE:806195.1 – Understanding The ORA-1410 Error