7 x 24 在线支持!
Oracle OERR: ORA 1410 "invalid ROWID"
Explanation:
This error is raised when an operation refers to a ROWID in a table
for which there is no such row.
The reference to a ROWID may be implicit from a WHERE CURRENT OF
clause or directly from a WHERE ROWID=... clause.
ORA 1410 indicates the ROWID is for a BLOCK that is not part of this
table. If you update a rowid where the BLOCK is valid but the slot
within the block is invalid you just get ZERO rows processed/returned.
This can be a source of confusion as it is inconsistent.
Diagnosis:
Find the statement in error.
Eg: To get the statement you can use Event:ERRORSTACK at LEVEL 3.
"
Find the TABLE and ROWID we are trying to operate on.
Eg: To get a ROWID you can use Event:10046 at LEVEL 4
or use debug statements in the code.
Check if this row exists.
Eg: Select * from table where ROWID='......';
Check if the row belongs to a different object:
Eg: select * from dba_extents where file_id=<FILE_NUMBER>
and <BLOCK_NUMBER> between block_id and block_id+blocks-1;
Check if TRUNCATE is being used.
Check HOW the ROWID is obtained initially (It should be from a
select for update or similar otherwise the ROW could be deleted
between determining the ROWID and subsequently referencing it)
It is sensible to 'ANALYZE TABLE xxx VALIDATE STRUCTURE CASCADE'
if non of the above show any obvious reason for the problem. This
is because the original ROWID could be obtained from an INDEX
and there may be a corruption such that the ROWID does not actually
exist in the table.
If you are using pl/sql and have a block that does an 'update ...
where current of ...' that used to work in 7.2 but now fails in 7.3,
Fixed In Bug No. Description