-轉載-使用Oracle9i的blockrecover新特性修復資料庫中的壞塊
1.備份資料庫
2.使用工具破壞資料塊
可以使用UltraEdit或者WinHex開啟檔案修改某個資料塊,然後儲存。
3.訪問損壞的資料
此時alert_.log檔案中會記錄損壞塊。
4.檢查壞塊
也可以使用RMAN驗證資料檔案,以發現壞塊:
此時alert_.log檔案中會記錄RMAN發現的壞塊資訊:
D:\>rman target / 恢復管理器: 版本9.2.0.6.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 連線到目標資料庫: EYGLE (DBID=1365961916) RMAN> backup database format='d:\oradata\eygle_fullbk.bak' tag='eygle'; 啟動 backup 於 12-6月 -05 正在使用目標資料庫控制檔案替代恢復目錄 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=13 devtype=DISK 通道 ORA_DISK_1: 正在啟動 full 資料檔案備份集 通道 ORA_DISK_1: 正在指定備份集中的資料檔案 在備份集中包含當前的 SPFILE 備份集中包括當前控制檔案 輸入資料檔案 fno=00001 name=D:\ORADATA\EYGLE\SYSTEM01.DBF 輸入資料檔案 fno=00005 name=D:\ORADATA\EYGLE\UNDOTBS2.DBF 輸入資料檔案 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF 通道 ORA_DISK_1: 正在啟動段 1 於 12-6月 -05 通道 ORA_DISK_1: 已完成段 1 於 12-6月 -05 段 handle=D:\ORADATA\EYGLE_FULLBK.BAK comment=NONE 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:27 完成 backup 於 12-6月 -05 RMAN> list backup; 備份集列表 =================== BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間 ------- ---- -- ---------- ----------- ------------ ---------- 2 Full 140M DISK 00:00:22 12-6月 -05 BP 關鍵字: 1 狀態: AVAILABLE 標記:TAG20050612T004442 段名:D:\ORADATA\EYGLE_FULL.BAK 包含的 SPFILE: 修改時間: 04-3月 -05 備份集 2 中的資料檔案列表 檔案 LV 型別 Ckp SCN Ckp 時間 名稱 ---- -- ---- ---------- ---------- ---- 1 Full 452236 12-6月 -05 D:\ORADATA\EYGLE\SYSTEM01.DBF 2 Full 452236 12-6月 -05 D:\ORADATA\EYGLE\EYGLE01.DBF 5 Full 452236 12-6月 -05 D:\ORADATA\EYGLE\UNDOTBS2.DBF BS 關鍵字 型別 LV 大小 裝置型別 經過時間 完成時間 ------- ---- -- ---------- ----------- ------------ ---------- 4 Full 140M DISK 00:00:21 12-6月 -05 BP 關鍵字: 2 狀態: AVAILABLE 標記:EYGLE 段名:D:\ORADATA\EYGLE_FULLBK.BAK 包含的 SPFILE: 修改時間: 04-3月 -05 備份集 4 中的資料檔案列表 檔案 LV 型別 Ckp SCN Ckp 時間 名稱 ---- -- ---- ---------- ---------- ---- 1 Full 492975 12-6月 -05 D:\ORADATA\EYGLE\SYSTEM01.DBF 2 Full 492975 12-6月 -05 D:\ORADATA\EYGLE\EYGLE01.DBF 5 Full 492975 12-6月 -05 D:\ORADATA\EYGLE\UNDOTBS2.DBF RMAN> exit 恢復管理器完成。 |
2.使用工具破壞資料塊
可以使用UltraEdit或者WinHex開啟檔案修改某個資料塊,然後儲存。
3.訪問損壞的資料
D:\>sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.6.0 - Production on 星期日 6月 12 09:06:19 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 已連線到空閒例程。 09:06:19 SQL> startup ORACLE 例程已經啟動。 Total System Global Area 59842188 bytes Fixed Size 454284 bytes Variable Size 33554432 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 資料庫裝載完畢。 資料庫已經開啟。 09:06:33 SQL> select count(*)from t; select count(*)from t * ERROR 位於第 1 行: ORA-01578: ORACLE 資料塊損壞(檔案號2,塊號14) ORA-01110: 資料檔案 2: 'D:\ORADATA\EYGLE\EYGLE01.DBF' |
此時alert_.log檔案中會記錄損壞塊。
*** Corrupt block relative dba: 0x0080000e (file 2, block 14) Bad check value found during buffer read Data in bad block - type: 6 format: 2 rdba: 0x0080000e last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06 consistency value in tail: 0x85840601 check value in block header: 0xca4b, computed block checksum: 0x5a6 spare1: 0x0, spare2: 0x0, spare3: 0x0 *** Reread of rdba: 0x0080000e (file 2, block 14) found same corrupted data |
4.檢查壞塊
也可以使用RMAN驗證資料檔案,以發現壞塊:
D:\>rman target / 恢復管理器: 版本9.2.0.6.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 連線到目標資料庫: EYGLE (DBID=1365961916) RMAN> backup validate datafile 2; 啟動 backup 於 12-6月 -05 正在使用目標資料庫控制檔案替代恢復目錄 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=13 devtype=DISK 通道 ORA_DISK_1: 正在啟動 full 資料檔案備份集 通道 ORA_DISK_1: 正在指定備份集中的資料檔案 輸入資料檔案 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01 完成 backup 於 12-6月 -05 RMAN> exit 恢復管理器完成。 |
此時alert_.log檔案中會記錄RMAN發現的壞塊資訊:
*** Corrupt block relative dba: 0x0080000e (file 2, block 14) Bad check value found during backing up datafile Data in bad block - type: 6 format: 2 rdba: 0x0080000e last change scn: 0x0000.00078584 seq: 0x1 flg: 0x06 consistency value in tail: 0x85840601 check value in block header: 0xca4b, computed block checksum: 0x5a6 spare1: 0x0, spare2: 0x0, spare3: 0x0 *** Reread of blocknum=14, file=D:\ORADATA\EYGLE\EYGLE01.DBF. found same corrupt data |
5.查詢RMAN發現的壞塊資訊
6.執行恢復
7.檢查資料的恢復
此時資料已經恢復,但是block corruption資訊仍然記錄在資料庫中,直到下次validate才會清除這部分資訊:
此時從資料庫中查詢,壞塊資訊被清除。
連結:http://www.eygle.com/archives/2005/06/eoaoracle9iaebl.html
09:08:25 SQL> select * from v$database_block_corruption where file#=2; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO ---------- ---------- ---------- ------------------ --------- 2 14 1 0 FRACTURED 已用時間: 00: 00: 00.00 |
6.執行恢復
D:\>rman target / 恢復管理器: 版本9.2.0.6.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 已連線到目標資料庫 (未啟動) RMAN> startup mount; Oracle 例程已啟動 資料庫已載入 系統全域性區域總計 59842188 位元組 Fixed Size 454284 位元組 Variable Size 33554432 位元組 Database Buffers 25165824 位元組 Redo Buffers 667648 位元組 RMAN> blockrecover datafile 2 block 14 from backupset; 啟動 blockrecover 於 12-6月 -05 正在使用目標資料庫控制檔案替代恢復目錄 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=11 devtype=DISK 通道 ORA_DISK_1: 正在恢復塊 通道 ORA_DISK_1: 正在指定要從備份集恢復的塊 正在恢復資料檔案 00002 的塊 通道 ORA_DISK_1: 已從備份段 1 恢復塊 段 handle=D:\ORADATA\EYGLE_FULLBK.BAK tag=EYGLE params=NULL 通道 ORA_DISK_1: 塊恢復已完成 正在開始介質的恢復 完成介質的恢復 完成 blockrecover 於 12-6月 -05 |
7.檢查資料的恢復
D:\>sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.6.0 - Production on 星期日 6月 12 09:10:55 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 連線到: Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.6.0 - Production 09:10:55 SQL> alter database open; 資料庫已更改。 已用時間: 00: 00: 07.01 09:11:08 SQL> select * from v$database_block_corruption where file#=2; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO ---------- ---------- ---------- ------------------ --------- 2 14 1 0 FRACTURED 已用時間: 00: 00: 00.01 09:11:12 SQL> select count(*) from t; COUNT(*) ---------- 896 已用時間: 00: 00: 00.00 |
此時資料已經恢復,但是block corruption資訊仍然記錄在資料庫中,直到下次validate才會清除這部分資訊:
D:\>rman target / 恢復管理器: 版本9.2.0.6.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 連線到目標資料庫: EYGLE (DBID=1365961916) RMAN> backup validate datafile 2; 啟動 backup 於 12-6月 -05 正在使用目標資料庫控制檔案替代恢復目錄 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=9 devtype=DISK 通道 ORA_DISK_1: 正在啟動 full 資料檔案備份集 通道 ORA_DISK_1: 正在指定備份集中的資料檔案 輸入資料檔案 fno=00002 name=D:\ORADATA\EYGLE\EYGLE01.DBF 通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01 完成 backup 於 12-6月 -05 RMAN> |
此時從資料庫中查詢,壞塊資訊被清除。
09:11:22 SQL> select * from v$database_block_corruption where file#=2; 未選定行 已用時間: 00: 00: 00.00 09:12:28 SQL> |
連結:http://www.eygle.com/archives/2005/06/eoaoracle9iaebl.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13750068/viewspace-723595/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL 恢復大法 - 恢復部分資料庫、跳過壞塊、修復無法啟動的資料庫SQL資料庫
- InterBase資料庫檔案損壞的修復方法資料庫
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- RMAN修復壞塊
- SQLite資料庫損壞及其修復探究SQLite資料庫
- 資料恢復工具Recoverit使用教程:如何修復損壞的影片資料恢復
- 伺服器Oracle資料庫損壞修復伺服器Oracle資料庫
- MySQL資料庫InnoDB壞頁處理修復MySql資料庫
- 【資料庫資料恢復】Oracle資料庫檔案出現壞塊報錯的資料恢復案例資料庫資料恢復Oracle
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復SQL資料庫
- 【LINUX】Oracle資料庫 linux磁碟頭資料損壞修復LinuxOracle資料庫
- 伺服器資料庫損壞能修復嘛伺服器資料庫
- redo損壞修復啟動資料庫辦法資料庫
- 織夢資料庫配置檔案資料庫損壞:嘗試修復資料庫資料庫
- Oracle日常問題-壞塊修復Oracle
- 資料恢復記錄:硬碟分割槽損壞修復SqlServer資料庫過程資料恢復硬碟SQLServer資料庫
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- [轉載] Java7中增加的新特性Java
- SQL Server 資料頁損壞修復SQLServer
- 資料庫修復資料恢復資料庫資料恢復
- WPS文件損壞如何修復?WPS文件損壞的修復方法
- 驗證ADG的壞塊檢測和自動修復
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- 【轉載】【EF Core】Code first 之使用新資料庫資料庫
- system資料檔案頭損壞修復
- Interbase資料庫修復資料庫
- Firebird資料庫修復資料庫
- 使用DBCC CHECKDB工具修復資料庫XT資料庫
- 學習這篇Oracle資料庫檔案壞塊損壞的恢復方法,擴充你的知識面Oracle資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- Oracle資料庫壞塊典型案例分析Oracle資料庫
- 如何修復mysql資料庫MySql資料庫
- 資料庫資料恢復—NTFS分割槽損壞如何恢復SqlServer資料庫資料資料庫資料恢復SQLServer
- 執行在容器中Postgres資料庫資料損壞後如何恢復?資料庫
- Oracle資料庫壞塊典型案例擴充Oracle資料庫
- 一個簡單易用的資料庫壞塊處理方案資料庫
- 【伺服器資料恢復】IBM儲存伺服器硬碟壞道離線、oracle資料庫損壞的資料恢復伺服器資料恢復IBM硬碟Oracle資料庫
- 資料庫資料恢復-SQL SERVER資料庫MDF (NDF)或LDF損壞如何恢復資料?資料庫資料恢復SQLServer
- Oracle資料庫不同損壞級別的恢復詳解Oracle資料庫