7 x 24 在线支持!
Oracle 当更新表时生成ORA-1410: invalid ROWID ORA-01410: 无效的 ROWID
如果自己搞不定可以找诗檀软件专业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