ASM AMDU工具使用
AMDU是ORACLE針對ASM開發的源資料轉儲工具,其全稱為ASM Metadata Dump Utility(AMDU)
從oracle 11gR2版本,amdu工具可以直接使用,不需要單獨下載 命令放在$ORACLE_HOME/bin
AMDU具體以下三個主要功能:
1. 將ASM DISK上的後設資料轉儲到檔案系統上以便分析
2. 將ASM檔案的內容抽取出來並寫入到OS檔案系統,Diskgroup是否mount均可
3. 列印出塊的後設資料,以塊中C語言結構或16進位制的形式
這裡我們將用到使用AMDU抽取ASM DISKGROUP中的資料檔案; ASM作為近幾年最流行的儲存解決方案, 大家對他的優缺點都有所瞭解,其中的問題之一就是ASM是個黑盒。 一旦DISKGROUP無法MOUNT起來就意味著傳統方法無法以磁碟為基礎匯出任何資料。
AMDU解決了這一問題, 這裡我們僅討論在ASM DISKGROUP 無法MOUNT的情況下的範疇,不討論RDBMS資料檔案在ASM下訛誤的處理。
注意 AMDU雖然是11g才釋出的工具,但是實際對10g的ASM 也有效。
當前你可能遇到的場景是, ORACLE DATABASE的SPFILE、CONTROLFILE、DATAFILE均存放在ASM DISKGROUP中,而由於一些ASM ORA-600錯誤導致無法MOUNT該DISKGROUP, 你需要的是使用AMDU將這些檔案從ASM DISK中轉儲出來。
場景 1 丟失了 包括SPFILE、CONTROLFILE、DATAFILE
恢復步驟: 從備份中還原出SPFILE ,即便沒有SPFILE的話PFILE也可以,總之你需要從引數檔案中瞭解control_files的資訊
SQL> show parameter control_files
NAME TYPE VALUE
———————————— ———– ——————————
control_files string +DATA/prodb/controlfile/curren
t.260.794687955, +FRA/prodb/co
ntrolfile/current.256.79468795
5
獲得control_files 控制檔案在ASM中的位置後事情就好辦了,+DATA/prodb/controlfile/current.260.794687955 這裡 260是這個控制檔案在+DATA 這個DISKGROUP中的FILE NUMBER
此外我們還需要ASM DISK的DISCOVERY PATH資訊,這完全可以從ASM的SPFILE中的asm_diskstring 引數獲得
[oracle@mlab2 oracle.SupportTools]$ unzip amdu_X86-64.zip
Archive: amdu_X86-64.zip
inflating: libskgxp11.so
inflating: amdu
inflating: libnnz11.so
inflating: libclntsh.so.11.1
[oracle@mlab2 oracle.SupportTools]$ export LD_LIBRARY_PATH=./
[oracle@mlab2 oracle.SupportTools]$ ./amdu -diskstring ‘/dev/asm*’ -extract data.260
amdu_2009_10_10_20_19_17/
AMDU-00204: Disk N0006 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0006: ‘/dev/asm-disk10′
AMDU-00204: Disk N0003 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0003: ‘/dev/asm-disk5′
AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0002: ‘/dev/asm-disk6′
[oracle@mlab2 oracle.SupportTools]$ cd amdu_2009_10_10_20_19_17/
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls
DATA_260.f report.txt
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls -l
total 9548
-rw-r–r– 1 oracle oinstall 9748480 Oct 10 20:19 DATA_260.f
-rw-r–r– 1 oracle oinstall 9441 Oct 10 20:19 report.txt
以上轉儲出來的DATA_260.f 就是控制檔案,我們使用該控制檔案startup mount RDBMS例項:
SQL> alter system set control_files=’/opt/oracle.SupportTools/amdu_2009_10_10_20_19_17/DATA_260.f’ scope=spfile;
System altered.
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 1870647296 bytes
Fixed Size 2229424 bytes
Variable Size 452987728 bytes
Database Buffers 1409286144 bytes
Redo Buffers 6144000 bytes
Database mounted.
檢視資料檔案的位置,然後一一匯出
1234567891011
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/db/datafile/system.256.804295135
+DATA/db/datafile/sysaux.257.804295137
+DATA/db/datafile/undotbs1.258.804295139
+DATA/db/datafile/users.259.804295141
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.256 <<<<<<<<<<<<<
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.257 <<<<<<<<<<<<<
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.258 <<<<<<<<<<<<<
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.259 <<<<<<<<<<<<<
12345678
$ mv amdu_2013_07_03_18_12_56/DATA_257.f sysaux.257.804295137
$ mv amdu_2013_07_03_18_22_23/DATA_259.f users.259.804295141
$ mv amdu_2013_07_03_18_23_06/DATA_258.f undotbs1.258.804295139
$ ll
-rw-r--r-- 1 oracle dba 545267712 Jul 3 18:14 sysaux.257.804295137
-rw-r--r-- 1 oracle dba 702554112 Jul 3 18:11 system.256.804295135
-rw-r--r-- 1 oracle dba 99622912 Jul 3 18:23 undotbs1.258.804295139
-rw-r--r-- 1 oracle dba 5251072 Jul 3 18:22 users.259.804295141
11. 掛載前需要修改pfile檔案,下面是open資料庫是control file如何識別不同路徑的datafile, 我使用convert引數來解決(也可以是用set newname的方式)
db_file_name_convert='+DATA/db/datafile','/u01/amdu/amdu_datafile'
新增完pfile,啟動資料庫,最終成功啟動資料庫
12345678910111213141516
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
[oracle@Single-DB ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> select status, instance_name from v$instance;
STATUS INSTANCE_NAME
------------ ----------------
OPEN db
總結,備份很重要!!
由於是在我測試庫上進行的實驗,我沒有破壞資料檔案來完全模擬客戶問題。
但是透過這個測試,我們可以確認的是,在ASM diskgroup無法掛載的情況下,我們是有辦法將資料檔案讀出(即使是壞的),然後我們在針對具體的壞塊嘗試block恢復(估計沒有備份,這個也沒轍了)。
但是至少,資料檔案擺在我們面前了,我們還有其他很多辦法去嘗試修復,再不行,也只是丟失部分資料,因為其中可能只是個別資料檔案的個別block損壞。
總之,資料檔案弄出來了,剩下的,繼續研究吧。
從oracle 11gR2版本,amdu工具可以直接使用,不需要單獨下載 命令放在$ORACLE_HOME/bin
AMDU具體以下三個主要功能:
1. 將ASM DISK上的後設資料轉儲到檔案系統上以便分析
2. 將ASM檔案的內容抽取出來並寫入到OS檔案系統,Diskgroup是否mount均可
3. 列印出塊的後設資料,以塊中C語言結構或16進位制的形式
這裡我們將用到使用AMDU抽取ASM DISKGROUP中的資料檔案; ASM作為近幾年最流行的儲存解決方案, 大家對他的優缺點都有所瞭解,其中的問題之一就是ASM是個黑盒。 一旦DISKGROUP無法MOUNT起來就意味著傳統方法無法以磁碟為基礎匯出任何資料。
AMDU解決了這一問題, 這裡我們僅討論在ASM DISKGROUP 無法MOUNT的情況下的範疇,不討論RDBMS資料檔案在ASM下訛誤的處理。
注意 AMDU雖然是11g才釋出的工具,但是實際對10g的ASM 也有效。
當前你可能遇到的場景是, ORACLE DATABASE的SPFILE、CONTROLFILE、DATAFILE均存放在ASM DISKGROUP中,而由於一些ASM ORA-600錯誤導致無法MOUNT該DISKGROUP, 你需要的是使用AMDU將這些檔案從ASM DISK中轉儲出來。
場景 1 丟失了 包括SPFILE、CONTROLFILE、DATAFILE
恢復步驟: 從備份中還原出SPFILE ,即便沒有SPFILE的話PFILE也可以,總之你需要從引數檔案中瞭解control_files的資訊
SQL> show parameter control_files
NAME TYPE VALUE
———————————— ———– ——————————
control_files string +DATA/prodb/controlfile/curren
t.260.794687955, +FRA/prodb/co
ntrolfile/current.256.79468795
5
獲得control_files 控制檔案在ASM中的位置後事情就好辦了,+DATA/prodb/controlfile/current.260.794687955 這裡 260是這個控制檔案在+DATA 這個DISKGROUP中的FILE NUMBER
此外我們還需要ASM DISK的DISCOVERY PATH資訊,這完全可以從ASM的SPFILE中的asm_diskstring 引數獲得
[oracle@mlab2 oracle.SupportTools]$ unzip amdu_X86-64.zip
Archive: amdu_X86-64.zip
inflating: libskgxp11.so
inflating: amdu
inflating: libnnz11.so
inflating: libclntsh.so.11.1
[oracle@mlab2 oracle.SupportTools]$ export LD_LIBRARY_PATH=./
[oracle@mlab2 oracle.SupportTools]$ ./amdu -diskstring ‘/dev/asm*’ -extract data.260
amdu_2009_10_10_20_19_17/
AMDU-00204: Disk N0006 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0006: ‘/dev/asm-disk10′
AMDU-00204: Disk N0003 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0003: ‘/dev/asm-disk5′
AMDU-00204: Disk N0002 is in currently mounted diskgroup DATA
AMDU-00201: Disk N0002: ‘/dev/asm-disk6′
[oracle@mlab2 oracle.SupportTools]$ cd amdu_2009_10_10_20_19_17/
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls
DATA_260.f report.txt
[oracle@mlab2 amdu_2009_10_10_20_19_17]$ ls -l
total 9548
-rw-r–r– 1 oracle oinstall 9748480 Oct 10 20:19 DATA_260.f
-rw-r–r– 1 oracle oinstall 9441 Oct 10 20:19 report.txt
以上轉儲出來的DATA_260.f 就是控制檔案,我們使用該控制檔案startup mount RDBMS例項:
SQL> alter system set control_files=’/opt/oracle.SupportTools/amdu_2009_10_10_20_19_17/DATA_260.f’ scope=spfile;
System altered.
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 1870647296 bytes
Fixed Size 2229424 bytes
Variable Size 452987728 bytes
Database Buffers 1409286144 bytes
Redo Buffers 6144000 bytes
Database mounted.
檢視資料檔案的位置,然後一一匯出
1234567891011
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DATA/db/datafile/system.256.804295135
+DATA/db/datafile/sysaux.257.804295137
+DATA/db/datafile/undotbs1.258.804295139
+DATA/db/datafile/users.259.804295141
$ amdu -diskstring '/dev/oracleasm/disks/ASMDISK*' -extract data.256 <<<<<<<<<<<<<
$ mv amdu_2013_07_03_18_12_56/DATA_257.f sysaux.257.804295137
$ mv amdu_2013_07_03_18_22_23/DATA_259.f users.259.804295141
$ mv amdu_2013_07_03_18_23_06/DATA_258.f undotbs1.258.804295139
$ ll
-rw-r--r-- 1 oracle dba 545267712 Jul 3 18:14 sysaux.257.804295137
-rw-r--r-- 1 oracle dba 702554112 Jul 3 18:11 system.256.804295135
-rw-r--r-- 1 oracle dba 99622912 Jul 3 18:23 undotbs1.258.804295139
-rw-r--r-- 1 oracle dba 5251072 Jul 3 18:22 users.259.804295141
11. 掛載前需要修改pfile檔案,下面是open資料庫是control file如何識別不同路徑的datafile, 我使用convert引數來解決(也可以是用set newname的方式)
db_file_name_convert='+DATA/db/datafile','/u01/amdu/amdu_datafile'
新增完pfile,啟動資料庫,最終成功啟動資料庫
12345678910111213141516
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
[oracle@Single-DB ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilebk.ora';
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> select status, instance_name from v$instance;
STATUS INSTANCE_NAME
------------ ----------------
OPEN db
總結,備份很重要!!
由於是在我測試庫上進行的實驗,我沒有破壞資料檔案來完全模擬客戶問題。
但是透過這個測試,我們可以確認的是,在ASM diskgroup無法掛載的情況下,我們是有辦法將資料檔案讀出(即使是壞的),然後我們在針對具體的壞塊嘗試block恢復(估計沒有備份,這個也沒轍了)。
但是至少,資料檔案擺在我們面前了,我們還有其他很多辦法去嘗試修復,再不行,也只是丟失部分資料,因為其中可能只是個別資料檔案的個別block損壞。
總之,資料檔案弄出來了,剩下的,繼續研究吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29065182/viewspace-1157086/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM AMDU工具的使用OracleASM
- ASM管理命令列三工具:KFOD、KFED和AMDUASM命令列
- ASM管理命令列三工具:KFOD、KFED和AMDU(上)ASM命令列
- ASM管理命令列三工具:KFOD、KFED和AMDU(下)ASM命令列
- Oracle11g ASM強大的新工具AMDUOracleASM
- 使用AMDU DUMP ASM磁碟後設資料資訊ASM
- Oracle AMDU- ASM Metadata Dump UtilityOracleASM
- Oracle 12C ASM asmcmd amdu_extractOracleASM
- [ORACLE ASM] AMDU 恢復資料檔案OracleASM
- oracle 11gR2 amdu 工具可以直接使用Oracle
- 介紹Oracle自帶的一些ASM維護工具 (kfod/kfed/amdu)OracleASM
- ASM tools used by Support : KFOD, KFED, AMDU (Doc ID 1485597.1)ASM
- 用oracle amdu 抽取asm磁碟組的資料檔案OracleASM
- 【asmcmd】使用asmcmd工具管理ASMASM
- Placeholder for AMDU binaries and using with ASM 10g (Doc ID 553639.1)ASM
- rac壞了asm盤進不去怎麼辦?amdu來辦幫你ASM
- redhat 6.5之oracle 11.2.0.4 asm例項異常抽取asm配置資訊之amdu初識之一RedhatOracleASM
- ASM工具asmcmdASM
- 【ORACLE ASM】ASM 支援工具簡介OracleASM
- 使用 ASMCMD 工具管理ASM目錄及檔案ASM
- ASM管理的內部工具ASM
- AMDU資料抽取案例一則
- ASM lsdsk的使用ASM
- AIX下使用ASMAIASM
- ASM命令列管理工具asmcmdASM命令列
- How to Restore the Database Using AMDU after Diskgroup CorruptionRESTDatabase
- 利用kfod工具檢視asm磁碟組資訊ASM
- 資料恢復:AMDU資料抽取恢復資料恢復
- 【ASM】ASMSNMP使用者已存在ASM
- 使用C32asm編輯ASM
- 11g單機使用asmASM
- 10g 單機使用asmASM
- 使用RMAN將RAC+ASM複製到單例項+ASM上ASM單例
- asm files,asm directories,asm templatesASM
- AMDU 從頭部損壞的磁碟中提取檔案
- 使用udev擴充套件ASM磁碟組dev套件ASM
- 使用普通檔案建立ASM例項ASM
- 使用CREATE DISKGROUP語句建立ASM磁碟組,提示找不到相應的ASM磁碟ASM