使用DBMS_BACKUP_RESTORE來還原控制檔案和資料檔案
看了下面這個帖子,自己做了個實驗
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- dbms_backup_restore包恢復控制檔案,資料檔案,歸檔檔案的測試案例REST
- 使用RMAN在還原控制檔案後開啟資料庫資料庫
- rman還原控制檔案(四)
- rman還原控制檔案(三)
- rman還原控制檔案(二)
- rman還原控制檔案(一)
- Sqlserver資料庫使用 .bak 檔案還原資料庫SQLServer資料庫
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 還原sqlserver資料庫備份檔案.bak的檔案SQLServer資料庫
- 恢復之還原資料檔案
- 表空間&資料檔案和控制檔案(zt)
- 從控制檔案自動備份還原引數檔案
- 引數檔案控制檔案和資料檔案丟失的恢復
- 在Oracle中移動資料檔案、控制檔案和日誌檔案Oracle
- 使用舊的控制檔案備份來恢復控制檔案
- 通過資料庫檔案還原資料庫資料庫
- SQL Server 2008還原檔案和檔案組SQLServer
- SQL Server資料庫還原過程記錄,bak檔案+mdf檔案SQLServer資料庫
- 【/proc/檔案淺析】另類辦法恢復資料檔案和控制檔案
- 如何透過.dbf檔案還原資料庫資料庫
- 資料庫引數檔案控制檔案日誌檔案資料檔案跟蹤檔案等8大檔案的字典資料庫
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- 誰控制資料檔案最大數限制是 db_files還是控制檔案中的maxdatafiles??
- 【dbfsize】使用dbfsize命令得到資料檔案、控制檔案及日誌檔案的Block SizeBloC
- 重建控制檔案, 資料檔案檢查點SCN到底來自哪裡?
- 資料庫檔案和檔案組資料庫
- RMAN備份資料檔案+控制檔案+歸檔日誌
- 【SQL Server】--SQL Server資料庫bak檔案還原SQLServer資料庫
- 【控制檔案】映象控制檔案
- 歸檔模式有備份丟失控制檔案和資料檔案後恢復模式
- 無備份丟失部分資料檔案和控制檔案恢復 [轉]
- 查詢資料檔案大小和實際大小,並收縮資料檔案(原創)
- 沒有控制檔案怎麼恢復資料庫dbms_backup_restore包 英文文件資料庫REST
- RMAN恢復表空間,資料檔案,歸檔檔案,控制檔案等介紹
- 當oracle丟失所有控制檔案後可以重新建立控制檔案來恢復資料庫Oracle資料庫
- 重建控制檔案時,與資料檔案相關的Checkpoint資訊來自何處
- Linux下誤刪資料檔案從檔案控制程式碼恢復資料檔案Linux
- Oracle資料庫新增和移動控制檔案Oracle資料庫