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

Oracle ORA-600 [12700] "Index entry Points to Missing ROWID"

Oracle ORA-600 [12700] "Index entry Points to Missing ROWID"

Oracle ORA-600 [12700] "Index entry Points to Missing ROWID"

 

 

 

ERROR:

Format: ORA-600 [12700] [a] [b] [c] [d] [e]

VERSIONS:

versions 6.0 to 9.2

DESCRIPTION:

Oracle is trying to access a row using its ROWID, which has been

obtained from an index.

A mismatch was found between the index rowid and the data block it is

pointing to. The rowid points to a non-existent row in the data block.

The corruption can be in data and/or index blocks.

ORA-600 [12700] can also be reported due to a consistent read (CR)

problem.

The information dumped to the trace file varies greatly between releases:

ARGUMENTS:

There are two formats of this error.

For Oracle 7.3 and earlier, there are two additional arguments:

Arg [a] Data Block Address (DBA)

Arg [b] Row Slot Number (Provides the location of the row in the data block)

For Oracle 8i and 9i, there are up to five additional arguments:

Arg [a] Data Object ID

Arg [b] Table Relative Data Block Address (RDBA)

Arg [c] Row Slot Number of the row in the data block

Arg [d] If present - Index Relative Data Block Address (RDBA)

Arg [e] If present - Index Row Source Class

@ Note that Args [d] and [e] were added to the OERI arguments via an enhancement (see bug 2294812)

@ Index Row Source Class definitions are defined in rwsdef.h

The arguments of the ORA-600 [12700] contain information obtained

from the index we are using.

FUNCTIONALITY:

USER/ORACLE INTERFACE LAYER

IMPACT:

POSSIBLE CORRUPTION

 

 

NB Bug Fixed Description

6791996 11.2.0.1 ORA-600 errors for a DELETE with self referencing FK constraint and BITMAP index

6404058 10.2.0.5, 11.1.0.7,

11.2.0.1

OERI:12700 OERI:kdsgrp1 OERI:qertbFetchByRowID wrong results from CR rollback

of split index leaf

6772911 10.2.0.5, 11.1.0.7.3 OERI[12700] OERI[qertbFetchByRowID] OERI[kdsgrp1] due to bad CR rollback of

INDEX block

3389359 9.2.0.8, 10.2.0.1 OERI[12700] from invalid BITMAP OR in execution plan

3069818 9.2.0.6, 10.1.0.4,

10.2.0.1 Corruption possible modifying a migrated or chained row

P* 6047085 Linux x64-64: SGA corruption / crash following any ORA-7445

3070856 9.2.0.5, 10.1.0.2 OERI:12700 / 25012 / ktrexc_1 on transported tablespace with SMU

2873045 9.2.0.4, 10.1.0.2 OERI:[KCLCHKBLK_2] possible in RAC

2628232 9.2.0.4, 10.1.0.2 ORA-600's from CR served block from a plugged in tablespace

2294821 9.0.1.4, 9.2.0.2,

10.1.0.2 Additional diagnostics for OERI:12700

2093670 9.2.0.5, 10.1.0.2 OERI:12700 / BITMAP index corruption possible

1679690 8.1.7.2, 9.0.1.0 Buffer cache in memory corruption (OERI:2032) can lead to permanent data/index

mismatch (OERI:12700)

1539070 8.1.7.1.B, 9.0.1.0 Deleting/Updating rows when there is TEXT index can result in OERI:12700 /

duplicate rows from queries

* 1475310 8.1.7.1, 9.0.1.0 ALTER INDEX .. REBUILD ONLINE/ MOVE IOT ONLINE can corrupt the index

849963 8.0.6.0, 8.1.6.3,

8.1.7.0 OERI:12700 possible on DELETE from table with self referencing FK constraint

1165009 8.1.7.0 OERI:12700 possible from DELETE with TRIGGER that issues DML

 

 

 

Diagnosis:

This can be due to a real corruption OR due to a consistent read

problem. The exact information dumped to the trace file varies

greatly between releases.

- ANALYZE TABLE VALIDATE STRUCTURE CASCADE to show if it is a

real corruption or not, or perform a full range scan via the index.

If this shows as a problem, treat the issue as a corruption. This

requires dropping and recreating the index. It would be wise to dump

the affected blocks (data and index) before recreating the index. It

may also be useful to dump the redo for the data and index block for

root cause analysis.

- If the analyze succeeds, this is probably a consistent read problem.

The most common cause of the problem is a long(ish) running query

which scans through an index on which DML (update/insert) is

currently occurring and causing 'index-splitting' to occur.

In this case the longer running the query the more chance of it

hitting one of these blocks thus forcing a CR (consistent read)

back to a pre-split time. In this case, the CR block can have

an index entry marked as valid (incorrectly) whereas the data-block

has the row marked deleted (correctly).

Workarounds:

- Try not to use the index.

- For CR issues, force a dummy sort to pre-allocate the row source up

front. I.e., process the rows in a presorted order rather than unsorted.

By doing so, we reduce possible 'index-splitting'.