1. 程式人生 > >Oracle 基於備份控制檔案的恢復(unsing backup controlfile)

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

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

一、基於備份控制檔案的恢復注意事項(無論是否使用恢復目錄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、控制檔案全部丟失的情形(控制檔案備份後發生變化)

-->首先使用熱備指令碼進行備份
[email protected]> 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
 
[email protected]
> @db_hot_bak [email protected]> show parameter control_files NAME 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 -->為資料庫新增新的表空間,此時控制檔案將不同於先前備份的控制檔案
[email protected]
> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on; Tablespace created. -->為資料庫新增物件 [email protected]> create table tb_emp tablespace tbs as select * from scott.emp ; Table created. [email protected]> select count(*) from tb_emp; COUNT(*) ---------- 14 [email protected]> 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-12 [email protected]> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual; TO_CHAR(SYSDATE, ----------------- 20120908 16:30:41 -->切換日誌 [email protected]> alter system archive log current; System altered. -->刪除部分記錄用於恢復後驗證 [email protected]> delete from tb_emp where deptno=10; 3 rows deleted. [email protected]> commit; Commit complete. [email protected]> alter system archive log current; System altered. [email protected]> ho ls -hltr /u02/database/SYBO2SZ/archive total 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 -->異常關機 [email protected]> shutdown abort; ORACLE instance shut down. -->模擬所有控制檔案丟失 [email protected]> ho rm -rf /u02/database/SYBO2SZ/controlf/* [email protected]> ho ls /u02/database/SYBO2SZ/controlf/ -->啟動後收到ORA-00205錯誤 [email protected]> startup ORACLE instance started. Total System Global Area 599785472 bytes Fixed Size 2074568 bytes Variable Size 276826168 bytes Database Buffers 314572800 bytes Redo Buffers 6311936 bytes ORA-00205: error in identifying control file, check alert log for more info [email protected]> select instance_name,status from v$instance; INSTANCE_NAME STATUS ---------------- ------------ SYBO2SZ STARTED [email protected]> select name,open_mode from v$database; select name,open_mode from v$database * ERROR at line 1: ORA-01507: database not mounted -->還原控制檔案 [email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl [email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl [email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl -->mount資料庫 [email protected]> alter database mount; Database altered. -->由於僅僅是丟失了控制檔案,因此我們只還原控制檔案 -->恢復資料庫,提示需要使用BACKUP CONTROLFILE選項,因為控制檔案在備份後發生了變化 [email protected]> recover database; ORA-00283: recovery session canceled due to errors ORA-01610: recovery using the BACKUP CONTROLFILE option must be done -->提示需要實用到116歸檔日誌 [email protected]> recover database using backup controlfile; ORA-00279: change 1078785 generated at 09/08/2012 16:20:48 needed for thread 1 ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc ORA-00280: change 1078785 for thread 1 is in sequence #116 -->下面提示在介質恢復期間有未知的檔案新增到控制檔案,且檔案id為9 -->由此可以推斷檔案9是記錄在尾數為116的歸檔日誌中,正好與前面檢視的歸檔日誌時間相符 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00283: recovery session canceled due to errors ORA-01244: unnamed datafile(s) added to control file by media recovery ORA-01110: data file 9: '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' ORA-01112: media recovery not started -->使用alter database create datafile重建資料檔案 -->此處故意使用了不同於建立之前的檔名tbs.dbf,此處並沒有任何影響,相對於對資料檔案進行了重新命名 [email protected]> alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'; Database altered. -->嘗試再次恢復,需要使用為數位116的歸檔日誌,輸入auto後,尾數為116,117的不在需要 [email protected]> recover database using backup controlfile; ORA-00279: change 1078817 generated at 09/08/2012 16:29:19 needed for thread 1 ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc ORA-00280: change 1078817 for thread 1 is in sequence #116 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 1078886 generated at 09/08/2012 16:30:52 needed for thread 1 ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc ORA-00280: change 1078886 for thread 1 is in sequence #117 ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc' no longer needed for this recovery ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1 ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc ORA-00280: change 1078922 for thread 1 is in sequence #118 ORA-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 status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 -->再次恢復 [email protected]> recover database using backup controlfile; ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1 ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc ORA-00280: change 1078922 for thread 1 is in sequence #118 -->直接指定redo日誌,介質恢復成功 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log Log applied. Media recovery complete. -->下面需要使用RESETLOGS選項開啟資料庫 [email protected]> alter database open; alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open [email protected]> alter database open resetlogs; Database altered. --> Author : Robinson Cheng -->Blog : http://blog.csdn.net/robinson_0612 -->驗證新建物件的總記錄數,正好等於刪除後的記錄數11條 [email protected]> select count(*) from tb_emp; COUNT(*) ---------- 11

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

[email protected]> archive log list;   -->看看歸檔情況,log sequence從1開始    
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/database/SYBO2SZ/archive/
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence           1
[email protected]> alter system switch logfile;

-->首先熱備資料庫
[email protected]> @db_hot_bak

-->新的incarnation 793471702已經產生,可以看到同時也產生了一個尾數為118的上一個incarnation的歸檔日誌
[email protected]> ho ls -hltr /u02/database/SYBO2SZ/archive
total 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

-->刪除表空間以更新控制檔案
[email protected]> drop tablespace tbs including contents and datafiles;

Tablespace dropped.

[email protected]> alter system switch logfile;

System altered.

-->切換日誌後,新增了尾數為2的歸檔日誌
[email protected]> ho ls -hltr /u02/database/SYBO2SZ/archive
total 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.arc

[email protected]> show parameter background_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /u02/database/SYBO2SZ/bdump

-->從alert log file中查詢表空間被刪除的準確時間
[email protected]> 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
-->此處使用之前備份的控制檔案來恢復測試,因此此處不考慮使用自動備份的控制檔案
[email protected]> ho more +11270 /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log
Sat Sep  8 16:57:56 2012
drop tablespace tbs including contents and datafiles
Sat Sep  8 16:57:58 2012
Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf
Starting control autobackup
Control 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 datafiles

[email protected]> shutdown immediate;

-->還原控制檔案及所有的資料檔案
[email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl

[email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl

[email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl

[email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/*.dbf /u02/database/SYBO2SZ/oradata/.

[email protected]> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.

[email protected]> startup mount;
ORACLE instance started.

-->使用using backup controlfile選項以及設定時間點來恢復資料庫
[email protected]> 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 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793471702_1_2.arc
ORA-00280: change 1079138 for thread 1 is in sequence #2


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.

[email protected]> alter database open resetlogs;

Database altered.

-->驗證恢復的物件中的記錄數
[email protected]> select count(*) from tb_emp;

  COUNT(*)
----------
        11

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

四、更多參考:

基於用管理的備份備份請參

RMAN的備份復與管理請參

ORACLE體系結構請參

相關推薦

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

    通常在當前控制檔案丟失,或者當前的控制檔案與需要恢復的控制檔案不一致的情況下,我們需要重新建立一個控制檔案或者使用 unsingbackup controlfile方式來恢復控制檔案。說簡單點,只要是備份的控制檔案與當前的控制檔案不一致進行恢復資料庫,就需要使用到 u

ARCHIVELOG模式下使用者管理的不完全恢復基於備份控制檔案的不完全恢復

基於備份控制檔案的恢復只要適用於以下情況:表空間被意外刪除;所有控制檔案全部損壞。   先關閉資料庫,執行一次全庫冷備份。 [sql] view plain copy print ?

Oracle:如何備份控制檔案?

 一、作業系統:Windows 2000   二、資料庫: Oracle 8i (8.1.7) for NT 企業版   三、安裝路徑:D:\ORACLE   實現方法:   1、   ALTER DATABASE BACKUP CONTROLFILE TO TRACE;   ALTER DATABASE B

ARCHIVELOG模式下使用者管理恢復控制檔案—使用二進位制控制檔案恢復

在生產資料庫中,控制檔案一般多路複用的。每個控制檔案的內容是一模一樣的,只要其中有一個沒有丟失,那麼就可以複製一下,改一下名字就可以用了。   首先在資料庫中備份執行一個二進位制的控制檔案,也可以使用作業系統的命令直接複製控制檔案來備份。 [sql]

oracle備份之rman_恢復控制檔案

測試環境:redhat 5.5  oracle 11g RMAN> backup database; Starting backup at 21-DEC-17 using channel ORA_DISK_1 channel ORA_DISK_1: starting full d

oracle-控制檔案備份恢復

控制檔案(control file)是資料庫重要的檔案,一旦其丟失將導致資料庫宕機。控制檔案在資料庫的MOUNT階段被讀取,它記錄著資料庫許多重要的資訊。因此控制檔案的日常檢查以及一些常規故障恢復方法就是需要我們必須要掌握的。 一、控制檔案的查詢 -->通過引數查詢

Oracle備份恢復-控制檔案損壞的各種場景恢復專題

1、檢視資料庫基本資訊和資料庫狀態        SQL> show parameter db_name NAME                                 TYPE        VALUE ------------------------------------ -------

oracle備份之rman_恢復資料檔案

測試環境:redhat 5.5 oracle 11g 測試步驟: 1.備庫 2.插資料 3.刪dbf 4.關閉並啟動到mount 5.restore 6.recover 7.開啟 RMAN> backup database; Starting back

ORACLE控制檔案備份

1、將控制檔案備份為二進位制檔案 SQL>alter database backup controlfile to 'i:\oracle\backup\control.bkp'; 2、將控制檔案備份為文字檔案(備份到oracle\base\admin\sid\udump目錄下的跟蹤檔案中,將在跟蹤檔案

Oracle資料庫檔案恢復備份思路

轉載地址:http://soft.chinabyte.com/database/169/12619169.shtml 任何資料庫在長期使用過程中,都會存在一定的安全隱患。對於資料庫管理員來說不能僅寄希望於計算機作業系統的安全執行,而是要建立一整套的資料庫備份與恢復機制。當

Oracle控制檔案恢復

                                                                                                                       轉載自https://blog.csd

oracle恢復控制檔案

資料庫在執行過程當中,可能會處於某種原因導致控制檔案丟失或者損壞,資料庫檔案記錄著資料庫的結構資訊,包括資料檔案,歸檔日誌檔案等資料庫的重要資訊,控制檔案丟失,直接會導致資料庫宕機。這篇部落格會模擬各種控制檔案丟失的情況,來恢復資料庫的正常使用。 丟失部分控制檔案 控制檔

Oracle備份恢復

改變 方式 冷備份 div 可能 例子 數據庫 速度 外部 Oracle數據庫有三種標準的備份方法,它們分別是導出/導入(EXP/IMP)、熱備份和冷備 份。導出備件是一種邏輯備份,冷備份和熱備份是物理備份。 一、 導出/導入(Export/Import) 利用

Oracle備份恢復時報錯解決

chang tab sha 卸載 database not sqlplus members acl ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist 進程 ID: 0

ARCHIVELOG模式下使用者管理恢復控制檔案—使用trace檔案重建控制檔案

首先生成控制檔案的sql指令碼 [sql] view plain copy print ? SQL> alter database backup contr

Oracle 基於 RMAN 的不完全恢復(incomplete recovery by RMAN)

引用自:https://blog.csdn.net/leshami/article/details/9253867 Oracle 資料庫可以實現資料庫不完全恢復與完全恢復。完全恢復是將資料庫恢復到最新時刻,也就是無損恢復,保證資料庫無丟失的恢復。而不完全恢復則是根據需要特意將資料庫恢復到某個過去

Oracle資料庫備份恢復 - 增量備份

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle資料庫備份恢復 - RMAN恢復

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

解決問題:1.Oracle資料庫匯入備份DMP檔案&使用管理員許可權登入&匯入資料命令

第一步:首先確保你的Oracle資料庫能連服務能起。同時sqlplus環境配置好了。 第二步:建立你需要的使用者表: --建立表空間 CREATE TABLESPACE test (建立表空間的名稱)

[實驗-視訊過程]oracle備份-整個資料庫-備份恢復操作演示

先檢視資料版本和資料檔案所在位置 10g以上版本支援整體表空間熱備份 select * from v$version; select name from v$datafiles; 確認是否為歸檔模式 archive log list; 如果不是改成歸檔模