利用rman全備恢復刪除的資料庫

hexiaomail發表於2010-03-29
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE這次給一個測試庫做了一個RMAN全備,就把資料庫給刪除了,一點痕跡都沒留。在做恢復的時候走了歪路,把過程記錄下來,以示警醒。

 

1、在刪除後想利用RMAN全備恢復,但一開始便有問題,備份檔案沒得DBID,找了大半天也找不著,沒辦法,,直接利用RMAN備份恢復SPFILE、控制檔案和資料檔案不行。在這一過程中把目錄結構、密碼檔案都建立起來,還oradim一個例項,進行RMAN還是需要DBID

 

2、只有先建一個空庫,然後再從RMAN備份進行恢復。連線進去,產生了新的DBID

C:\Documents and Settings\admin>rman target /

 

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 3 29 21:14:15 2010

 

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

 

連線到目標資料庫: ORCL (DBID=1242730612)

 

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 OFF; # default

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

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 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\S

NCFORCL.ORA'; # default

 

空庫的時候找不到備份集

RMAN> list backup;

 

 

從指定的備份集檔案恢復引數檔案

RMAN> restore spfile to pfile 'e:\backup\pfile.ora' from 'E:\Backup\ORCL_FULL_08

L9GA98_1_1.BAK';

 

啟動 restore 29-3 -10

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 已找到的自動備份: E:\Backup\ORCL_FULL_08L9GA98_1_1.BAK

通道 ORA_DISK_1: 從自動備份復原 SPFILE 已完成

完成 restore 29-3 -10

 

 

從指定的備份集檔案中恢復控制檔案,錯誤就不管了!

RMAN> restore controlfile to 'e:\backup\control01.ctl' from 'E:\Backup\ORCL_FULL_08L9GA98_1_1.BAK';

 

啟動 restore 29-3 -10

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 正在復原控制檔案

 MAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: restore 命令 ( 03/29/2010 21:24:47 ) 失敗

ORA-19870: 讀取備份段 E:\BACKUP\ORCL_FULL_08L9GA98_1_1.BAK 時出錯

ORA-19563: control file 標題 (檔案 E:\BACKUP\CONTROL01.CTL) 驗證失敗

 

RMAN> quit

 

 

RMAN-06900: 警告: 無法生成 V$RMAN_STATUS V$RMAN_OUTPUT

RMAN-06901: 警告: 禁止更新 V$RMAN_STATUS V$RMAN_OUTPUT

來自目標資料庫的 ORACLE 錯誤:

 

 

恢復管理器完成。

 

引數檔案及控制檔案恢復過來了,現在好辦了!

重新用恢復過來的引數檔案及控制檔案啟動例項

C:\Documents and Settings\admin>sqlplus /nolog

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 3 29 21:50:00 2010

 

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

 

SQL> conn / as sysdba

已連線。

SQL> create spfile from pfile='e:\backup\pfile.ora';

 

檔案已建立。

 

SQL> startup mount;

ORACLE 例程已經啟動。

 

Total System Global Area  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             226495364 bytes

Database Buffers          377487360 bytes

Redo Buffers                7135232 bytes

資料庫裝載完畢。

 

進入到RMAN看看效果,DBID找回來了。

C:\Documents and Settings\admin>rman target /

 

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 3 29 21:32:31 2010

 

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

 

已連線到目標資料庫: ORCL (DBID=1234100162, 未開啟)

 

同樣可以看到備份集,現在應該可以恢復資料庫了!

RMAN> list backup;

 

使用目標資料庫控制檔案替代恢復目錄

 

備份集列表

===================

 

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間

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

1       Full    6.80M      DISK        00:00:02     26-3 -10

        BP 關鍵字: 1   狀態: AVAILABLE  已壓縮: NO  標記: TAG20100326T000054

段名:E:\BACKUP\FULL_02L9G9LN_1_1.BAK

  包括的控制檔案: Ckp SCN: 992794       Ckp 時間: 26-3 -10

  包含的 SPFILE: 修改時間: 25-3 -10

 

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間

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

2       Full    6.80M      DISK        00:00:02     26-3 -10

        BP 關鍵字: 2   狀態: AVAILABLE  已壓縮: NO  標記: TAG20100326T000202

段名:E:\BACKUP\FULL_04L9G9NQ_1_1.BAK

  包括的控制檔案: Ckp SCN: 992986       Ckp 時間: 26-3 -10

  包含的 SPFILE: 修改時間: 25-3 -10

 

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間

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

3       Full    6.80M      DISK        00:00:02     26-3 -10

        BP 關鍵字: 3   狀態: AVAILABLE  已壓縮: NO  標記: TAG20100326T000538

段名:E:\BACKUP\FULL_06L9G9UI_1_1.BAK

  包括的控制檔案: Ckp SCN: 993119       Ckp 時間: 26-3 -10

  包含的 SPFILE: 修改時間: 25-3 -10

 

BS 關鍵字  型別 LV 大小       裝置型別 經過時間 完成時間

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

4       Full    610.73M    DISK        00:00:43     26-3 -10

        BP 關鍵字: 4   狀態: AVAILABLE  已壓縮: NO  標記: TAG20100326T001034

段名:E:\BACKUP\ORCL_FULL_07L9GA7Q_1_1.BAK

  備份集 4 中的資料檔案列表

  檔案 LV 型別 Ckp SCN    Ckp 時間   名稱

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

  1       Full 994339     26-3 -10 D:\ORADATA\ORCL\SYSTEM01.DBF

  2       Full 994339     26-3 -10 D:\ORADATA\ORCL\UNDOTBS01.DBF

  3       Full 994339     26-3 -10 D:\ORADATA\ORCL\SYSAUX01.DBF

  4       Full 994339     26-3 -10 D:\ORADATA\ORCL\USERS01.DBF

  5       Full 994339     26-3 -10 D:\ORADATA\ORCL\MYUSER.DBF

  6       Full 994339     26-3 -10 D:\ORADATA\ORCL\PERFSTAT.DBF

 

RMAN> restore database;

 

啟動 restore 29-3 -10

啟動 implicit crosscheck backup 29-3 -10

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=155 devtype=DISK

已交叉檢驗的 4 物件

完成 implicit crosscheck backup 29-3 -10

 

啟動 implicit crosscheck copy 29-3 -10

使用通道 ORA_DISK_1

完成 implicit crosscheck copy 29-3 -10

 

搜尋恢復區域中的所有檔案

正在編制檔案目錄...

沒有為檔案編制目錄

 

使用通道 ORA_DISK_1

 

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集

通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案

正將資料檔案00001恢復到D:\ORADATA\ORCL\SYSTEM01.DBF

正將資料檔案00002恢復到D:\ORADATA\ORCL\UNDOTBS01.DBF

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

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

正將資料檔案00005恢復到D:\ORADATA\ORCL\MYUSER.DBF

正將資料檔案00006恢復到D:\ORADATA\ORCL\PERFSTAT.DBF

通道 ORA_DISK_1: 正在讀取備份段 E:\BACKUP\ORCL_FULL_07L9GA7Q_1_1.BAK

通道 ORA_DISK_1: 已恢復備份段 1

段控制程式碼 = E:\BACKUP\ORCL_FULL_07L9GA7Q_1_1.BAK 標記 = TAG20100326T001034

通道 ORA_DISK_1: 恢復完成, 用時: 00:00:45

完成 restore 29-3 -10

 

成功恢復!

RMAN> alter database open resetlogs;

 MAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: alter db 命令 ( 03/29/2010 21:36:30 ) 失敗

ORA-01152: 檔案 1 沒有從過舊的備份中恢復

ORA-01110: 資料檔案 1: 'D:\ORADATA\ORCL\SYSTEM01.DBF'

 

出現這樣的錯誤,很奇怪!

檢視change#沒什麼不一樣,,最終還是打不開!

SQL> select checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

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

            993690

 

SQL> select file#,checkpoint_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE#

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

         1             994339

         2             994339

         3             994339

         4             994339

         5             994339

         6             994339

 

已選擇6行。

 

SQL> select file#,checkpoint_change# from v$datafile_header;

 

     FILE# CHECKPOINT_CHANGE#

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

         1             994339

         2             994339

         3             994339

         4             994339

         5             994339

         6             994339

 

已選擇6行。

 

 

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 994339 ( 03/26/2010 00:10:35 生成) 對於執行緒 1 是必需的

ORA-00289: 建議:

D:\ORADATA\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2010_03_29\O1_MF_1_20_%U_.

ORA-00280: 更改 994339 (用於執行緒 1) 在序列 #20

 

 

指定日誌: {=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤

ORA-01194: 檔案 3 需要更多的恢復來保持一致性

ORA-01110: 資料檔案 3: 'D:\ORADATA\ORCL\SYSAUX01.DBF'

 

 

ORA-01112: 未啟動介質恢復

 

 

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出現錯誤:

ORA-01194: 檔案 3 需要更多的恢復來保持一致性

ORA-01110: 資料檔案 3: 'D:\ORADATA\ORCL\SYSAUX01.DBF'

 

 

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 994339 ( 03/26/2010 00:10:35 生成) 對於執行緒 1 是必需的

ORA-00289: 建議:

D:\ORADATA\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2010_03_29\O1_MF_1_20_%U_.

ORA-00280: 更改 994339 (用於執行緒 1) 在序列 #20

 

 

指定日誌: {=suggested | filename | AUTO | CANCEL}

cancel

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤

ORA-01194: 檔案 3 需要更多的恢復來保持一致性

ORA-01110: 資料檔案 3: 'D:\ORADATA\ORCL\SYSAUX01.DBF'

 

 

ORA-01112: 未啟動介質恢復

 

 

SQL> select file#,checkpoint_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE#

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

         1             994339

         2             994339

         3             994339

         4             994339

         5             994339

         6             994339

 

已選擇6行。

 

SQL> select file#,checkpoint_change# from v$datafile_header;

 

     FILE# CHECKPOINT_CHANGE#

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

         1             994339

         2             994339

         3             994339

         4             994339

         5             994339

         6             994339

 

已選擇6行。

 

 

反正是有問題,,想想可能與新建的空庫有關,於是關閉資料庫,刪除所有資料檔案,

 

SQL> shutdown immediate;

ORA-01109: 資料庫未開啟

 

 

已經解除安裝資料庫。

ORACLE 例程已經關閉。

 

C:\Documents and Settings\admin>rman target /

恢復管理器: Release 10.2.0.1.0 - Production on 星期一 3 29 22:01:49 2010

 

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

 

已連線到目標資料庫: ORCL (DBID=1234100162, 未開啟)

 

RMAN> restore database;

 

啟動 restore 29-3 -10

使用目標資料庫控制檔案替代恢復目錄

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=155 devtype=DISK

 

通道 ORA_DISK_1: 正在開始恢復資料檔案備份集

通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案

正將資料檔案00001恢復到D:\ORADATA\ORCL\SYSTEM01.DBF

正將資料檔案00002恢復到D:\ORADATA\ORCL\UNDOTBS01.DBF

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

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

正將資料檔案00005恢復到D:\ORADATA\ORCL\MYUSER.DBF

正將資料檔案00006恢復到D:\ORADATA\ORCL\PERFSTAT.DBF

通道 ORA_DISK_1: 正在讀取備份段 E:\BACKUP\ORCL_FULL_07L9GA7Q_1_1.BAK

通道 ORA_DISK_1: 已恢復備份段 1

段控制程式碼 = E:\BACKUP\ORCL_FULL_07L9GA7Q_1_1.BAK 標記 = TAG20100326T001034

通道 ORA_DISK_1: 恢復完成, 用時: 00:00:55

完成 restore 29-3 -10

 

 

重新啟動資料庫,,OK

SQL> startup mount;

ORACLE 例程已經啟動。

 

Total System Global Area  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             226495364 bytes

Database Buffers          377487360 bytes

Redo Buffers                7135232 bytes

資料庫裝載完畢。

SQL> alter database open resetlogs;

 

資料庫已更改。

 

 

總結:

1、走歪路的原因出現在第一步,,應該來說只需要找個一個引數檔案將例項啟動到NOMOUNT狀態即可恢復引數檔案及控制檔案,後續的工作就簡單多了·!

2、在備份的時候要注意將DBID包含在備份檔名中,這樣會省去更多的麻煩!

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

相關文章