Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Block corruption problem -- advice needed

Block corruption problem -- advice needed

From: Diego Cutrone <diegocutrone_at_yahoo.com.ar>
Date: Sun, 26 Sep 2004 11:07:56 -0700
Message-ID: <008c01c4a3f3$c23f8660$3301a8c0@DC>


Hi List,
I'm facing a little problem here. I'm working on an installation that has an old 8.0.4 database with corrupted blocks. The situation is as follows:

Apparently their database got corrupted in February, and in spite of that they kept working with it. By Sep 9th the apps (Oracle apps) running in that instance stopped working because there were too many corrupted blocks in the database. Almost 20 days later I'm working on it.

As they cycle tapes for backups and as the database got corrupted in Feb, they don't have a good backup copy of the database (I mean with no corrupted blocks). They only have a backup from Aug 20th with some corrupted blocks and all the archive log files to go from that point in time up to Sep 9th (when the last transaction was performed). Of course they also have the current PROD database which has a "lot of" corrupted blocks.

We're talking about 7 datafiles with some corrupted blocks (Aug 20th) against 19 datafiles from the current database (Sep 9th) with a huge amount of corrupted blocks. Most of the errors I've seen after running DBV and analyze validate structure are:

kdbchk: a row ends in the middle of another

        tab=0 slot=132 begin=0xa48 len=0x58 Page 46065 failed with check code 5

and also:

kdbchk: the amount of space used is not equal to block size

        used=6994 fsc=0 avsp=927 dtl=8072

Page 15394 failed with check code 10

I believe my options are:

  1. Get into the current database and SKIP all corrupted blocks (ev. 10231), export the database, recreate it and import the previously exported data. And then deal with the missing data. Try to get the missing rows from an older backup (say Jan), if available.
  2. Restore Aug 20th database, recover the database (apply arch logs) up to Sep 9th. and see if this DB has as many corrupted blocks as the current one. Before applying the archs I'll disable AsyncI/O, and enable some more parameters to try to prevent more blocks to get corrupted (event = "10210 trace name context forever, level 10" , event = "10211 trace name context forever, level 10" , _db_block_cache_protect= true )
  3. I've been playing around with BBED for some time. I have just thought I could try to "fix" the corrupted blocks in the 7 datafiles of database from Aug 20th and then perform a recovery on that database. Do you think this might work? I wouldn't mind loosing the rows affected for the corruption in Aug 20th database.

Can anybody help me out with this? I was able to dump the affected rows, but now I need to fix them and I still don't know how to do that.

I forgot to mention, these fellows don not have Oracle support, so they cannot ask Oracle for help.

Any other ideas?

Please just let me know your opinions.

Sorry for the long email.

And thanks in advance.

Best Regards

Diego

--
http://www.freelists.org/webpage/oracle-l
Received on Sun Sep 26 2004 - 09:00:31 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US