Re: ORA-01578 oracle data block corrupted.

From: Jan Overgaard <jo_at_cci.dk>
Date: Tue, 14 Mar 1995 15:59:40 GMT
Message-ID: <D5FtrI.9t5_at_cci.dk>


In article lsn_at_arc.electriciti.com, Paul Singer <singerap_at_powergrid.electriciti.com> () writes:
>rmte_at_ix.netcom.com (rocky termanini) wrote:
>>
>> We have been running into the ORA-01578 (oracle data block corrupted)
>> error on a regular basis. Most of the corruptions have been found in
>> our indexes, though a few have been on tables.
>
>
>This is NOT good news. It could, and probably does, mean that
>you have lost data. I hope your backups were good.
>
>Oracle assues that the database is in good condition when it is
>started. It does not check each block of the database when it
>starts up. If some errent program or process alters the contents
>of an Oracle database file Oracel will not detect the error
>until it actually trys to read from, or writ to the damaged database
>block. There is a crc or some simular chcking built into each block
>header. If Oracel reads a database block and it fails you will get
>this error.
>
>Check the status of your disks. You could be due for a disk failure
>or your file system could be curropted. If you recently restored
>the database from tape you could have had a bad restore or bad blocks
>on the tape. If you run a regular backup process check to make shure
>that it is not messing with your database files.
>
>You can force Oracle to validate the status of your tables by
>SELECT * FROM all your tables. This will chase out any further errors
>that may be lurking there. Validat your indices.
>
>Good Luck.

The action depends on type of object and you backup status.

Index:
drop and recreate index.

Tables:

If is not possible to recreate the table up to the point before the error you have the possibility of setting an event in your init.ora file instructing Oracle to skip the corrupted data.

event = "10231 trace name context forever, level 10"

If you got an index on the table then you can narrow the corrupted rows down with the following statement:

select count(*) from Table
where indexed_col > XX
minus
select count(*) from Table

Be careful that you remember to remove the envent again from the init.ora file.

Good luck

Jan Received on Tue Mar 14 1995 - 16:59:40 CET

Original text of this message