重建ASM磁碟組的步驟 [ID 268481.1]

fanhongjie發表於2011-11-23

Step 1: 保證使用ASM的資料庫事先已經用RMAN做了備份
Step 2: 關閉ASM例項
Step3: 使用dd命令清除ASM磁碟上的後設資料
Step 4: 重建ASM磁碟組
Step 5: 恢復資料庫

[@more@]

這個事件中,不能mount ASM磁碟組,也就不能啟動使用這些磁碟組的資料庫,可能在mount ASM磁碟組的時候報下列錯誤:
SQL> startup mount
ORA-15032: not all alterations performed
ORA-15063: diskgroup "" lacks quorum of 2 PST disks; 0 found

錯誤可能由於下列原因導致:

a)作業系統不能訪問ASM磁碟。
b) ASM例項上沒有正確設定asm_diskstring引數。
c)磁碟上的 ASM後設資料被覆蓋或者崩潰了。

如果已經驗證了作業系統可以使用正確的許可權訪問磁碟,asm_diskstring引數也是正確設定的,仍看到這個錯誤或者其他的錯誤,意味著ASM後設資料崩潰了。那麼就需要重建ASM例項和磁碟組:

Step 1: 保證使用ASM的資料庫事先已經用RMAN做了備份
Step 2: 關閉ASM例項
Step3: 使用dd命令清除ASM磁碟上的後設資料
Step 4: 重建ASM磁碟組
Step 5: 恢復資料庫

Step 1: 保證使用ASM的資料庫事先已經用RMAN做了備份
RMAN備份的例子:
1). 連線到rman
rman nocatalog target /

2). 備份資料庫、歸檔日誌和控制檔案,例如:
RMAN> backup device type disk format '/u03/backup/%U' database plus archivelog;
RMAN> backup device type disk format '/u03/backup/ctrlf_%U' current controlfile;

3). 手動複製spfile,例如:
CREATE PFILE='/u03/app/oracle/product/10.1.0/dbs/init.ora' FROM SPFILE='/+DATA/V10FJ/spfile.ora';

Step 2: 關閉ASM例項
使用sqlplus or srvctl (RAC)關閉資料庫例項和ASM例項:
SQLPLUS Example:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> shutdown immediate

export ORACLE_SID=orcl
sqlplus '/ as sysdba'
SQL> shutdown immediate

SRVCTL (RAC) Example:
srvctl stop asm -n
srvctl stop asm -n
srvctl stop database -d

Step3: 使用dd命令清除ASM磁碟上的後設資料
在打算重建ASM例項和磁碟組之前,必須清除ASM的所有後設資料,例如:
dd if=/dev/zero of=/dev/rdsk/c1t4d0s4 bs=8192 count=12800
or
dd if=/dev/zero of=/dev/rdsk/c1t4d0s4 bs=4096 count=12800

Step 4: 重建ASM磁碟組
例如:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> startup nomount
SQL> create diskgroup data disk '/dev/rdsk/c1t4d0s4';
SQL> shutdown immediate
SQL> startup mount

Step 5: 恢復資料庫
1). 使用step 1複製的pfile啟動例項
export ORACLE_SID=orcl
sqlplus '/ as sysdba'
SQL> startup nomount pfile=init.ora

2). 使用RMAN還原控制檔案和資料庫,例如:
$>rman target /
RMAN> restore controlfile from '/u03/backup/ctrlf_'; -- where is the unique string generated

by %U.
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;

3). 連線到ASM例項,得到controlfile檔名,例如:
export ORACLE_SID=+ASM
sqlplus '/ as sysdba'
SQL> select name, alias_directory from v$asm_alias;

4). 編輯 init.ora改變control_files引數指向 ASM v$asm_alias檢視中的name標識。
5). 重建spfile,例如:
SQL> create spfile='+DATA/V10FJ/spfileV10FJ.ora'
from pfile='/u03/app/oracle/product/10.1.0/dbs/pfile.out';

6).關閉、使用新建立的spfile重啟例項。

7). 如果還有其他的資料庫,重複STEP 5。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/73920/viewspace-1056498/,如需轉載,請註明出處,否則將追究法律責任。

相關文章