如果自己搞不定可以找诗檀软件专业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