In the event you cannot mount your ASM disk groups, you will be unable to start any databases using those disk groups. Here is a possible error reported when mounting ASM disk groups:
SQL> startup mount ORA-15032: not all alterations performed ORA-15063: diskgroup "[DISK GROUP NAME]"" lacks quorum of 2 PST disks; 0 found
This error may occur if:
a) ASM disk(s) is not visible on the operating system.
b) asm_diskstring parameter is not set correctly on ASM instance(s)
c) ASM metadata in disk is overwritten or corrupted
If you have seen this error or another error indicating ASM metadata corruption and have verified that the disk(s) is visible with correct permissions on the operating system and that the asm_diskstring parameter is set correctly, your ASM metadata may be corrupted. If this is the case, you may need to re-create your ASM instance(s) and disk group(s).
The steps are:
1. Ensure that you have a prior RMAN backup of all databases using ASM
2. Shut down your ASM instance(s)
3. Re-create your ASM disk group(s)
4. Restore databases
Step 1: Ensure that you have a prior RMAN backup of all databases using ASM
The only way you can recover from ASM metadata corruption is to have a prior RMAN backup of the database in an area that would not be affected by an ASM instance outage.
Example of RMAN backup:
1. Connect RMAN to the target database for backup
$ rman nocatalog target /
2. Now Backup your Database, Archive logs and Control files. Example:
RMAN> backup device type disk format '/home/oracle/backup/%U' database plus archivelog; RMAN> backup device type disk format '/home/oracle/backup/ctrlf_%U' current controlfile;
3. Manually make copies of your spfiles. Example:
$ export ORACLE_SID=mydb SQL> CREATE PFILE='/home/oracle/initmydb.ora' FROM SPFILE='/+DATA/MYDB/PARAMETERFILE/spfile.ora';
If you do not have a good backup of all databases (datafiles, controlfiles, redo logs, archive logs), DO NOT CONTINUE BEYOND STEP 1!
Step 2: Shutdown your ASM instance(s)
Stop your database instances and ASM instances with sqlplus or srvctl (RAC)
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> shutdown immediate
$ export ORACLE_SID=mydb $ sqlplus '/ as sysdba' SQL> shutdown immediate
SRVCTL (RAC) Example:
$ srvctl stop asm -n [node name 1] $ srvctl stop asm -n [node name 2] $ srvctl stop database -d [DB_NAME]
Step 3: Re-create your ASM disk group(s)
Set your ORACLE_SID to your ASM instance and create a new diskgroup. Example:
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> startup nomount SQL> create diskgroup data external redundancy disk '/dev/rdsk/c1t4d0s4' force; SQL> shutdown immediate SQL> startup mount
Step 4: Restore database
1. Start instance using the local copy of your pfile from step 1.
$ export ORACLE_SID=mydb $ sqlplus '/ as sysdba' SQL> startup nomount pfile=initmydb.ora
2. Use RMAN to restore the controlfiles and database. Example:
$ rman target / RMAN> restore controlfile from '/home/oracle/backup/ctrlf_[string]'; -- where [string] is the unique string generated by %U. RMAN> alter database mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open resetlogs;
3. Connect to the ASM instance and get the controlfile name. Example:
$ export ORACLE_SID=+ASM $ sqlplus '/ as sysdba' SQL> select name, alias_directory from v$asm_alias;
Look for the controlfile name under the CONTROLFILE directory eg: Current.256.1
4. Edit the init[sid].ora and change the control_files parameter to point to the one identified from the ASM v$asm_alias view.
5. Re-create the spfile. Example:
SQL> create spfile='+DATA/MYDB/PARAMETERFILE/spfilemydb.ora' from pfile='/home/oracle/initmydb.ora';
6. Shutdown and restart the instance to use the newly created spfile.
7. Repeat the “STEP 5” section for additional databases.