ORACLE CHECKLIST FOR CORRUPTION AND DATABASE DOWN

If you cannot recover data by yourself, ask Parnassusdata, the professional ORACLE database recovery team for help.

Parnassusdata Software Database Recovery Team

Service Hotline:  +86 13764045638 E-mail: [email protected]

STARTUP HANGS 
If the database hangs on startup: 
1.) Instruct the customer to do a STARTUP NOMOUNT (to see if the 
background processes will start). 
2.) Try an ALTER DATABASE MOUNT. 
3.) Try doing some SELECTs from any v$ view. 
4.) If this works, you can do an alter session 
set _trace_enabled=true in the init.ora. 
5.) Then do an ALTER DATABASE OPEN. 
6.) After the db has been hanging for a minute or so, use CTRL/C (depress 
and hold the CTRL key while pressing the 'c' key) to stop the 
process. See if the trace tells you which SQL statement it is 
hanging on (it could be dictionary corrupt). 
TABLESPACE, LOST DATAFILE 
After a tablespace has been created with its datafiles, the datafiles 
must exist for the life of the tablespace unless all objects in the 
tablespace are dropped first. The supported way to recover from a 
lost datafile is to have the customer restore the old datafile from 
an older, cold backup (full backup) or a hot backup (single tablespace 
backup while the database is online). 
If the database is in NOARCHIVELOG mode, you will only succeed in 
recovering the db if the datafile in the redo to be applied to it is 
within the range of your online REDO logs. 
If the customer has no backups of the datafile that is corrupt, there 
is a chance the events 10231 and 10233 can be set to skip the corrupted 
blocks so an export can be done. If that doesn't work or the corruption 
is in the datafile header, they will loose their data. 
CONTROL FILES 
If you are mirroring control files, and one is bad, delete it and copy 
the good one in its place. 
If you need to create a new control file or change the MAXLOGFILES, 
MAXLOGMEMBERS, MAXDATAFILES, MAXINSTANCES, or MAXLOGHISTORY parameters:



SVRMGRL> alter database backup controlfile to trace; 
Edit the trace file (it will be the latest one), take out the trace 
file header and trailer text and you have the commands to re-create 
your trace file. You can rename the file to something meaningful 
then @ the file from SVRMGRL. Be sure to shutdown the database and 
remove the old controlfiles first. 
SKIPPING BAD BLOCK 
When oracle hits a data block that is corrupt, it returns an ORA-1578 
error. To skip bad blocks to salvage data, you can set the following 
events in the init.ora: 
set events '10231 trace name context forever, level 10' (table 
set events '10233 trace name context forever, level 10' (index 
Be sure to drop the indexes first if the corruption is in a table as 
the 10231 will only work on a full table scan. The 10232 will check for 
corrupted blocks on modified index blocks and will mark the index as 
unusable. To check for index corruption, set this event and rebuild the 
index. 
ANALYZE INDEX VALIDATE STRUCTURE 
ANALYZE INDEX VALIDATE STRUCTURE may not reveal index corruption. 
ONLINE REDO LOG 
In the normal operation of a database, committed row changes are written 
to the online redo logs as changes are made to the database. The redo 
log data is used to recover the database should something happen. When 
a database is in archivelog mode, these redo logs are copied as they 
are filled to a directory where they can be used during recovery. If a 
database is not in archivelog mode, the redo logs will be filled in a 
round robin fashion. When the last log is filled, the first one is filled 
again, overwriting what was there before. The window of recovery is very 
short and if there are any datafiles that are corrupted, there is no 
recovery of that data 
WHAT ARE THE IMPLICATIONS OF OPEN RESETLOGS 
If the customer is in ARCHIVELOG mode they will no longer be able to apply 
any of their archive logs (roll forward). They will have to take another 
cold backup of their database and start a new set of archive logs. 
ROLL FORWARD/ROLL BACK VERVIE 
Hidden (undocumented) init.ora parameters can be used for many things 
including bypassing database safety checks during recovery. Be sure to 
tell The customer this is unsupported and may corrupt their database 
worse than it already is. However, if the customer has no backups and 
is not in archive log mode, they may have no choice. 
ALLOW_RESETLOGS_CORRUPTION=TRUE 
A common situation is corruption in the online redo logs. Usually the 
problem is the instance crashed and there are transactions in the redo 
that must be rolled back, but the redo is corrupt. Here are the steps 
to ATTEMPT to force the database open:

1) Add the parameter _ALLOW_RESETLOGS_CORRUPTION=TRUE to 
the init.ora file 
2) STARTUP MOUNT the database 
3) Issue the appropriate RECOVER DATABASE command: 
a) RECOVER DATABASE UNTIL CANCEL 
(Their controlfile is usable) 
-orb) 
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL 
RECOVER DATABASE USING BACKUP CONTROLFILE 
(Their controlfile is not the current one) 
4) Enter CANCEL to cancel recovery - there are NO archive logs applied 
5) Enter ALTER DATABASE OPEN RESETLOG 
6) Try selecting from a table (i.e., SELECT SYSDATE FROM DUAL) 
Once the database is open, it is imperative that they export, rebuild 
the database, and then import. 
ROLLBACK SEGMENT PROBLEMS 
A rollback segment is a structure that holds before-commit data for a data 
table. If a datafile containing a rollback segment is gone, the 
transaction that was open at the time of the crash cannot be committed. 
This is a problem because the data block is marked as having an active 
transaction but the data is still sitting in the (missing) rollback 
segment. "Hidden" parameters in the init.ora. They can get around this 
but there will probably be logical data corruption. Have them set: 
_offline_rollback_segments = (,... 
STARTUP MOUNT and RECOVER DATABASE 
Either get the trace or have them search for "obj" in the trace file 
which should reveal the object trying to rollback. If you can locate 
the object, comment out the ROLLBACK_SEGMENTS parameter, open the 
database and try and drop the object. Then uncomment the 
ROLLBACK_SEGMENTS parameter and attempt to open the database. As a last 
resort you can set the hidden parameter: 
_corrupted_rollback_segments 
You can have the customer change: 
rollback_segments = ( ,....,  
- to - 
_corrupted_rollback_segments = ( ,....,  
The above list should contain all the rollbacks originally listed in the 
ROLLBACK_SEGMENTS parameter. 
SVRMGRL> startup open

SVRMGRL> ALTER DATABASE DROP TABLESPACE rollback_tbs INCLUDING CONTENTS 
There may be corruption in the database depending on what was happening 
at the time of the problem. 
DATABASE HANGING 
If the database is hanging and there are no errors, the best thing to do 
is have them get a systemstate dump (ALTER SESSION, etc. and have them 
either ftp or email it to you. Then get a copy of the ass.awk and run it 
against the trace file. Objects in brackets are what is being waited. 
BACKUP AND RESTORE 
If a customer has a corrupted database and needs to restore from a cold 
backup and has archive logs, have them restore the cold backup, make 
sure all the archive logs are in the archive log destination directory. 
Then have them do a STARTUP MOUNT, then RECOVER DATABASE. 
ALTER DATABASE RECOVER DATABASE. They will be prompted for archive logs. 
They can also set the recovery to be automatic so they are not prompted 
for each log. (See the ALTER DATABASE RECOVER command for more options.) 


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *