RMAN_資料庫的絕大部分資料檔案丟失或者損壞的恢復

djb1008發表於2010-09-14
 
  1. 簡述

    當資料庫的多個表空間的檔案都遭到不同程度的損壞,我們直接在資料庫級進行恢復。本試驗測試是丟失資料檔案,控制檔案、REDO檔案等其他檔案沒有受到破壞。

    本試驗中刪除絕大部分的資料檔案,模擬該大部分資料檔案物理破壞或者丟失的情況發生,也就是說,如果一個資料庫的絕大部分的資料檔案丟失了,可以參照下面的操作步驟進行資料庫庫的恢復工作。

2. 建立測試環境


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;

系統已更改。


3. 模擬災難恢復

SQL>SHUTDOWN IMMEDIATE;

SQL>HOST DEL C:\ORADATA\AIDU\SYS*.*

SQL>HOST DEL C:\ORADATA\AIDU\US*.*

SQL>HOST DEL C:\ORADATA\AIDU\IN*.*

SQL>HOST DEL C:\ORADATA\AIDU\UN*.*

SQL>HOST DEL C:\ORADATA\AIDU\TE*.*

實際上只保留了資料庫資料目錄下的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:\ORADATA\AIDU\SYSTEM01.DBF'

資料庫無法啟動


4.進行災難恢復


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:\ORADATA\AIDU\SYSTEM01.DBF FILE NOT FOUND

2 C:\ORADATA\AIDU\USER02.DBF FILE NOT FOUND

3 C:\ORADATA\AIDU\SYSAUX01.DBF FILE NOT FOUND

4 C:\ORADATA\AIDU\USERS01.DBF FILE NOT FOUND

5 C:\ORADATA\AIDU\INDX01.DBF FILE NOT FOUND

6 C:\ORADATA\AIDU\INDX02.DBF FILE NOT FOUND

7 C:\ORADATA\AIDU\UNDO2.ORA FILE NOT FOUND

8 C:\ORADATA\AIDU\USER02B.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:\ORADATA\AIDU\SYSTEM01.DBF

正將資料檔案00002恢復到C:\ORADATA\AIDU\USER02.DBF

正將資料檔案00003恢復到C:\ORADATA\AIDU\SYSAUX01.DBF

正將資料檔案00004恢復到C:\ORADATA\AIDU\USERS01.DBF

正將資料檔案00005恢復到C:\ORADATA\AIDU\INDX01.DBF

正將資料檔案00006恢復到C:\ORADATA\AIDU\INDX02.DBF

正將資料檔案00007恢復到C:\ORADATA\AIDU\UNDO2.ORA

正將資料檔案00008恢復到C:\ORADATA\AIDU\USER02B.ORA

通道 ORA_DISK_1: 正在讀取備份段 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\BACKUPSET\2006_07_11\O1_MF_NNNDF_TAG20060711T094614_2C60Q8F5_.BKP

通道 ORA_DISK_1: 已恢復備份段 1

段控制程式碼 = C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\BACKUPSET\2006_07_11\O1_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:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_25_2C60S8NJ_.ARC 存在於磁碟上

存檔日誌執行緒 1 序列 26 已作為檔案 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_26_2C60WK00_.ARC 存在於磁碟上

存檔日誌執行緒 1 序列 27 已作為檔案 C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_MF_1_27_2C65YXJ3_.ARC 存在於磁碟上

存檔日誌檔名 =C:\ORADATA\FLASH_RECOVERY_AREA\AIDU\ARCHIVELOG\2006_07_11\O1_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:\ORADATA\AIDU\SYSTEM01.DBF SYSTEM

2 C:\ORADATA\AIDU\USER02.DBF ONLINE

3 C:\ORADATA\AIDU\SYSAUX01.DBF ONLINE

4 C:\ORADATA\AIDU\USERS01.DBF ONLINE

5 C:\ORADATA\AIDU\INDX01.DBF ONLINE

6 C:\ORADATA\AIDU\INDX02.DBF ONLINE

7 C:\ORADATA\AIDU\UNDO2.ORA ONLINE

8 C:\ORADATA\AIDU\USER02B.ORA ONLINE

已選擇8行。

SQL> SELECT FILE#,NAME,STATUS FROM V$TEMPFILE ORDER BY FILE#;

FILE# NAME STATUS

----- ------------------------------ ----------

2 C:\ORADATA\AIDU\TEMP02.DBF ONLINE

       

         我們可以看到TEMP 表空間的檔案自動恢復了,請注意這些檔案並不是從RMAN備份集中恢復回來的,而是系統自動建立的。這次測試的環境是10.2.0.1,TEMP表空間的檔案可以自動重新建立,如果是10.2之前的版本,可能需要手工建立一下。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/32980/viewspace-673803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章