Oracle介質恢復(二)
4. 塊的損壞與恢復
塊已經不是Oracle的格式,或者其內部是不一致的,那麼這個塊就被認為已損壞。塊介質恢復是當資料檔案是聯機時,還原和恢復資料塊的技術。如果只有一些塊被破壞,那麼塊介質恢復是較好的恢復選擇。
BBED(Block Brower and EDitor)是Oracle的一款內部工具,可以用來直接檢視和修改Oracle資料檔案塊的內容。BBED是一個針對Oracle的二進位制編譯工具。該工具不受Oracle支援,預設是不生成可執行檔案的,在使用錢需要重新編譯。
1) 編譯BBED
直接在Oracle 11gR2 的環境中編譯BBED,將收到以下錯誤資訊:
$ cd $ORACLE_HOME/rdbms/lib
$ make –f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
……
gcc: /u01/app/oracle/11.2.0/db_1/rdbms/lib/ssbbded.o: No such file or directory
gcc: /u01/app/oracle/11.2.0/db_1/rdbms/lib/sbbdpt.o: No such file or directory
Oracle 11gR2 環境中編譯BBED可執行檔案所需要的ssbbded.o和sbbdpt.o物件檔案被移除,不過可以從Oracle 10g環境中將這兩個檔案拷貝到Oracle 11g環境中進行編譯。
除了將上面的ssbbded.o和sbbdpt.o檔案拷貝到Oracle 11g環境外,BBED還需要用到$ORACLE_HOME/rdbms/mesg目錄下的bbedus.msg和bbedus.msb兩個資訊檔案,這幾個檔案都需要從Oracle 10g中拷貝到Oracle 11g中對應的目錄中。下面是將以上4個檔案從Oracle 10g中拷貝到Oracle 11g對應目錄之後的編譯過程:
$ cd $ORACLE_HOME/rdbms/lib
$ make –f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
$ file bbed
$ size bbed
$ ldd bbed
$ cp bbed $ORACLE_HOME/bin/
$ cd /
$ which bbed
/u01/app/oracle/product/11.2.0/db_1/bin/bbed
編譯成功後登入BBED,登入時需要密碼(預設密碼是:blockedit)
$ bbed
2) BBED模擬表資料塊的損壞
a. 建立測試表
SQL> create table test.testbbed as select * from dba_tables;
b. 建立BBED引數檔案
由於BBED無法對ASM進行操作,所以這裡將表建立到ACFS檔案系統的儲存裝置上。這裡建立兩個BBED引數檔案,filelist.txt儲存要操作的資料檔案的ID和路徑,bbed.par儲存資料檔案的塊大小、filelist.txt的位置和操作模式:
$ more filelist.txt
6 /testbbed/tbtbs01.dbf
$ more bbed.par
blocksize=8192
listfile=filelist.txt
mode=edit
filelist.txt的內容可通過select file_id,file_name from dba_data_filesSQL查詢得到。
c. BBED基本操作
ü 使用指定的引數檔案登入BBED:
$ bbed parfile=bbed.par
ü 顯示BBED配置檔案中指定的資料檔案資訊:
BBED> info
ü 設定要操作的資料檔案:
BBED> set file 6
ü 顯示要操作的資料檔案的詳細資訊:
BBED> show
d. 模擬壞塊
修改檔案號為6的第136號塊:
BBED> modify 1000 file 6 block 136
如果修改錯誤,可以執行revert命令回滾。
e. 驗證壞塊
在BBED執行以下命令驗證資料塊,發現block 136已經損壞
BBED> verify
f. 使用DBV工具驗證
使用DBV工具驗證發現file 6 block 136已經損壞
$ dbv file=/testbbed/tbtbs01.dbf blocksize=8192
g. 執行塊讀取操作
執行一個test.testbbed的全表掃描,收到ORA-01578錯誤
SQL> alter system flush buffer_cache;
SQL> select /*+FULL(T)*/ COUNT(1) FROM TEST.TESTBBED T;
3) RMAN的塊恢復
塊介質恢復用來恢復一個單獨的塊或者資料檔案中資料塊的集合,如果是小資料量的資料丟失或損壞,而不是整個資料檔案,這種型別的恢復是很有用的。通常,塊損壞會在跟蹤檔案中報告錯誤資訊。
塊級別的資料丟失通常是由以下兩個原因造成的:
n I/O錯誤引起的映象資料丟失。
n 記憶體損壞,重新整理到磁碟。
a. 使用RMAN BLOCKRECOVER命令的注意事項
n 目標資料庫必須在MOUNT或者OPEN狀態,如果執行某個資料檔案的塊介質恢復,那麼該資料檔案不能是離線狀態。
n 塊介質恢復不支援基於時間點的塊恢復。
n 只能在損壞的塊上執行塊介質恢復。
n 塊被標記為介質損壞之後是不能訪問的,直達恢復完成。
n 當使用備份的控制檔案載入資料庫時,不能執行塊的介質恢復。
n 必須有一個包含損壞塊檔案的全備份,塊介質恢復不能使用增量備份。
n 如果RMAN訪問塊介質恢復需要特定歸檔Redo日誌檔案失敗,那麼將執行還原FAILOVER,嘗試使用RMAN資料庫中列出的適合這個操作的所有其它備份,如果沒有合適的備份存在執行才會失敗。
n 資料檔案頭不能被恢復
n 不能在非歸檔模式下執行塊介質恢復。
b. RMAN BLOCKRECOVER命令的使用方式
RMAN BLOCKRECOVER命令有以下三種使用方式:
方式1 使用BLOCKRECOVER CORRUPTION LIST命令恢復在V$DATABASE_BLOCK_CORRUPTION檢視中報告的所有塊:
RMAN> blockrecover corruption list;
方式2 使用BLOCKRECOVER 命令的時候指定檔案號和塊號:
RMAN>
blockrecover datafile
方式3 執行blockrecover命令的時候指定表空間和資料塊地址(DBA):
RMAN> blockrecover
tablespace
c. RMAN BLOCKRECOVER使用的例子
例子1 恢復3個資料檔案的損壞塊:
RMAN> BLOCKRECOVER DATAFILE 2 BLOCK 12,13 DATAFILE 3 BLOCK 5,98,99 DATAFILE 4 BLOCK 19;
例子2:從資料檔案拷貝中還原、恢復一系列塊:
RMAN> RUN
{
BLOCKRECOVER DATAFILE 3 BLOCK 2,3,4,5 TABLESPACE sales DBA 4194405,4194409,4194412 from DATAFILECOPY;
}
例子3:從指定的tag備份總還原、恢復塊
RMAN> BLOCKRECOVER TABLESPACE SYSTEM DBA 4194404,4194405 FROM TAG “weekly_backup”;
例子4:從用於恢復資料到兩天以前的備份中還原、恢復SYSTEM表空間中的兩個塊:
RMAN> BLOCKRECOVER TALBESPACE SYSTEM DBA 4194404,4194405 RESOTRE UNTILL TIME ‘sysdate-2’;
例子5:執行備份驗證資料庫,修復在V$DATABASE_BLOCK_CORRUPTION中記錄的所有損壞塊:
RMAN> BACKUP VALIDATE DATABASE;
RMAN> BLOCKRECOVER CORRUPTION LIST;
4) 確定損壞塊對應的物件
要確定一個損壞的物件需要知道AFN(Absolute File Numbe,絕對檔案號)和BL(Block Number,塊號)。AFN和RFN(Relative File Number,相對檔案號)通常是相同的,但是也可能不同(特別是如果資料庫從Oracle7遷移或者如果使用的是可傳輸、可插拔的表空間),獲得正確的AFN和RFN就顯得非常重要,如果指定了錯誤的AFN將導致找不到物件或錯誤識別物件。
a. 確定AFN和BL
方法1:從ORA-1578得到AFN
ORA-1578之後產生的ORA-1110錯誤提供AFN號碼。
方法2:從DBVERIFY輸出獲得AFN。
通過使用DBV工具會報告損壞的塊,DBV工具通過提供與相關的RDBA、RFN和BL資訊。
方法3:從RMAN獲得AFN
RMAN在V$DATABASE_BLOCK_CORRUPTION檢視報告損壞的塊。該檢視的欄位FILE#表示AFN,欄位BLOCK#表示BL。
b. 定位損壞的物件
一旦AFN被識別,執行以下SQL語句定位損壞的物件:
SQL> select *
From DBA_EXTENTS
Where file_id=&AFN
And &BL BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS-1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29339097/viewspace-1062458/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle介質恢復(三)Oracle
- Oracle介質恢復(一)Oracle
- Oracle例項恢復和介質恢復Oracle
- oracle database 例項恢復和介質恢復OracleDatabase
- oracle media recovery介質恢復實驗-Oracle
- oracle media recovery介質恢復小記Oracle
- SCN、Checkpoint、例項恢復介質恢復理解
- 塊介質恢復(BLOCKRECOVER命令)BloC
- Oracle恢復實驗(二)Oracle
- 【MySQL】二、Innodb 恢復工具介紹MySql
- Backup And Recovery User's Guide-恢復的取消(並行介質恢復)GUIIDE並行
- Backup And Recovery User's Guide-介質恢復問題解決-調查介質恢復問題:階段1GUIIDE
- Oracle 備份和恢復介紹Oracle
- win10重置系統沒有恢復介質怎麼辦 win10重置沒有恢復介質的方法Win10
- ORACLE備份&恢復案例二(轉)Oracle
- 基於RMAN實現壞塊介質恢復(blockrecover)BloC
- HDR 在發生介質故障後恢復資料
- oracle備份和恢復策略簡介Oracle
- Oracle備份和恢復工具介紹Oracle
- ORA-01113: 檔案 需要介質恢復
- Oracle如何進行塊介質的恢復?(有邏輯壞塊是如何處理)Oracle
- Backup And Recovery User's Guide-介質恢復問題解決-執行試驗恢復GUIIDE
- 介質恢復,即磁碟或作業系統檔案損壞的恢復-非RMAN方法作業系統
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(二)
- Backup And Recovery User's Guide-RMAN資料修復概念-RMAN介質恢復GUIIDE
- 水煮三《Oracle9i——ora-01113和0110"介質恢復"Oracle
- Backup And Recovery User's Guide-介質恢復問題解決GUIIDE
- OCP-032-Chapter07 例項和介質恢復結構(zt)APT
- NBU恢復oracleOracle
- Oracle資料壞塊簡介及其恢復(dbv、BMR)Oracle
- rman恢復方案和oracle異機恢復Oracle
- oracle實驗記錄 (恢復-完全恢復)Oracle
- oracle實驗記錄 (恢復-rman恢復)Oracle
- ASM管理環境----資料檔案丟失介質恢復(MEDIA RECOVERY)ASM
- ORA-01113:檔案n需要介質恢復 (轉載)
- SQL Server 備份與恢復之六:介質集與備份集SQLServer
- Backup And Recovery User's Guide-備份和恢復介紹-Oracle閃回技術(二)GUIIDEOracle
- Oracle備份恢復之熱備份恢復及異機恢復Oracle