Oracle 基於備份控制檔案的恢複(unsing backup controlfile)

來源:互聯網
上載者:User

    通常在當前控制檔案丟失,或者當前的控制檔案與需要恢複的控制檔案不一致的情況下,我們需要重新建立一個控制檔案或者使用 unsing
backup controlfile方式來恢複控制檔案。說簡單點,只要是備份的控制檔案與當前的控制檔案不一致進行恢複資料庫,就需要使用到 unsing
backup controlfile方式,而一旦使用了該方式,則需使用resetlgos選項來開啟資料庫。

 

    有關控制檔案的介紹請參考: Oracle 控制檔案(CONTROLFILE)

        using backup controlfile 請參考:理解 using backup controlfile

 

一、基於備份控制檔案的恢複注意事項(無論是否使用恢複目錄catalog)
1、即使沒有資料檔案需要還原,當使用unsing backup controlfile 方式時必須結合 recover 命令
2、不論使用備份的控制檔案進行時間點復原或完全恢複,必須使用 open resetlogs 方式開啟資料庫
3、如果聯機日誌不可訪問,必須使用不完全恢複到聯機記錄檔中最早的一個SCN之前。這是因為RMAN並不備份聯機記錄檔
4、在恢複期間,RMAN自動搜尋聯機日誌和沒有記錄在RMAN儲存倉庫中的歸檔日誌以完成恢複
5、RMAN會根據初始化參數檔案中歸檔位置以及控制檔案聯機日誌資訊自動尋找有效歸檔日誌和聯機日誌。使用unsing backup controlfile方
   式時,在恢複期間,一旦歸檔目的地以及歸檔格式發生變化,或添加新的聯機日誌成員將收到RMAN-06054錯誤資訊。

   本文主要使用熱備方式來完成示範

 

二、示範unsing backup controlfile的使用

1、控制檔案全部丟失的情形(控制檔案備份後發生變化)

-->首先使用熱備指令碼進行備份sys@SYBO2SZ> get db_hot_bak.sql  1  set feedback off heading off verify off  2  set pagesize 0 linesize 200  3  define dir='/u02/database/SYBO2SZ/backup/hotbak'  4  define script='/tmp/tmphotbak.sql'  5  spool &script  6  select 'ho cp '||name||' &dir' from v$datafile;  7  spool off  8  alter database begin backup;  9  start &script 10  alter database end backup; 11  alter database backup controlfile to '&dir/contlbak.ctl' reuse; 12  create pfile='&dir/initSYBO2SZ.ora' from spfile; 13* set feedback on heading on verify on pagesize 100 sys@SYBO2SZ> @db_hot_bak sys@SYBO2SZ> show parameter control_filesNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------control_files                        string      /u02/database/SYBO2SZ/controlf                                                 /cntl1SYBO2SZ.ctl, /u02/databa                                                 se/SYBO2SZ/controlf/cntl2SYBO2                                                 SZ.ctl, /u02/database/SYBO2SZ/                                                 controlf/cntl3SYBO2SZ.ctl                                                 -->為資料庫添加新的資料表空間,此時控制檔案將不同於先前備份的控制檔案                                                  sys@SYBO2SZ> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on;Tablespace created.-->為資料庫添加對象sys@SYBO2SZ> create table tb_emp tablespace tbs as select * from scott.emp ;Table created.sys@SYBO2SZ> select count(*) from tb_emp;  COUNT(*)----------        14sys@SYBO2SZ> select * from v$log;    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------         3          1        116   20971520          2 NO  CURRENT                1078066 08-SEP-12         4          1        115   20971520          2 YES INACTIVE               1063428 08-SEP-12sys@SYBO2SZ> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,-----------------20120908 16:30:41-->切換日誌sys@SYBO2SZ> alter system archive log current;System altered.-->刪除部分記錄用於恢複後驗證sys@SYBO2SZ> delete from tb_emp where deptno=10;3 rows deleted.sys@SYBO2SZ> commit;Commit complete.sys@SYBO2SZ> alter system archive log current;System altered.sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archivetotal 143M-rw-r----- 1 oracle oinstall  15M 2012-09-08 16:20 arch_792094299_1_115.arc-rw-r----- 1 oracle oinstall 236K 2012-09-08 16:30 arch_792094299_1_116.arc-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:32 arch_792094299_1_117.arc-->異常關機sys@SYBO2SZ> shutdown abort;ORACLE instance shut down.-->類比所有控制檔案丟失sys@SYBO2SZ> ho rm -rf /u02/database/SYBO2SZ/controlf/*sys@SYBO2SZ> ho ls /u02/database/SYBO2SZ/controlf/-->啟動後收到ORA-00205錯誤sys@SYBO2SZ> startup ORACLE instance started.Total System Global Area  599785472 bytesFixed Size                  2074568 bytesVariable Size             276826168 bytesDatabase Buffers          314572800 bytesRedo Buffers                6311936 bytesORA-00205: error in identifying control file, check alert log for more infosys@SYBO2SZ> select instance_name,status from v$instance;INSTANCE_NAME    STATUS---------------- ------------SYBO2SZ          STARTEDsys@SYBO2SZ> select name,open_mode from v$database;select name,open_mode from v$database                           *ERROR at line 1:ORA-01507: database not mounted-->還原控制檔案sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctlsys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctlsys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl-->mount資料庫sys@SYBO2SZ> alter database mount;Database altered.-->由於僅僅是丟失了控制檔案,因此我們只還原控制檔案-->恢複資料庫,提示需要使用BACKUP CONTROLFILE選項,因為控制檔案在備份後發生了變化sys@SYBO2SZ> recover database;ORA-00283: recovery session canceled due to errorsORA-01610: recovery using the BACKUP CONTROLFILE option must be done-->提示需要實用到116歸檔日誌sys@SYBO2SZ> recover database using backup controlfile;ORA-00279: change 1078785 generated at 09/08/2012 16:20:48 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arcORA-00280: change 1078785 for thread 1 is in sequence #116-->下面提示在介質恢複期間有未知的檔案添加到控制檔案,且檔案id為9-->由此可以推斷檔案9是記錄在尾數為116的歸檔日誌中,正好與前面查看的歸檔日誌時間相符Specify log: {<RET>=suggested | filename | AUTO | CANCEL}autoORA-00283: recovery session canceled due to errorsORA-01244: unnamed datafile(s) added to control file by media recoveryORA-01110: data file 9: '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf'ORA-01112: media recovery not started-->使用alter database create datafile重建資料檔案-->此處故意使用了不同於建立之前的檔案名稱tbs.dbf,此處並沒有任何影響,相對於對資料檔案進行了重新命名sys@SYBO2SZ> alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf';Database altered.-->嘗試再次恢複,需要使用為數位116的歸檔日誌,輸入auto後,尾數為116,117的不在需要sys@SYBO2SZ> recover database using backup controlfile;ORA-00279: change 1078817 generated at 09/08/2012 16:29:19 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arcORA-00280: change 1078817 for thread 1 is in sequence #116Specify log: {<RET>=suggested | filename | AUTO | CANCEL}auto ORA-00279: change 1078886 generated at 09/08/2012 16:30:52 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_117.arcORA-00280: change 1078886 for thread 1 is in sequence #117ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc' no longer needed for this recoveryORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arcORA-00280: change 1078922 for thread 1 is in sequence #118ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc' no longer needed for this recovery-->提示未找尾數為118的歸檔日誌,118本身還沒有歸檔,因此來說此時是聯機日誌ORA-00308: cannot open archived log '/u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc'ORA-27037: unable to obtain file statusLinux-x86_64 Error: 2: No such file or directoryAdditional information: 3-->再次恢複sys@SYBO2SZ> recover database using backup controlfile;ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arcORA-00280: change 1078922 for thread 1 is in sequence #118-->直接指定redo日誌,介質恢複成功Specify log: {<RET>=suggested | filename | AUTO | CANCEL}/u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.logLog applied.Media recovery complete.-->下面需要使用RESETLOGS選項開啟資料庫sys@SYBO2SZ> alter database open;  alter database open*ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for database opensys@SYBO2SZ> alter database open resetlogs;Database altered.--> Author : Robinson Cheng    -->Blog : http://blog.csdn.net/robinson_0612-->驗證建立對象的總記錄數,正好等於刪除後的記錄數11條sys@SYBO2SZ> select count(*) from tb_emp;  COUNT(*)----------        11

2、刪除資料表空間類比控制檔案變化的情形
   下面的這個例子的處理方式並非最佳,此處僅僅為示範unsing backup controlfile的用法且使用了不完全恢複方式,對於單個資料檔案和
   資料表空間的丟失可以參考:RMAN 還原與恢複

sys@SYBO2SZ> archive log list;   -->看看歸檔情況,log sequence從1開始    Database log mode              Archive ModeAutomatic archival             EnabledArchive destination            /u02/database/SYBO2SZ/archive/Oldest online log sequence     1Next log sequence to archive   1Current log sequence           1sys@SYBO2SZ> alter system switch logfile;-->首先熱備資料庫sys@SYBO2SZ> @db_hot_bak-->新的incarnation 793471702已經產生,可以看到同時也產生了一個尾數為118的上一個incarnation的歸檔日誌sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archivetotal 54M-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc-->刪除資料表空間以更新控制檔案sys@SYBO2SZ> drop tablespace tbs including contents and datafiles;Tablespace dropped.sys@SYBO2SZ> alter system switch logfile;System altered.-->切換日誌後,新增了尾數為2的歸檔日誌sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archivetotal 54M-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc-rw-r----- 1 oracle oinstall  50K 2012-09-08 16:58 arch_793471702_1_2.arcsys@SYBO2SZ> show parameter background_dump_destNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------background_dump_dest                 string      /u02/database/SYBO2SZ/bdump-->從alert log file中查詢資料表空間被刪除的準確時間sys@SYBO2SZ> ho cat -n /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log | grep tbs.dbf  6959  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'  6962  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'... 11014  alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf' 11016  Completed: alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf' 11273  Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf-->下面可以看到資料表空間及資料檔案被刪除的時間-->同時也看到了控制檔案進行了自動備份,因為RMAN配置中控制檔案自動備份被置為ON-->此處使用之前備份的控制檔案來恢複測試,因此此處不考慮使用自動備份的控制檔案sys@SYBO2SZ> ho more +11270 /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.logSat Sep  8 16:57:56 2012drop tablespace tbs including contents and datafilesSat Sep  8 16:57:58 2012Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbfStarting control autobackupControl autobackup written to DISK device        handle '/u02/database/SYBO2SZ/backup/rman/20120907/SYBO2SZ_lev1_201209071410_c-209726751-20120908-05'Completed: drop tablespace tbs including contents and datafilessys@SYBO2SZ> shutdown immediate;-->還原控制檔案及所有的資料檔案sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctlsys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctlsys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctlsys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/*.dbf /u02/database/SYBO2SZ/oradata/.sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.sys@SYBO2SZ> startup mount;ORACLE instance started.-->使用using backup controlfile選項以及設定時間點來恢複資料庫sys@SYBO2SZ> recover database until time '2012-09-08:16:57:56' using backup controlfile;ORA-00279: change 1079138 generated at 09/08/2012 16:55:09 needed for thread 1ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793471702_1_2.arcORA-00280: change 1079138 for thread 1 is in sequence #2Specify log: {<RET>=suggested | filename | AUTO | CANCEL}autoLog applied.Media recovery complete.sys@SYBO2SZ> alter database open resetlogs;Database altered.-->驗證恢複的對象中的記錄數sys@SYBO2SZ> select count(*) from tb_emp;  COUNT(*)----------        11

三、總結:
1、當控制檔案全部丟失或損壞,且沒有及時備份控制檔案的情況下,需要使用unsing backup controlfile方式來恢複
2、使用unsing backup controlfile方式來恢複,需要使用resetlogs方式來開啟資料庫
3、儘可能配置RMAN備份使其自動備份控制檔案

 

四、更多參考:

有關基於使用者管理的備份和備份恢複的概念請參考

    Oracle 冷備份

    Oracle 熱備份

    Oracle 備份恢複概念

    Oracle 執行個體恢複

    Oracle 基於使用者管理恢複的處理(詳細描述了介質恢複及其處理)

    SYSTEM 資料表空間管理及備份恢複

    SYSAUX資料表空間管理及恢複

 

有關RMAN的備份恢複與管理請參考

    RMAN 概述及其體繫結構

    RMAN 配置、監控與管理

    RMAN 備份詳解

    RMAN 還原與恢複

    RMAN catalog 的建立和使用

    基於catalog 建立RMAN儲存指令碼

    基於catalog 的RMAN 備份與恢複

    RMAN 備份路徑困惑(使用plus archivelog時)

 

有關ORACLE體繫結構請參考

    Oracle 資料表空間與資料檔案

    Oracle 密碼檔案

    Oracle 參數檔案

    Oracle 聯機重做記錄檔(ONLINE LOG FILE)

    Oracle 控制檔案(CONTROLFILE)

    Oracle 歸檔日誌

    Oracle 復原(ROLLBACK)和撤銷(UNDO)

    Oracle 資料庫執行個體啟動關閉過程

    Oracle 10g SGA 的自動化管理

    Oracle 執行個體和Oracle資料庫(Oracle體繫結構)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.