如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
适用于:
Oracle Database - Enterprise Edition – 版本7.3.4.0到10.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