咨询微信: dbservice1234 7 x 24 在线支持!

Oracle OERR: ORA 1410 "invalid ROWID"

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

--------+------------+----------------------------------------------------------
7.3.2.3 Bug:374186 ORA-1410 + 6512 ON UPDATE WITH CURRENT OF (WORKS IN 7.2)
7.2.3 Bug:257514 ORA-1410 from SNAPSHOT fast refreshes.
(CNAB) Bug:502671 ORA 1410 WHEN EXECUTING PL/SQL BLOCK WITH UPDATE WHERE
CURRENT O