RMAN> startup nomount;
RMAN> sql 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
--因爲rman默認以環境變量來讀取時間格式,與sqlplus的固定格式不同,所以,此處要設定時間格式變量。
RMAN> restore controlfile from autobackup until time '2009-03-10 18:15:00';
注意,仍然需要適當的還原控制文件。
RMAN> alter database mount;
RMAN> restore database;
RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
RMAN> recover database until time '2009-03-10 18:15:00';
此時,出現以下錯誤:
RMAN-03002: recover 命令 (在 03/10/2009 19:21:19 上) 失敗
RMAN-20207: UNTIL TIME 或 RECOVERY WINDOW 在 RESETLOGS 時間之前
20207錯誤:默認的認爲until time或RECOVERY WINDOW的時間不能早於resetlogs的時間. 既然resetlogs了,就不認識之前的歸檔日誌信息了。把之前的歸檔日誌排除在可供恢復的選擇之外了。這只是默認的行爲,可能處於節省系統資源的考慮,畢竟resetlogs之前的數據再利用可能很小。
其解決可按以下方法處理:
1.找到數據庫的當前incarnation號:
RMAN> list incarnation of database "test";
數據庫原型列表
DB 關鍵字 Inc 關鍵字 DB 名 DB ID STATUS 重置 SCN 重置時間
------- ------- -------- ---------------- --- ---------- ----------
1 1 TEST 1978860036 PARENT 1 30-8月 -05
2 2 TEST 1978860036 PARENT 534907 05-3月 -09
3 3 TEST 1978860036 PARENT 762990 10-3月 -09
4 4 TEST 1978860036 PARENT 764885 10-3月 -09
5 5 TEST 1978860036 PARENT 765443 10-3月 -09
6 6 TEST 1978860036 PARENT 767488 10-3月 -09
7 7 TEST 1978860036 PARENT 771807 10-3月 -09
8 8 TEST 1978860036 PARENT 774320 10-3月 -09
9 9 TEST 1978860036 PARENT 779541 10-3月 -09
10 10 TEST 1978860036 PARENT 782000 10-3月 -09
11 11 TEST 1978860036 PARENT 783792 10-3月 -09
12 12 TEST 1978860036 CURRENT 801599 10-3月 -09 --此行原型(incarnation)號狀態爲current,即當前
所以,數據庫的前一個(resetlogs之前)原型號爲11.
我們重新啓動數據庫到mount狀態(因爲需要知道是重置哪個庫,所以要掛載)
2.重置數據庫到前一個原型(注意:此時的控制文件已經在前面的步驟中,還原到了適當的時間點。實際上,我們應該在nomount前還原控制文件)
RMAN> reset database to incarnation 11;
將數據庫重置爲原型 11
RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
RMAN> restore database;
RMAN> recover database until time '2009-03-10 18:15:00';
RMAN> alter database open resetlogs; (此時,數據庫的incarnation編號將再次上漲)
數據庫正常打開