1、歸檔模式有備份,丟失資料檔案的恢復
歸檔模式有備份,不管丟失什麼資料檔案,直接在RMAN下RESTOER--->RECOVER--->OPEN即可。
RMAN> STARUP MOUNT; RMAN> RESTORE DATAFILE 5; --恢復丟失的資料檔案,序號為5; RMAN> RECOVER DATAFILE 5; --應用歸檔檔案,聯機重做日誌檔案執行資料庫修復,將資料檔案恢復到最近時間點(就是應用備份後到資料檔案 丟失前的那些更改,以保持資料庫的一致性狀態) RMAN> ALTER DATABASE OPEN;
2、歸檔模式無備份,丟失資料檔案的恢復
說明:如果丟失的是SYSTEM表空間中的資料檔案,則必須要有備份,否則無法恢復。如果丟失的是臨時表空間,則不需要恢復,重建一個就可以了。如果丟失的是其它表空間的資料檔案,從其建立時刻起所有的重做日誌檔案都還在,因此只需要重建該資料檔案後,通過RECOVER應用重做日誌,重建該資料檔案的內容即可。
2.1 非RMAN模式恢復(使用者管理和備份方式)
準備測試資料:
SQL> CREATE TABLESPACE TEST DATAFILE 'D:\TEST\test01.dbf' size 10M; 表空間已建立。 SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE TEST QUOTA UNLIMITED ON TEST; 使用者已建立。 SQL> GRANT CONNECT,RESOURCE TO TEST; 授權成功。 SQL> create table test(id number(2), name varchar2(4)); 表已建立。 SQL> insert into test values(1,'NM1'); 已建立 1 行。 SQL> insert into test values(2,'NM2'); 已建立 1 行。 SQL> insert into test values(3,'NM3'); 已建立 1 行。 SQL> COMMIT; 提交完成。 SQL> SELECT * FROM TEST; ID NAME ---------- ---- 1 NM1 2 NM2 3 NM3
--以SYS連線,修改資料檔案為offline,刪除test01.dbf,並執行資料檔案恢復
SQL> alter database datafile 'D:\TEST\test01.dbf' offline; 資料庫已更改。 SQL> host del D:\TEST\test01.dbf SQL> alter database create datafile 'D:\TEST\TEST01.DBF'; 資料庫已更改。 (如果是原路徑無法訪問,可在建立資料檔案時指定新的路徑:alter database create datafile 'E:\TEST\TEST01.DBF' as 'D:\TEST \TEST01.DBF';) SQL> recover datafile 'D:\TEST\TEST01.DBF'; 完成介質恢復。 SQL> conn TEST/TEST@ORCL; 已連線。 --以sys連線例項,修改資料檔案狀態為ONLINE: SQL> ALTER DATABASE DATAFILE 'D:\TEST\TEST01.DBF' ONLINE; 資料庫已更改。 SQL> conn TEST/TEST@ORCL; 已連線。 ------------------檢視資料,已恢復。 SQL> SELECT * FROM TEST; ID NAME ---------- ---- 1 NM1 2 NM2 3 NM3
2.2 在RMAN模式下恢復
與使用者管理的備份和恢復模式相比,只多了一步連線RMAN的操作。
C:\Users\Administrator>rman catalog RMANCT/RMANCT@ORCL; 恢復管理器: Release 11.2.0.1.0 - Production on 星期三 12月 24 22:05:29 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 連線到恢復目錄資料庫 RMAN> CONNECT TARGET / 連線到目標資料庫: ORCL (DBID=1392118573)
-----------------------------------------------------------------------------
同樣將資料檔案置於OFFLINE,刪除資料檔案,RESTORE,再RECOVER,置資料檔案為ONLINE即可。
SQL> alter database datafile 'D:\TEST\TEST01.DBF' offline; 資料庫已更改。 SQL> host del D:\TEST\TEST01.DBF RMAN> restore datafile 'D:\TEST\TEST01.DBF'; 啟動 restore 於 24-12月-14 在恢復目錄中註冊的資料庫的新原型 正在啟動全部恢復目錄的 resync 完成全部 resync 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=178 裝置型別=DISK 建立資料檔案, 檔案號 = 8 名稱 = D:\TEST\TEST01.DBF 沒有完成還原; 所有檔案均為只讀或離線檔案或者已經還原 完成 restore 於 24-12月-14 正在啟動全部恢復目錄的 resync 完成全部 resync RMAN> recover datafile 'D:\TEST\TEST01.DBF'; 啟動 recover 於 24-12月-14 使用通道 ORA_DISK_1 正在開始介質的恢復 介質恢復完成, 用時: 00:00:01 完成 recover 於 24-12月-14 SQL> alter database datafile 'D:\TEST\TEST01.DBF' online; 資料庫已更改。 SQL> CONN TEST/TEST@ORCL; 已連線。 SQL> SELECT * FROM TEST; ID NAME ---------- ---- 1 NM1 2 NM2 3 NM3