案例:Oracle非常規恢復 ASM磁盤組diskgroup被刪除使用kfed進行完美恢復


Oracle RAC環境ASM磁盤組被強制刪除,使用kfed工具完美恢復誤刪除磁盤組案例

在某些情況下,可能因為誤操作,不小先drop diskgroup,這個時候千萬別緊張,出現此類故障,可以通過kfed進行完美恢復(數據0丟失).如果進一步損壞了相關asm disk,那后續恢復就很麻煩了,可能需要使用dul掃描磁盤來進行搶救性恢復,而且可能導致數據丟失.

1.創建Oracle環境中的測試磁盤組

[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磁盤組中

[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存放在測試磁盤組中

2.嘗試刪除磁盤組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錯誤
如果這兩個阻止你誤刪除磁盤組的警告依然不能救你,那我也不好多說啥了,只能向我一樣繼續往下

3.關閉數據庫實例,刪除磁盤組

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湊無

4.使用kfed工具恢復刪除磁盤組

[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

5.嘗試mount oracleplus 磁盤組

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進行完美恢復

 

 

--------------------------------------ORACLE-DBA----------------------------------------

最權威、專業的Oracle案例資源匯總之案例:Oracle非常規恢復 ASM磁盤組diskgroup被刪除使用kfed進行完美恢復

原文唯一網址:http://www.oracleplus.net/arch/oracle-20160602-265.html

Oracle研究中心

關鍵詞:

Oracle非常規恢復

 

 

ASM磁盤組diskgroup被刪除使用kfed進行完美恢復


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM