在某些狀況下,可能由於誤操做,不小先drop diskgroup,這個時候千萬別緊張,出現此類故障,能夠經過kfed進行完美恢復(數據0丟失).若是進一步損壞了相關asm disk,那後續恢復就很麻煩了,可能須要使用dul掃描磁盤來進行搶救性恢復,並且可能致使數據丟失.html
[grid@oracleplus ~]$ sqlplus / as sysasm SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 30 15:12:08 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Automatic Storage Management option SQL> select name,path,header_status from v$asm_disk; NAME PATH HEADER_STATU ------------------------------ ------------------------------ ------------ /dev/asm-disk3 CANDIDATE DATA_0000 /dev/asm-disk1 MEMBER DATA_0001 /dev/asm-disk2 MEMBER SQL> create diskgroup oracleplus external redundancy disk '/dev/asm-disk3'; Diskgroup created. SQL> select name,path,header_status from v$asm_disk; NAME PATH HEADER_STATU ------------------------------ ------------------------------ ------------ oracleplus_0000 /dev/asm-disk3 MEMBER DATA_0000 /dev/asm-disk1 MEMBER DATA_0001 /dev/asm-disk2 MEMBER
使用/dev/asm-disk3這個磁盤建立磁盤組oracleplus
建立表,存儲在oracleplus磁盤組中sql
[oracle@oracleplus ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 30 15:14:55 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> create tablespace oracleplus datafile '+oracleplus' size 100M; Tablespace created. SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- +DATA/oracleplus/datafile/system.256.878224279 +DATA/oracleplus/datafile/sysaux.257.878224279 +DATA/oracleplus/datafile/undotbs1.258.878224279 +DATA/oracleplus/datafile/users.259.878224279 +oracleplus/oracleplus/datafile/oracleplus.256.878397315 SQL> create table t_oracleplus tablespace oracleplus 2 as select * from dba_objects; Table created. SQL> select count(*) from t_oracleplus; COUNT(*) ---------- 86259
經過在磁盤組中建立表空間,從而實現表oracleplus存放在測試磁盤組中數據庫
SQL> drop diskgroup oracleplus; drop diskgroup oracleplus * ERROR at line 1: ORA-15039: diskgroup not dropped ORA-15053: diskgroup "oracleplus" contains existing files SQL> drop diskgroup oracleplus including contents; drop diskgroup oracleplus including contents * ERROR at line 1: ORA-15039: diskgroup not dropped ORA-15027: active use of diskgroup "oracleplus" precludes its dismount [grid@oracleplus ~]$ asmcmd ASMCMD> lsof DB_Name Instance_Name Path oracleplus oracleplus +data/oracleplus/controlfile/current.260.878224379 oracleplus oracleplus +data/oracleplus/datafile/sysaux.257.878224279 oracleplus oracleplus +data/oracleplus/datafile/system.256.878224279 oracleplus oracleplus +data/oracleplus/datafile/undotbs1.258.878224279 oracleplus oracleplus +data/oracleplus/datafile/users.259.878224279 oracleplus oracleplus +data/oracleplus/onlinelog/group_1.261.878224381 oracleplus oracleplus +data/oracleplus/onlinelog/group_2.262.878224383 oracleplus oracleplus +data/oracleplus/onlinelog/group_3.263.878224385 oracleplus oracleplus +data/oracleplus/tempfile/temp.264.878224395 oracleplus oracleplus +oracleplus/oracleplus/datafile/oracleplus.256.878397315
因爲oracleplus磁盤組被實例使用,所以磁盤組沒法刪除,報ORA-15027錯誤
因爲oracleplus磁盤組中有文件,所以磁盤組沒法刪除,報ORA-15053錯誤
若是這兩個阻止你誤刪除磁盤組的警告依然不能救你,那我也很差多說啥了,只能向我同樣繼續往下bash
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> drop diskgroup oracleplus; drop diskgroup oracleplus * ERROR at line 1: ORA-15039: diskgroup not dropped ORA-15053: diskgroup "oracleplus" contains existing files SQL> drop diskgroup oracleplus including contents; Diskgroup dropped. SQL> select name,path,header_status from v$asm_disk; NAME PATH HEADER_STATU ------------------------------ ------------------------------ ------------ /dev/asm-disk3 FORMER DATA_0000 /dev/asm-disk1 MEMBER DATA_0001 /dev/asm-disk2 MEMBER SQL> alter diskgroup oracleplus mount; alter diskgroup oracleplus mount * ERROR at line 1: ORA-15032: not all alterations performed ORA-15017: diskgroup "oracleplus" cannot be mounted ORA-15063: ASM discovered an insufficient number of disks for diskgroup "oracleplus"
磁盤組被drop以後,沒法正常mount,mount之時報ORA-15063湊無oracle
[grid@oracleplus ~]$ kfed read /dev/asm-disk3 >/tmp/disk3-0-0 [grid@oracleplus ~]$ kfed read /dev/asm-disk3 blkn=1 >/tmp/disk3-0-1 [grid@oracleplus ~]$ kfed read /dev/asm-disk3 aun=1 >/tmp/disk3-1-0 經過vi修改這些/tmp/disk3-*中的部分值 [grid@oracleplus ~]$ kfed merge /dev/asm-disk3 text=/tmp/disk3-0-0 [grid@oracleplus ~]$ kfed merge /dev/asm-disk3 blkn=1 text=/tmp/disk3-0-1 [grid@oracleplus ~]$ kfed merge /dev/asm-disk3 aun=1 text=/tmp/disk3-1-0
查詢修復後的asm disk工具
SQL> col path for a30 SQL> set lines 150 SQL> select name,path,header_status from v$asm_disk; NAME PATH HEADER_STATU ------------------------------ ------------------------------ ------------ /dev/asm-disk3 MEMBER DATA_0000 /dev/asm-disk1 MEMBER DATA_0001 /dev/asm-disk2 MEMBER
SQL> alter diskgroup oracleplus mount; Diskgroup altered. SQL> select name,path,header_status from v$asm_disk; NAME PATH HEADER_STATU ------------------------------ ------------------------------ ------------ oracleplus_0000 /dev/asm-disk3 MEMBER DATA_0000 /dev/asm-disk1 MEMBER DATA_0001 /dev/asm-disk2 MEMBER
測試恢復後磁盤組測試
SQL> startup ORACLE instance started. Total System Global Area 952020992 bytes Fixed Size 2258960 bytes Variable Size 306186224 bytes Database Buffers 637534208 bytes Redo Buffers 6041600 bytes Database mounted. Database opened. SQL> select count(*) from t_oracleplus; COUNT(*) ---------- 86259
這裏證實,當磁盤組被誤刪除後,當即中止進一步損壞,能夠經過kfed進行完美恢復
spa
--------------------------------------ORACLE-DBA----------------------------------------.net
最權威、專業的Oracle案例資源彙總之案例:Oracle很是規恢復 ASM磁盤組diskgroup被刪除使用kfed進行完美恢復orm
原文惟一網址:http://www.oracleplus.net/arch/oracle-20160602-265.html