Ora Corruption 1

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 7

APPLIES TO:

Oracle Database - Enterprise Edition - Version 9.2.0.8 and later


Oracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Cloud Machine - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Oracle Database Backup Service - Version N/A and later
Information in this document applies to any platform.

DETAILS

The goal of this article is to give a global picture about corruption errors and appropriate actions depending where the corruption is found. 

In addition to the Support Notes below, you can get additional information here: My Oracle Support Comunity

The information contained in this targets product administrators.

In the common errors is possible to show only the notes related with an specific error or with an specific type of corruption by clicking the desired button.

ACTIONS

CORRUPTION EXPLANATION

What is a corruption? How to identify corruptions in a database?


Note 840978.1 : Physical and Logical block corruption Note 472231.1 : How to identify all the Corrupted Objects in the Database reported by RMAN
Note 819533.1 : How to identify the corrupt Object reported by ORA-1578 / RMAN / DBVERIFY
How to force reformat a corrupted block?
Note 336133.1 : How to Format Corrupted Block Not Part of Known corruptions caused by OS/HW Issues
Any Segment Note 1323649.1 : Known Corruption issues caused by 3rd party Software Provider

TYPES OF CORRUPTIONS

 How to handle Segment Corruptions (Table, Index, LOB, Long, IOT, Temporary This section refers to BLOCK CORRUPTION affecting
SEGMENT CORRUPTED
database segments.
Note 48808.1 : OERR: ORA-00227 corrupt block detected in controlfile: (block %s, # blocks %s) Master Note / Troubleshooting,
CONTROLFILE CORRUPTION
Diagnostic and Solution

Note 1950230.1 : Solving UNDO Corruption

UNDO CORRUPTION <Note 281429.1> : Basic Steps to be Followed While Solving ORA-00600 [4194]/[4193] Errors Without Using Unsupported parameter
Note 39283.1   : ORA-600 [4194] "Undo Record Number Mismatch While Adding Undo Record"
Note 431652.1 : How to Change the Existing Undo Tablespace to a New Undo Tablespace

It refers to inconsistencies between Data Dictionary tables. These tables are owned by the user SYS and are stored in the SYSTEM tablespace
to keep track of the users, tables, indexes, etc that are created in the database.

Example of this inconsistency is:


DICTIONARY INCONSISTENCY
'Problem: OBJ$.OWNER# not in USER$" which refers to a user in table OBJ$ that does not exist in USER$. To identify known Data
Dictionary inconsistencies run script hcheck:

Note 136697.1 : "hcheck.sql" Script to Check for Known Problems in Oracle8i, Oracle9i, Oracle10g, Oracle 11g and Oracle 12c

Note 332672.1 : ORA-354 ORA-353 and ORA-312 on Redo Log Group members
REDO CORRUPTION
Note 1031381.6 : How to Dump Redo Log File Information.

It means that a column does not contain a valid value corresponding to its declaration; example: column was declared as date but the stored
date is invalid.  If the block structure is ok; example, dbverify nor rman with the check logical option detect any issue then this is not a block
corruption but it is included here for completeness.

ROW & COLUMN CORRUPTION


Note 428526.1 : Baddata Script To Check Database For Corrupt column data
Note 976591.1 : How To validate a date/timestamp column
Note 869305.1 : How To identify a 'corrupt' row when error is raised but no row information provided
Note 136620.1 : Sanity Check of Oracle NUMBERS, How to Find and Patch

Table / Index inconsistencies is when an entry in the Table does not exist in the Index or vice versa. The common errors are ORA-8102, ORA-
600 [kdsgrp1], ORA-1499 by "analyze validate structure cascade".
TABLE/INDEX INCONSISTENCY
See section "Identify TABLE / INDEX Mismatch" in:

Note 836658.1 : Identify the Corruption Extension for Block Corruption, Table/Index Inconsistency, Data Dictionary and Lost Writes
HOW TO HANDLE SEGMENT CORRUPTIONS

Note 28814.1 : Handling Oracle Block Corruptions in Oracle7/8/8i/9i/10g/11g


TABLE CORRUPTION

Note 28814.1 : Handling Oracle Block Corruptions in Oracle7/8/8i/9i/10g/11g


Note 438143.1 : Use of dbms_metadata.get_ddl() to extract Index DDL
INDEX CORRUPTION
Note 394143.1 : How Could I Format The Output From Dbms_metadata.Get_ddl Utility?

Note 28814.1 : Handling Oracle Block Corruptions in Oracle7/8/8i/9i/10g/11g

Note 452341.1 : How to detect Lob Corruption


LOB / LOBSEGMENT
Note 293515.1 : ORA-1578 ORA-26040 in a LOB segment - Script to solve the errors

** Contact Oracle Support **  -->> Generic notes about these objects: * None Public*
LONG

Reference the IOT section in:

Note 28814.1 : Handling Oracle Block Corruptions in Oracle7/8/8i/9i/10g/11g

Also reference section "SKIP ORA-600 in IOT" in:


Index Organized Table IOT
Note 1527738.1 : SCRIPT to skip ORA-8103 ORA-1410 ORA-1578 ORA-600 [kdsgrp1] when reading a TABLE

Note 1332088.1 : How to clear a block corruption in a TEMPORARY segment 


TEMPORARY Note 422039.1 : Steps to drop a temporary segment while SMON is not able

PACKAGE INFORMATION AND EXAMPLES

Note 556733.1 : DBMS_REPAIR script


DBMS_REPAIR Note 68013.1: DBMS_REPAIR example

Note 438143.1 : Use of dbms_metadata.get_ddl() to extract Index DDL


Note 394143.1 : Q How Could I Format The Output From Dbms_metadata.Get_ddl Utility?
DBMS_METADATA Note 332077.1 : Why Does DBMS_METADATA.GET_DDL Not Show All Lines?
Note 188838.1 : Using DBMS_METADATA To Get The DDL For Objects
TOOLS

Note 35512.1   : DBVERIFY - Database file Verification Utility (7.3.2 - 10.2)


Note 269028.1 : DBV Reports Corruption Even After Drop/Recreate Object
DBV
Note 336133.1 : How to Format Corrupted Block Not Part of Any Segment

Note 214369.1 : Using The Export Utility To Check For Database Corruption
EXPORT

Note 472231.1 : How to identify all the Corrupted Objects in the Database with RMAN
RMAN

Note 733824.1 : How To Recreate a database using TTS


TRANSPORTABLE TABLESPACE

Note 1579579.1 : Master Note For Oracle Data Recovery Advisor (DRA)
DATA RECOVERY ADVISOR

Note 153788.1 : ORA-600/ORA-7445 Error Look-up Tool


ORA600/7445 Error Lockup tool

GENERIC LINKS

Note 268895.1 : Oracle Database Server Patchset Information, Versions: 8.1.7 to 11.2.0
Note 1061295.1 : Patch Set Updates - One-off Patch Conflict Resolution
Note 161549.1 : Oracle Database, Networking and Grid Agent Patches for Microsoft Platforms
PATCHSET UPDATES (PSU) & CRITICAL PATCH
Note 756671.1 : Oracle Recommended Patches -- Oracle Database
UPDATES (CPU)
Note 742060.1 : Release Schedule of Current Database Releases
Note 161818.1 : Oracle Database (RDBMS) Releases Support Status Summary

COMMON ERRORS

ORA-1578 The data block indicated was corrupt.  This was a physical corruption, also called a media corruption. The cause is
unknown but is most likely external to the database. If ORA-26040 is also signaled, the corruption is due to  NOLOGGING or
ORA-1578
UNRECOVERABLE operations.

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
ORA-1410 indicates the ROWID is for a BLOCK that is not part of this table.

The object has been deleted by another user since the operation began; example: another session truncated or dropped the segment
ORA-8103 while the SQL statement was still active.
If the error is reproducible, following may be the reasons:
a.) The header block has an invalid block type.
b.) The data_object_id (seg/obj) stored in the block is different than the data_object_id stored in the segment header. See
dba_objects.data_object_id and compare it to the decimal value stored in the block (field seg/obj).

An ORA-08102 indicates that there is a mismatch between the key(s) stored in the index and the values stored in the table. What
typically happens is the index is built and at some future time, some type of corruption occurs, either in the table or index, to cause
ORA-8102
the mismatch.

Generally this is a result of an ANALYZE ... VALIDATE ... command.


This error generally manifests itself when there is inconsistency in the data/Index block. Some of the block check errors that may
be found:-
a.) Row locked by a non-existent transaction
b.) The amount of space used is not equal to block size
c.) Transaction header lock count mismatch.
ORA-1498
While support are processing the tracefile it may be worth the re-running the ANALYZE after restarting the database to help show
if the corruption is consistent or if it 'moves'.
Send the tracefile to support for analysis.
If the ANALYZE was against an index you should check the whole object. Eg: Find the tablename and execute:
     ANALYZE TABLE xxx VALIDATE STRUCTURE CASCADE;

An error occurred when validating an index or a table using the ANALYZE command.
ORA-1499 One or more entries does not point to the appropriate cross-reference.

Media recovery detected a lost write of a data block.  A data block write to storage was lost during normal database operation on the
ORA-752 primary database.

Trying to access data in block that was loaded without redo generation using the NOLOGGING/UNRECOVERABLE option.
ORA-26040 This Error raises always together with ORA-1578

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
ORA-600 [12700] 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.

This is called a 'STUCK RECOVERY'.


There is an inconsistency between the information stored in the redo and the information stored in a database block being
recovered. 
ORA-600 [3020]
This error indicates a lost write or a lost change in the database

A mismatch has been detected between Redo records and rollback (Undo) records.
Oracle is validating the Undo record number relating to the change being applied against the maximum undo record number
ORA-600 [4194] recorded in the undo block.
This error is reported when the validation fails.

A mismatch has been detected between Redo records and Rollback (Undo) records.
ORA-600 [4193] Oracle is validating the Undo block sequence number in the undo block against the Redo block sequence number relating to the
change being applied.
This error is reported when this validation fails.

While backing out an undo record (i.e. at the time of rollback) Oracle found a transaction id mismatch indicating either a corruption
in the rollback segment or corruption in an object which the rollback segment is trying to apply undo records on.
ORA-600 [4137]
This would indicate a corrupted rollback segment.

Not enough free space was found when inserting a row into an index leaf block during the application of undo.
ORA-600 [6101]

Oracle is attempting to read or update a generic entry in the control file.


ORA-600 [2103] If the entry number is invalid, ORA-600 [2130] is logged.

Oracle is checking the status of transaction locks within a block.


If the lock number is greater than the number of lock entries, ORA-600 [4512] is reported followed by a stack trace, process state
ORA-600 [4512] and block dump.
This error possibly indicates a block corruption.

A data block SCN is ahead of the current SCN.


The ORA-600 [2662] occurs when an SCN is compared to the dependent SCN identified by the process that is normally close to
ORA-600 [2662] the database scn.
If the SCN is less than the dependent SCN then ORA-600 [2662] is signaled.

Oracle is accessing a rollback segment header to review if a transaction has been committed.
However, the xid given is in the future of the transaction table.
ORA-600 [4097]
This could be due to a rollback segment corruption issue.

It means that Oracle has tried to find an undo segment number in the data dictionary and this undo segment number was not found.
ORA-600 [4000]

Oracle is undoing an index leaf key operation. If the key is not found, ORA-00600 [6006] is logged.
ORA-600 [6006] ORA-600[6006] is usually caused by a media corruption problem related to either a lost write to disk or a corruption on disk.

This assertion is raised because Oracle is trying to unlock the rows in a block, but receive an incorrect block type.
ORA-600 [4552] The second argument is the block type received.

Oracle is checking that the row slot that is about to be freed is not already on the free list.
ORA-600[6856] This internal error is raised when this check fails.

During a delete operation Oracle is deleting from a view via an instead-of trigger or an Index organized table and have exceeded a
ORA-600[13011] 5000 pass count

During the execution of an UPDATE statement, after several attempts (Arg [a] passcount) Oracle is unable to get a stable set of
ORA-600[13013] rows that conform to the WHERE clause.

 
ORA-600[13030]

Oracle is trying to generate the absolute file number given a tablespace number and relative file number and cannot find a matching
ORA-600[25012] file number or the file number is zero.
Looking up/checking a tablespace invalid tablespace ID and/or rdba found
ORA-600[25026]

Invalid tsn and/or rfn found


ORA-600[25027]

An object block buffer in memory is checked and is found to have the wrong object id. This is most likely due to corruption.
ORA-600 [kcbz_check_objd_typ_3]

ORA-600 [kddummy_blkchk] is for 10g and ORA-600[kdblkcheckerror] for 11g onward.  This error reports a Logical Block
ORA-600[kddummy_blkchk] ORA-600[kdblkcheckerror] Corruption

Orphan segment or invalid rdba in Index,Table,Partition etc.  Example:  An entry in sys.ind$ does not exist in sys.seg$

ORA-600[ktadrprc-1] Note 136697.1 : "hcheck.sql" Script to Check for Known Problems in Oracle8i, Oracle9i, Oracle10g, Oracle 11g and Oracle 12c

This exception occurs when there are problems obtaining the row cache information correctly from sys.seg$. In most cases there is
no information in sys.seg$.
ORA-600[ktsircinfo_num1]
Note 136697.1 : "hcheck.sql" Script to Check for Known Problems in Oracle8i, Oracle9i, Oracle10g, Oracle 11g and Oracle 12c

This error might be that a row was not found in an Index.  Perform the check in section "Identify TABLE / INDEX Mismatch" in:

Note 836658.1 : Identify the Corruption Extension for Block Corruption, Table/Index Inconsistency, Data Dictionary and Lost
ORA-600[qertbfetchbyrowid]
Writes

This exception is raised when Oracle is performing a sanity check on the dependent SCN and fail.
ORA-600[ktbdchk1-bad dscn] The dependent scn is greater than the current scn.

You might also like