I worked with corrupt blocks in a database a few weeks ago and decided to write three posts about it so I don’t have to rethink all of it next time it happens. Hardware and the database have improved a lot, because I rarely run into this problem.
The first and obvious thing to state is that corrupt blocks in the database should be detected early by proper fault management (if you use Enterprise Manager you are good). When detected it should be fixed by using RMAN, either by command:
recover corruption list;
```or by recovering individual blocks, e.g.
recover datafile 42 block 5 to 6;
The Database Verification tool is supposed to do find all corrupt blocks, but last time (11.2.0.2 on Linux x64) it failed to find new ones. This tool is documented in the manual Utilities. I looped over all the data files with command dbv, but it was a waste of time. This may have something to do that there are different types of corruptions. Instead I used VALIDATE in RMAN. You can validate individual data files or the entire database:
VALIDATE DATAFILE 42;
VALIDATE DATABASE;
Next post will be on how to find objects that have, or rather, used to have data in these blocks.