How to have Oracle ASM scan for and repair uncorrectable ECC errors (bad sectors)

oracleoracle-11g-r2oracle-asm

I'm running Oracle ASM (11gR2) with normal redundancy on SATA disks (WD Raptors). This is on a physical standby database, if it matters. Occasionally, disk sectors develop read errors (ECC failures). When that happens, that block is no longer mirrored, but ASM doesn't know this.

How can I have ASM read through the partitions it controls, and make sure that each block is readable?

Ideally, it'd also confirm that both sides of the mirror match, and re-write any sectors that the disk reports uncorrectable ECC errors for.

(I.e., I'd like the equivalent of mdraid's echo 'repair' > /sys/block/md0/md/sync_action or a hardware RAID controller's background consistency check.)

Update 2012-01-03: So far, the best I've found is to alter the diskgroup to drop the disk, wait for the rebalance to finish, use an OS utility to zero the disk, and then add the disk back. This of course doesn't compare the two sides of the mirror, but at least reallocates any bad sectors. It seems like there must be a better way. Its hard to believe ASM lacks such a standard RAID feature.

Best Answer

Use alter diskgroup mydiskgroup check all; or the remap command. But ASM should manage this for you; perhaps you need a higher redundancy setting on your JBODs,