使用DBMS_BACKUP_RESTORE來還原控制檔案和資料檔案

ora_erin發表於2013-09-11
看了下面這個帖子,自己做了個實驗
http://www.itpub.net/forum.php?mod=viewthread&tid=244345&extra=page%3D1%26filter%3Dtypeid%26typeid%3D1&page=1

1、RMAN備份,使用target資料庫的控制檔案儲存備份恢復資訊,
然後資料檔案和控制檔案全部丟失,但是之前全備過資料檔案和控制檔案

rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog.txt
恢復管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 13:42:15 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: ORCL (DBID=1327101518)
使用目標資料庫控制檔案替代恢復目錄

RMAN> show all;
RMAN 配置引數為:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'E:\ORACLE\PRODUCT\10.2.0\DB_1

\DATABASE\SNCFORCL.ORA'; # default

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP OFF;
舊的 RMAN 配置引數:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
新的 RMAN 配置引數:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
已成功儲存新的 RMAN 配置引數

RMAN> backup database include current controlfile;---全備資料檔案和控制檔案
啟動 backup 於 2013-09-11 13:44:51
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=137 devtype=DISK
通道 ORA_DISK_1: 啟動壓縮的全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
輸入資料檔案 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
輸入資料檔案 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
輸入資料檔案 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
輸入資料檔案 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
輸入資料檔案 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
輸入資料檔案 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 2013-09-11 13:44:52
通道 ORA_DISK_1: 已完成段 1 於 2013-09-11 13:46:07
段控制程式碼=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP 標記=TAG20130911T134451 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:01:16
通道 ORA_DISK_1: 啟動壓縮的全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
備份集中包括當前控制檔案
在備份集中包含當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 於 2013-09-11 13:46:08
通道 ORA_DISK_1: 已完成段 1 於 2013-09-11 13:46:09
段控制程式碼=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP 標記=TAG20130911T134451 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:02
完成 backup 於 2013-09-11 13:46:09

RMAN> 

--再插入一些資料,有些已歸檔,有些未歸檔
當前日誌組是第3組,序列號為1
SQL> create table t(id int,name va

表已建立。

SQL> insert into t values(1,'a');--在第3組,序列號為1

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(2,'b');--在第1組,序列號為2

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(3,'c');--在第2組,序列號為3

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(4,'d');--在第3組,序列號為4,未歸檔

已建立 1 行。

SQL> commit;

提交完成。

SQL>


刪除所有的資料檔案和控制檔案

rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog02.txt
恢復管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 14:11:22 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已連線到目標資料庫 (未啟動)

RMAN> startup nomount;
Oracle 例項已啟動

系統全域性區域總計     603979776 位元組

Fixed Size                     1250380 位元組
Variable Size                285215668 位元組
Database Buffers             310378496 位元組
Redo Buffers                   7135232 位元組

RMAN> startup mount;
資料庫已經啟動
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: startup 命令 (在 09/11/2013 14:11:36 上) 失敗
ORA-00205: 標識控制檔案時出錯, 有關詳細資訊, 請檢視預警日誌

RMAN> restore controlfile from 'E:\ORACLE\PRODUCT\10.2.0

\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11

\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP';
啟動 restore 於 2013-09-11 14:12:28
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

通道 ORA_DISK_1: 正在復原控制檔案
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:02
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
輸出檔名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
完成 restore 於 2013-09-11 14:12:30

RMAN> startup mount;
資料庫已經啟動
資料庫已裝載
釋放的通道: ORA_DISK_1

RMAN> restore preview database;
啟動 restore 於 2013-09-11 14:13:07
啟動 implicit crosscheck backup 於 2013-09-11 14:13:07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
已交叉檢驗的 6 物件
完成 implicit crosscheck backup 於 2013-09-11 14:13:08

啟動 implicit crosscheck copy 於 2013-09-11 14:13:08
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 於 2013-09-11 14:13:08

搜尋恢復區域中的所有檔案
正在編制檔案目錄...
目錄編制完畢

已列入目錄的檔案的列表
=======================
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC
檔名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP

使用通道 ORA_DISK_1


備份集列表
===================

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間           
------- ---- -- ---------- ----------- ------------ -------------------
56      Full    301.10M    DISK        00:01:07     2013-09-11 13:45:56
        BP 關鍵字: 58   狀態: AVAILABLE  已壓縮: YES  標記: TAG20130911T134451
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
  備份集 56 中的資料檔案列表
  檔案 LV 型別 Ckp SCN    Ckp 時間            名稱
  ---- -- ---- ---------- ------------------- ----
  1       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\SYSTEM01.DBF
  2       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\UNDOTBS01.DBF
  3       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\SYSAUX01.DBF
  4       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
  5       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCL\EXAMPLE01.DBF
  6       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
  7       Full 12315123110100 2013-09-11 13:44:52 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF


已存檔的日誌副本列表
關鍵字     Thrd Seq     S 短時間              名稱
------- ---- ------- - ------------------- ----
144     1    1       A 2013-09-11 10:58:19 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC
145     1    2       A 2013-09-11 14:07:24 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC
146     1    3       A 2013-09-11 14:07:46 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC
介質恢復啟動 SCN 是 12315123110100
恢復範圍必須超出 SCN 12315123110100 才能清除資料檔案模糊性
完成 restore 於 2013-09-11 14:13:10

RMAN> restore database;
啟動 restore 於 2013-09-11 14:15:52
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正將資料檔案00002恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正將資料檔案00003恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正將資料檔案00004恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正將資料檔案00005恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正將資料檔案00006恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
正將資料檔案00007恢復到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP 標記 = TAG20130911T134451
通道 ORA_DISK_1: 恢復完成, 用時: 00:01:16
完成 restore 於 2013-09-11 14:17:08

RMAN> recover database using backup controlfile;--RMAN中沒有using backup controlfile這個命令
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: 分析輸入命令時出錯
RMAN-01009: 語法錯誤: 找到 "using": 應為: "archivelog, auxiliary, allow, check, delete, from, high, noredo, 

noparallel, parallel, ;, skip, tablespace, test, until, undo" 中的一個
RMAN-01007: 在第 1 行第 18 列, 檔案: standard input

RMAN> recover database;
啟動 recover 於 2013-09-11 14:18:13
使用通道 ORA_DISK_1

正在開始介質的恢復

存檔日誌執行緒 1 序列 1 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_93024WC7_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 2 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 3 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 4 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 存在於磁碟上
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11

\O1_MF_1_1_93024WC7_.ARC 執行緒 =1 序列 =1
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93025LKL_.ARC 執行緒 =1 序列 =2
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_930265NJ_.ARC 執行緒 =1 序列 =3
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG 執行緒 =1 序列 =4
介質恢復完成, 用時: 00:00:03
完成 recover 於 2013-09-11 14:18:19

--RMAN中直接recover database即可,RMAN會自動應用歸檔日誌和聯機重做日誌檔案,即使使用的是備份的控制文


RMAN> alter database open;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 09/11/2013 14:18:41 上) 失敗
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項


SQLPLUS中查詢SCN
SQL> select name,checkpoint_change# from v$datafile t;
 
NAME                                                                             CHECKPOINT_CHANGE#
-------------------------------------------------------------------------------- ------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                                    12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF                                      12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF                                       12315123111894
 
7 rows selected
SQL> select name,checkpoint_change# from v$datafile_header;
 
NAME                                                                             CHECKPOINT_CHANGE#
-------------------------------------------------------------------------------- ------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF                                   12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF                                    12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF                                  12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF                                      12315123111894
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF                                       12315123111894
 
7 rows selected
--兩者一致,照理說可以正常開啟資料庫的,在sqlplus中直接alter database open看看

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項


SQL> alter database open resetlogs;

資料庫已更改。

--還是要resetlogs,這是否更加說明了兩者一致是必要條件,而非充分條件

SQL> select * from t;

        ID NAME
---------- --------------------
         1 a
         2 b
         3 c
         4 d
--資料已完全恢復


2、RMAN備份,使用target資料庫的控制檔案儲存備份恢復資訊,
然後資料檔案和控制檔案全部丟失,但是之前全備過資料檔案,但沒有備份過控制檔案,
然後我重建控制檔案,使用DBMS_BACKUP_RESTORE來恢復資料檔案會怎麼樣?

刪除之前的備份,先備份全庫
rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog03.txt
恢復管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 15:18:27 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: ORCL (DBID=1327101518)
使用目標資料庫控制檔案替代恢復目錄

RMAN> delete backup;
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=142 devtype=DISK

備份段列表
BP 關鍵字  BS 關鍵字  Pc# Cp# 狀態      裝置型別段名稱
------- ------- --- --- ----------- ----------- ----------
53      51      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T103220_92ZOKNWB_.BKP
54      52      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_07_18\O1_MF_S_821093443_8YGKB48S_.BKP
55      53      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825849208_92ZOMS9R_.BKP
56      54      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCNNF_TAG20130911T103220_92ZOMQ9R_.BKP
57      55      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825850730_92ZQ3D89_.BKP
58      56      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP
59      57      1   1   AVAILABLE   DISK        E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP

是否確定要刪除以上物件 (輸入 YES 或 NO)? yes
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T103220_92ZOKNWB_.BKP recid=53 stamp=825849140
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_07_18\O1_MF_S_821093443_8YGKB48S_.BKP recid=54 stamp=825849911
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825849208_92ZOMS9R_.BKP recid=55 stamp=825849912
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCNNF_TAG20130911T103220_92ZOMQ9R_.BKP recid=56 stamp=825849912
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2013_09_11\O1_MF_S_825850730_92ZQ3D89_.BKP recid=57 stamp=825850732
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T134451_9300TN89_.BKP recid=58 stamp=825860692
已刪除備份段
備份段 handle=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T134451_9300X0YR_.BKP recid=59 stamp=825862389
7 物件已刪除


RMAN> backup database;
啟動 backup 於 2013-09-11 15:19:28
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動壓縮的全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
輸入資料檔案 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
輸入資料檔案 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
輸入資料檔案 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
輸入資料檔案 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
輸入資料檔案 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
輸入資料檔案 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 2013-09-11 15:19:29
通道 ORA_DISK_1: 已完成段 1 於 2013-09-11 15:20:34
段控制程式碼=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11

\O1_MF_NNNDF_TAG20130911T151928_9306D1CQ_.BKP 標記=TAG20130911T151928 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:01:05
通道 ORA_DISK_1: 啟動壓縮的全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
備份集中包括當前控制檔案
在備份集中包含當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 於 2013-09-11 15:20:37
通道 ORA_DISK_1: 已完成段 1 於 2013-09-11 15:20:38
段控制程式碼=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NCSNF_TAG20130911T151928_9306G57T_.BKP 標記=TAG20130911T151928 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:04
完成 backup 於 2013-09-11 15:20:38

RMAN> 

再修改下資料
SQL> insert into t values(5,'e');--當前日誌組是第3組,序號為1

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(6,'f');--當前日誌組是第1組,序號為2

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(7,'g');--當前日誌組是第2組,序號為3

已建立 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t values(8,'h');--當前日誌組是第3組,序號為4,未歸檔

已建立 1 行。

SQL> commit;

提交完成。

--關閉資料庫,刪除所有控制檔案和資料檔案
--手動建立控制檔案

SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  DATAFILE
 12    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF',
 18    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF'
 19  CHARACTER SET ZHS16GBK
 20  ;

控制檔案已建立。

--控制檔案建立好之後,資料庫已經mount

--下面的根據ctl.bak裡面的內容酌情執行

SQL> -- Configure RMAN configuration record 1
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','OFF');

PL/SQL 過程已成功完成。

SQL> -- Configure RMAN configuration record 2
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK BACKUP TYPE TO 

COMPRESSED BACKUPSET PARALLELISM 1');

PL/SQL 過程已成功完成。

SQL> ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';
ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC'
*
第 1 行出現錯誤:
ORA-00604: ?? SQL ??  ????


SQL> alter session set nls_language='american';

Session altered.

SQL> ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';
ALTER DATABASE REGISTER LOGFILE 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC'
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level


貌似碰到oracle bug了:
http://wmlm.itpub.net/post/12871/512174
Symptoms
When using 'ALTER DATABASE REGISTER LOGFILE' command, the following errors occur:
ORA-00604: error occurred at recursive SQL level" error on "ALTER DATABASE REGISTER LOGFILE 

'//1_234_636797930.dbf'"
You are using user managed backup/recovery, without RMAN.
You are trying to rebuild the control file and generated a backup controlfile to trace.
You are trying to modify the control file incarnation table section to point to existing logfiles.
Cause
Internal bug 5766114 - REGISTER LOGFILE GENERATES ORA-16225
Solution
This is a known issue and is currently being worked in an internal bug.
Use the workaround :
ALTER DATABASE REGISTER PHYSICAL LOGFILE '//1_234_636797930.dbf';

引自: b14191.pdf p406
Recoving Through resetlogs with created cf:scenario

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC';

Database altered.

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC';

Database altered.

SQL> ALTER DATABASE REGISTER PHYSICAL logfile 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC';

Database altered.

原先v$archived_log是空的,現在register之後v$archived_log就有3條資料了

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
  2  USING FILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\BLOCK_CHANGE_TRACKING.TRC2' REUSE;

Database altered.


現在根據http://www.itpub.net/forum.php?mod=viewthread&tid=244345&extra=page%3D1%26filter%

3Dtypeid%26typeid%3D1&page=1介紹的dbms_backup_restore來還原資料檔案:
SQL> DECLARE
  2    devtype varchar2(256);
  3    done boolean;
  4  BEGIN
  5    devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
  6    sys.dbms_backup_restore.restoreSetDatafile;
  7    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\SYSTEM01.DBF');
  8    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\UNDOTBS01.DBF');
  9    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\SYSAUX01.DBF');
 10    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\USERS01.DBF');
 11    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\EXAMPLE01.DBF');
 12    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\TTS01.DBF');
 13    sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>07,toname=>'E:\oracle\product\10.2.0\oradata\ORCL\TS01.DBF');
 14    sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_09_11\O1_MF_NNNDF_TAG20130911T151928_9306D1CQ_.BKP', params=>null);
 15    sys.dbms_backup_restore.deviceDeallocate;
 16  END;
 17  /

PL/SQL procedure successfully completed.


我試下在RMAN裡面recover database會怎麼樣?
rman target sys/oracle@7501 nocatalog | tee E:\oracle\product\10.2.0\oradata\ORCL\rmanlog04.txt
恢復管理器: Release 10.2.0.1.0 - Production on 星期三 9月 11 16:54:43 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已連線到目標資料庫: ORCL (DBID=1327101518, 未開啟)
使用目標資料庫控制檔案替代恢復目錄

RMAN> recover database;
啟動 recover 於 2013-09-11 16:54:51
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=153 devtype=DISK

正在開始介質的恢復

存檔日誌執行緒 1 序列 1 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 2 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC 存在於磁碟上
存檔日誌執行緒 1 序列 3 已作為檔案 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC 存在於磁碟上
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_1_930793WB_.ARC 執行緒 =1 序列 =1
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_2_93079VL2_.ARC 執行緒 =1 序列 =2
存檔日誌檔名 =E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_3_9307BHX9_.ARC 執行緒 =1 序列 =3
無法找到存檔日誌
存檔日誌執行緒 =1 序列=4
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/11/2013 16:54:58 上) 失敗
RMAN-06054: 介質恢復正請求未知的日誌: 執行緒 1 seq 4 lowscn 12315123114592

RMAN> 
--由於控制檔案是我們重新建立的,現在RMAN裡面recover database不能自動應用聯機重做日誌檔案了,
下面在sqlplus下進行恢復

SQL> recover database using backup controlfile;
ORA-00279: change 12315123114592 generated at 09/11/2013 15:35:43 needed for
thread 1
ORA-00289: suggestion :
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2013_09_11\O1_MF_1_4_%U_.ARC
ORA-00280: change 12315123114592 for thread 1 is in sequence #4


Specify log: {=suggested | filename | AUTO | CANCEL}
E:\oracle\product\10.2.0\oradata\ORCL\REDO03.LOG --指定聯機重做日誌檔案
Log applied.
Media recovery complete.

具體指定哪個聯機重做日誌檔案,可以查詢v$log
select group#,sequence#,first_change# from v$log;
1 2 12315123114535
2 3 12315123114582
3 4 12315123114592

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> alter database open resetlogs;

Database altered.

SQL> select * from t;--可以看到,資料已完全恢復

        ID NAME
---------- --------------------
         1 a
         2 b
         3 c
         4 d
         5 e
         6 f
         7 g
         8 h

8 rows selected.

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

相關文章