Tuesday, December 07, 2010

ASM At Risk

A fellow DBA has put together the below documentation to help those of us that have ASM instances to protect. He did a great job on compiling this information:

"ASM metadata corruption is a clear and present danger that we as DBAs have to recognize and prepare for. It is nothing to be embarrassed about, and nothing to fear, as long as you are ready for it. “But Mr. DBA,” you ask, in a piping voice, “What can I do to hedge myself against future corruption of my ASM metadata headers?!” Settle down now, I’m here to help.

A situation popped up recently for one team where a drive went into predictive failure, and a controller hung, corrupting the ASM headers upon reboot. This resulted them having to completely rebuild the disk groups and restore the database from tape. If the team had had a backup of their ASM headers, all of that wouldn’t have been necessary.

Under 11g:

md_backup
md_backup is ran from the ASMCMD> prompt. It very simply creates a file that is a backup of your metadata, for all of your disk groups, or just a few if you want to specify. By default, it writes to the current directory and backs up all of the mounted disk groups’s header files.

Arguments: -b and –g
-b Specifies a location to store the backup file
-g Specifies the disk group to back up

Example: ASMCMD> md_backup –b /mydir/somebackupfile –g DG1 –g DG3
This will backup disk groups DG1 and DG3 to the file /mydir/somebackupfile.


md_restore
md_restore is a bit more involved than md_backup. As you may have guessed, it restores previously backed up metadata to disk groups you specifiy.

Arguments: -b –i –t –f –g –o
-b Specifies the backup file to read
-i Ignores errors. (Normally, if md_restore hits an error, it stops. This argument suppressed that.
-t Specifies the type of disk group to be created/restored. “full” creates a disk group and restores the metadata. “nodg” restores metadata only, and “newdg” creates a new disk group with a different name using in conjunction with the –o argument.
-o Renames the disk group
-f writes the SQL commands to be performed in the restore to a file instead of executing them (sql_script_file).
-g selects the disk groups to be restored. If none are specified, it restores all of them.

Example: ASMCMD> md_restore –t full –g DG1 –i backup_file
This will restore disk group DG1 using the specified file.

Example: ASMCMD> md_restore –t nodg –g DG1 –i backup_file
This will restore an existing disk group’s metadata.

Under 10g:

Things become different for 10g, as Oracle hadn’t integrated ASM header backup yet. You can, however, backup the ASM header info using the following UNIX command:

dd if= of= bs=4096 count=1

That will capture the first 4k block of the ASM header file. You would do this for each file, creating a separate backup for each.

A simple dd will write it back in to the header, if you need to restore from your backup.

Example: dd if=/dev/rdisk/asmvol1 of=/u01/ora_backup/asmvo1_header.bak bs=4096 count=1
This would capture the first 4k of the given ASM file.

Example: dd if=/u01/ora_backup/asmvol1_header.bak of=/dev/rdisk/asmvol1
This would write in the backed up header back into the file it was backed up from.

It is always a good idea to keep backups of your disk group metadata, because no one can know when the corruption gremlin might strike. If you have any questions, do what most people do, and Google up an answer for yourself."

Hope you find this as valuable as I.

No comments: