Recovery from missing or corrupted datafile(多個資料檔案丟失或者損壞的恢復)
- 簡述
當資料庫的多個表空間的檔案都遭到不同程度的損壞,我們直接在資料庫級進行恢復。本試驗測試是丟失資料檔案,控制檔案、REDO檔案等其他檔案沒有受到破壞。
本試驗中刪除絕大部分的資料檔案,模擬該大部分資料檔案物理破壞或者丟失的情況發生,也就是說,如果一個資料庫的絕大部分的資料檔案丟失了,可以參照下面的操作步驟進行資料庫庫的恢復工作。
[@more@]- 建立測試環境
2.1在測試表空間上建立表
SQL> CREATE TABLE AIDU.TEST_FOR_RECOVERY_DB(ID NUMBER NOT NULL,NAME VARCHAR2(200),PRIMARY KEY(ID)) TABLESPACE USER02;
表已建立。
2.2 做一次RMAN全備份
C:> RMAN TARGET /
RMAN>RUN{
SQL ‘ALTER SYSTEM ARCHIVE LOG CURRENT’;
ALLOCATE CHANNEL D1 TYPE DISK;
BACKUP FULL DATABASE PLUS ARCHIVELOG;
RELEASE CHANNEL D1;}
2.3 在測試表中插入資料,用於驗證資料是否完全恢復
SQL> CONN AIDU/AIDU
已連線。
SQL> INSERT INTO TEST_FOR_RECOVERY_DB VALUES(1,'TEST FOR RECOVERY DATABASE');
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> CONN / AS SYSDBA
已連線。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系統已更改。
- 模擬災難恢復
SQL>SHUTDOWN IMMEDIATE;
SQL>HOST DEL C:ORADATAAIDUSYS*.*
SQL>HOST DEL C:ORADATAAIDUUS*.*
SQL>HOST DEL C:ORADATAAIDUIN*.*
SQL>HOST DEL C:ORADATAAIDUUN*.*
SQL>HOST DEL C:ORADATAAIDUTE*.*
實際上只保留了資料庫資料目錄下的REDO檔案,控制檔案。
SQL>STARTUP
ORACLE 例程已經啟動。
Total System Global Area 268435456 bytes
Fixed Size 1248504 bytes
Variable Size 100664072 bytes
Database Buffers 163577856 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
ORA-01157: 無法標識/鎖定資料檔案 1 - 請參閱 DBWR 跟蹤檔案
ORA-01110: 資料檔案 1: 'C:ORADATAAIDUSYSTEM01.DBF'
資料庫無法啟動
- 進行災難恢復
4.1 檢視當前資料庫狀態
SQL> SELECT OPEN_MODE FROM V$DATABASE;
OPEN_MODE
----------
MOUNTED
SQL>COL NAME FORMAT A30
SQL>COL ERROR FORMAT A30
SQL>COL FILE# FORMAT 99
SQL> SELECT A.FILE#,A.NAME,B.ERROR FROM V$DATAFILE A,V$RECOVER_FILE B
2 WHERE A.FILE#=B.FILE#;
FILE# NAME ERROR
----- ------------------------------ ------------------------------
1 C:ORADATAAIDUSYSTEM01.DBF FILE NOT FOUND
2 C:ORADATAAIDUUSER02.DBF FILE NOT FOUND
3 C:ORADATAAIDUSYSAUX01.DBF FILE NOT FOUND
4 C:ORADATAAIDUUSERS01.DBF FILE NOT FOUND
5 C:ORADATAAIDUINDX01.DBF FILE NOT FOUND
6 C:ORADATAAIDUINDX02.DBF FILE NOT FOUND
7 C:ORADATAAIDUUNDO2.ORA FILE NOT FOUND
8 C:ORADATAAIDUUSER02B.ORA FILE NOT FOUND
已選擇8行。
這裡看到有8個檔案需要進行恢復。
4.2使用RMAN進行恢復
RMAN> run{
2> RESTORE DATABASE;
3> RECOVER DATABASE;
4> SQL 'ALTER DATABASE OPEN';}
啟動 restore 於 2006-07-11 11:25:46
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=46 devtype=DISK
通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到C:ORADATAAIDUSYSTEM01.DBF
正將資料檔案00002恢復到C:ORADATAAIDUUSER02.DBF
正將資料檔案00003恢復到C:ORADATAAIDUSYSAUX01.DBF
正將資料檔案00004恢復到C:ORADATAAIDUUSERS01.DBF
正將資料檔案00005恢復到C:ORADATAAIDUINDX01.DBF
正將資料檔案00006恢復到C:ORADATAAIDUINDX02.DBF
正將資料檔案00007恢復到C:ORADATAAIDUUNDO2.ORA
正將資料檔案00008恢復到C:ORADATAAIDUUSER02B.ORA
通道 ORA_DISK_1: 正在讀取備份段 C:ORADATAFLASH_RECOVERY_AREAAIDUBACKUPSET2006_07_11O1_MF_NNNDF_TAG20060711T094614_2C60Q8F5_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = C:ORADATAFLASH_RECOVERY_AREAAIDUBACKUPSET2006_07_11O1_MF_NNNDF_TAG20060711T094614_2C60Q8F5_.BKP 標記 = TAG20060711T094614
通道 ORA_DISK_1: 恢復完成, 用時: 00:01:15
完成 restore 於 2006-07-11 11:27:04
啟動 recover 於 2006-07-11 11:27:04
使用通道 ORA_DISK_1
正在開始介質的恢復
存檔日誌執行緒 1 序列 25 已作為檔案 C:ORADATAFLASH_RECOVERY_AREAAIDUARCHIVELOG2006_07_11O1_MF_1_25_2C60S8NJ_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 26 已作為檔案 C:ORADATAFLASH_RECOVERY_AREAAIDUARCHIVELOG2006_07_11O1_MF_1_26_2C60WK00_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 27 已作為檔案 C:ORADATAFLASH_RECOVERY_AREAAIDUARCHIVELOG2006_07_11O1_MF_1_27_2C65YXJ3_.ARC 存在於磁碟上
存檔日誌檔名 =C:ORADATAFLASH_RECOVERY_AREAAIDUARCHIVELOG2006_07_11O1_MF_1_25_2C60S8NJ_.ARC 執行緒 =1 序列 =25
介質恢復完成, 用時: 00:00:09
完成 recover 於 2006-07-11 11:27:17
sql 語句: ALTER DATABASE OPEN
4.3 檢查資料是否正常恢復
SQL> COL NAME FORMAT A30
SQL> SELECT * FROM TEST_FOR_RECOVERY_DB;
ID NAME
---------- ------------------------------
1 TEST FOR RECOVERY DATABASE
SQL> COL FILE# FORMAT 99
SQL> COL NAME FORMAT A30
SQL> COL STATUS FORMAT A10
SQL> SELECT FILE#,NAME,STATUS FROM V$DATAFILE ORDER BY FILE#;
FILE# NAME STATUS
----- ------------------------------ ----------
1 C:ORADATAAIDUSYSTEM01.DBF SYSTEM
2 C:ORADATAAIDUUSER02.DBF ONLINE
3 C:ORADATAAIDUSYSAUX01.DBF ONLINE
4 C:ORADATAAIDUUSERS01.DBF ONLINE
5 C:ORADATAAIDUINDX01.DBF ONLINE
6 C:ORADATAAIDUINDX02.DBF ONLINE
7 C:ORADATAAIDUUNDO2.ORA ONLINE
8 C:ORADATAAIDUUSER02B.ORA ONLINE
已選擇8行。
SQL> SELECT FILE#,NAME,STATUS FROM V$TEMPFILE ORDER BY FILE#;
FILE# NAME STATUS
----- ------------------------------ ----------
2 C:ORADATAAIDUTEMP02.DBF ONLINE
我們可以看到TEMP 表空間的檔案自動恢復了,請注意這些檔案並不是從RMAN備份集中恢復回來的,而是系統自動建立的。這次測試的環境是10.2.0.1,TEMP表空間的檔案可以自動重新建立,如果是10.2之前的版本,可能需要手工建立一下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/32980/viewspace-1038308/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- REDO檔案丟失或者損壞的恢復
- RMAN_部分資料檔案丟失或者損壞的恢復
- 資料檔案丟失損壞的恢復--
- INDEX表空間檔案丟失或者損壞的恢復Index
- rman 恢復---歸檔丟失and資料檔案損壞
- 磁碟損壞導致資料檔案丟失的恢復
- 備份與恢復--資料檔案損壞或丟失
- RMAN_資料庫的絕大部分資料檔案丟失或者損壞的恢復資料庫
- Oracle不同檔案丟失/損壞的恢復方法Oracle
- 資料檔案損壞、丟失
- coreldraw檔案丟失(損壞)的恢復處理辦法
- 備份&恢復之八:RMAN備份歸檔模式下損壞(丟失)多個資料檔案,進行整個資料庫的恢復模式資料庫
- 備份&恢復之五:歸檔模式下丟失或損壞一個資料檔案模式
- [20150619]undo檔案損壞或者丟失的恢復1
- [20150619]undo檔案損壞或者丟失的恢復2
- [20150619]undo檔案損壞或者丟失的恢復3
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- 資料檔案丟失的恢復
- oracle控制檔案的損壞或完全丟失的恢復辦法Oracle
- TEMP表空間的檔案丟失或損壞後的恢復
- PostgreSQL DBA(30) - Backup&Recovery#3(資料檔案損壞恢復)SQL
- 資料檔案或者tablespace損壞基於rman恢復測試
- 某個資料檔案損壞完全恢復(三)
- 資料檔案丟失如何恢復
- 磁碟損壞,system及部分資料檔案丟失
- undo檔案丟失或損壞
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- 探索ORACLE之RMAN_07 磁碟損壞資料丟失恢復Oracle
- ASM管理環境----資料檔案丟失介質恢復(MEDIA RECOVERY)ASM
- 單個控制檔案損壞的恢復
- 控制檔案損壞,丟失其中一個
- RMAN恢復案例:丟失全部資料檔案恢復
- RMAN完全恢復丟失的資料檔案
- 普通資料檔案丟失的恢復方法
- 2.7.10 恢復丟失或損壞的伺服器引數檔案(SPFILE)伺服器
- 電腦檔案丟失資料恢復資料恢復
- 丟失一個控制檔案並恢復資料庫資料庫
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復