您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么理解AMDU數據抽取”,在日常操作中,相信很多人在怎么理解AMDU數據抽取問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解AMDU數據抽取”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
上半年遇到一起某客戶對ASM磁盤組擴容,由于擴容期間操作不當導致磁盤組被dismount,日志如下:
通過日志可以看到由于磁盤頭的元數據被破壞,ASM檢測發現PST表不滿足冗余要求后磁盤組被dismount。對于這種類似由于ASM磁盤元數據被破壞導致磁盤組無法mount,且元數據無法修復,需要找回ASM磁盤組中丟失的ASM文件時可以使用Oracle提供的AMDU工具進行抽取。
AMDU介紹
AMDU是ASM Metadata Dump Utility的縮寫,即asm元數據導出工具,它可以從asm磁盤中將元數據信息以及磁盤中的文件直接抽取出來,并且該工具不依賴asm磁盤組的狀態,可以在asm實例關閉以及asm磁盤組dismount狀態下正常使用。當磁盤組因為某些故障無法mount后,需要恢復數據就可以使用amdu工具對asm磁盤組中的數據文件進行搶修抽取,但需要注意的是,amdu只能將文件從asm磁盤中抽取出來,如果文件本身已經損壞,amdu是無法進行修復,抽取出來的文件將依然是損壞的,像這種情況,如果需要將損壞的數據文件中的數據找回,可以使用dul類工具直接讀取抽取出來的數據文件找回數據。
回歸主題
回到本次的故障處理,磁盤組已經無法mount,且難以修復,只能用AMDU將數據文件從asm磁盤中直接抽取,因為控制文件和參數文件以及日志文件所在的磁盤組均正常,整個恢復相對比較簡單,如果控制文件所在的磁盤組也無法mount,我們可以從數據庫alert文件中找到數據庫控制文件的位置,這通常是第一步:
控制文件恢復:
control_files="+REDODG/xxxpd/controlfile/current.269.957297789"
然后通過amdu將控制文件抽取出來:
amdu -diskstring '/dev/xxx/*' -extract REDODG.269 -noreport -nodir
上面命令相關參數的含義:
·diskstring: 使用磁盤的全路徑或者是ASM_DISKSTRING參數值
·extract: 磁盤組名.ASM文件序號
·output:提取的輸出文件(當前目錄下)
·noreport:不輸出amdu的執行過程
·nodir:不創建dump目錄
數據庫啟動到mount狀態:
因為alert日志文件中輸出的啟動信息會包含實例參數信息,通過對輸出的參數信息重新編輯一個參數文件,通過參數文件以及控制文件我們就可以將數據庫啟動到mount狀態。
SQL> startup nomount pfile='/orabackup/tmp/init.ora'
ORACLE instance started.
Total System Global Area 3.2068E+10 bytes
Fixed Size 2269072 bytes
Variable Size 4362076272 bytes
Database Buffers 2.7649E+10 bytes
Redo Buffers 55242752 bytes
SQL> alter database mount;
Database altered.
SQL>
獲取數據文件名稱:
此時由于數據庫已啟動到mount狀態,通過v$datafile視圖既可獲取數據文件名稱。
select name from v$datafile;
+DATADG/xxx/datafile/system.347.957297809
+DATADG/xxx/datafile/sysaux.368.957297823
+DATADG/xxx/datafile/undotbs1.316.957297837
+DATADG/xxx/datafile/xxx_large.335.957297873
...
將ASM磁盤組中數據文件抽取到本地文件系統:
如果數據文件采用OMF命名格式直接使用amdu命令進行抽取即可,命令與抽取控制文件相同,但當數據文件命名采用+DATADG/xxx/tbs01.dbf方式,需要先抽取元數據,在元數據中通過數據文件的alias找到對應的fnum在依照OMF格式文件的抽取方式進行抽取,更詳細的介紹請參考《asm翻譯系列》。
客戶在創建數據文件時均是采用OMF文件管理方式,直接編輯如下數據文件抽取命令:
amdu -diskstring '/dev/xxx/*' -extract datadg.347 -noreport -nodir
amdu -diskstring '/dev/xxx/*' -extract datadg.368 -noreport -nodir
amdu -diskstring '/dev/xxx/*' -extract datadg.316 -noreport -nodir
amdu -diskstring '/dev/xxx/*' -extract datadg.335 -noreport -nodir
抽取完成后的文件格式默認為DATADG_347.f這樣的命令規則,由于抽取到本地后數據文件名稱已經發生變化,在數據庫mount狀態下將控制文件中記錄的數據文件名稱進行重命名,讓數據庫識別抽取到本地的數據文件。
重命名數據文件:
alter database rename file '+DATADG/xxx/datafile/system.347.957297809' to '/orabackup/xxx/DATADG_347.f';
alter database rename file '+DATADG/xxx/datafile/sysaux.368.957297823' to '/orabackup/xxx/DATADG_368.f';
alter database rename file '+DATADG/xxxdatafile/undotbs1.316.957297837' to '/orabackup/xxx/DATADG_316.f';
...
將數據庫OPEN:
由于日志文件所在的磁盤組沒有出現dismount問題,日志文件完好,并可以正常訪問,這種情況下直接open數據庫即可。
SQL> alter database open;
Database altered.
SQL>
數據庫被正常打開,但此時數據文件,都存儲在本地文件系統中,還需將數據文件移動至asm磁盤組中,由于客戶環境已無可用的asm磁盤組,對上面問題磁盤組進程刪除重新創建后使用rman copy方式將本地文件系統中的文件重新移動至asm磁盤組中:
select 'backup as copy datafile ' || file_id || ' format ' || '+DATADG;' from dba_data_files;
select 'switch datafile ' || file_id || ' to copy;' from dba_data_files;
到此,關于“怎么理解AMDU數據抽取”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。