ASM在RAC环境中的使用已经极其广泛,但是往往由于对于ASM的认识不够,很多时候在处理障时,会陷入谜团。
由于断电导致了存储故障,进而使得部分磁盘对主机不可见,某个磁盘组无法加载,此时客户尝试过重启数据库,结果遇到如下错误:
Thu Jun 25
Errors in file /u01/.../udump/billing1_ora...trc:
ORA-15062:ASM disk is globally closed
ORA-15025:could not open disk '/dev/rdsk/c12t0d2'
ORA-27041:unable to open file
HPUX-ia64 Error:6:No such device or address
Additional information:3
注意在这个提示中,有一个重要提示:ORA-15062:ASM磁盘已经全局关闭,也就是说,由于磁盘无法访问,ASM将磁盘全局关闭,ASM磁盘也不可用。
如果强制打开数据库,Oracle会将该磁盘组的所有文件OFFLINE离线处理,然后Open数据库:
Thu Jun
KCF:write/open error block=0xce0db online=1
file=148 +DG_DATA_03/billing/datafile/tbs_table_20.256.6542.. error=15081 txt:''
Automatic datafile offline dure to write error on file 148:+DG_DATA_03/billing/datafile/tbs_table_20.256....
...
这就造成了进一步的一个现象,在数据库看来,始终有一个磁盘组处于MOUNTED的状态,数据库无法连接,也就无法访问其中的数据通信:
SQL>select name,state from v$asm_diskgoup_stat;
这其实很正常,Oracle不访问该DG中的磁盘,该磁盘就保持了MOUNTED状态,我们只要尝试访问该磁盘中的文件,该磁盘组就会显示为数据库连接
的CONNECTED状态。简单地通过如下rman的copy命令就激活了磁盘组年的磁盘访问:
RMAN>copy datafile '+DG_DATA_03/billing/datafile/tbs_20..' to '/backup/a.dbf'
接下来通过recover那些被OFFLINE的,再执行ONLINE操作,就将数据恢复到了正常状态.