Oracle 基于备份控制文件的恢复(unsing backup controlfile)


通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing

backup controlfile方式来恢复控制文件。说简单点,只要是备份的控制文件与当前的控制文件不一致进行恢复数据库,就需要使用到 unsing

backup controlfile方式,而一旦使用了该方式,则需使用resetlgos选项来打开数据库。

有关控制文件的介绍请参考: Oracle 控制文件(CONTROL FILE)

一、基于备份控制文件的恢复注意事项(无论是否使用恢复目录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、控制文件全部丢失的情形(控制文件备份后发生变化)

  1. -->首先使用热备脚本进行备份   
  2. sys@SYBO2SZ> get db_hot_bak.sql  
  3.   1  set feedback off heading off verify off  
  4.   2  set pagesize 0 linesize 200  
  5.   3  define dir='/u02/database/SYBO2SZ/backup/hotbak'  
  6.   4  define script='/tmp/tmphotbak.sql'  
  7.   5  spool &script  
  8.   6  select 'ho cp '||name||' &dir' from v$datafile;  
  9.   7  spool off  
  10.   8  alter database begin backup;  
  11.   9  start &script  
  12.  10  alter database end backup;  
  13.  11  alter database backup controlfile to '&dir/contlbak.ctl' reuse;  
  14.  12  create pfile='&dir/initSYBO2SZ.ora' from spfile;  
  15.  13* set feedback on heading on verify on pagesize 100  
  16.    
  17. sys@SYBO2SZ> @db_hot_bak   
  18.   
  19. sys@SYBO2SZ> show parameter control_files  
  20.   
  21. NAME                                 TYPE        VALUE  
  22. ------------------------------------ ----------- ------------------------------   
  23. control_files                        string      /u02/database/SYBO2SZ/controlf  
  24.                                                  /cntl1SYBO2SZ.ctl, /u02/databa  
  25.                                                  se/SYBO2SZ/controlf/cntl2SYBO2  
  26.                                                  SZ.ctl, /u02/database/SYBO2SZ/  
  27.                                                  controlf/cntl3SYBO2SZ.ctl  
  28.                                                    
  29. -->为数据库添加新的表空间,此时控制文件将不同于先前备份的控制文件                                                     
  30. sys@SYBO2SZ> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on;  
  31.   
  32. Tablespace created.  
  33.   
  34. -->为数据库添加对象   
  35. sys@SYBO2SZ> create table tb_emp tablespace tbs as select * from scott.emp ;  
  36.   
  37. Table created.  
  38.   
  39. sys@SYBO2SZ> select count(*) from tb_emp;  
  40.   
  41.   COUNT(*)  
  42. ----------   
  43.         14  
  44.   
  45. sys@SYBO2SZ> select * from v$log;  
  46.   
  47.     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM  
  48. ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------   
  49.          3          1        116   20971520          2 NO  CURRENT                1078066 08-SEP-12  
  50.          4          1        115   20971520          2 YES INACTIVE               1063428 08-SEP-12  
  51.   
  52. sys@SYBO2SZ> select to_char(sysdate,'yyyymmdd hh24:mi:ss'from dual;  
  53.   
  54. TO_CHAR(SYSDATE,  
  55. -----------------   
  56. 20120908 16:30:41  
  57.   
  58. -->切换日志   
  59. sys@SYBO2SZ> alter system archive log current;  
  60.   
  61. System altered.  
  62.   
  63. -->删除部分记录用于恢复后验证   
  64. sys@SYBO2SZ> delete from tb_emp where deptno=10;  
  65.   
  66. rows deleted.  
  67.   
  68. sys@SYBO2SZ> commit;  
  69.   
  70. Commit complete.  
  71.   
  72. sys@SYBO2SZ> alter system archive log current;  
  73.   
  74. System altered.  
  75.   
  76. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  
  77. total 143M  
  78. -rw-r----- 1 oracle oinstall  15M 2012-09-08 16:20 arch_792094299_1_115.arc   
  79. -rw-r----- 1 oracle oinstall 236K 2012-09-08 16:30 arch_792094299_1_116.arc   
  80. -rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:32 arch_792094299_1_117.arc   
  81.   
  82. -->异常关机   
  83. sys@SYBO2SZ> shutdown abort;  
  84. ORACLE instance shut down.  
  85.   
  86. -->模拟所有控制文件丢失   
  87. sys@SYBO2SZ> ho rm -rf /u02/database/SYBO2SZ/controlf/*  
  88.   
  89. sys@SYBO2SZ> ho ls /u02/database/SYBO2SZ/controlf/  
  90.   
  91. -->启动后收到ORA-00205错误   
  92. sys@SYBO2SZ> startup   
  93. ORACLE instance started.  
  94.   
  95. Total System Global Area  599785472 bytes  
  96. Fixed Size                  2074568 bytes  
  97. Variable Size             276826168 bytes  
  98. Database Buffers          314572800 bytes  
  99. Redo Buffers                6311936 bytes  
  100. ORA-00205: error in identifying control file, check alert log for more info  
  101.   
  102. sys@SYBO2SZ> select instance_name,status from v$instance;  
  103.   
  104. INSTANCE_NAME    STATUS  
  105. ---------------- ------------   
  106. SYBO2SZ          STARTED  
  107.   
  108. sys@SYBO2SZ> select name,open_mode from v$database;  
  109. select name,open_mode from v$database  
  110.                            *  
  111. ERROR at line 1:  
  112. ORA-01507: database not mounted  
  113.   
  114. -->还原控制文件   
  115. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl  
  116.   
  117. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl  
  118.   
  119. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl  
  120.   
  121. -->mount数据库   
  122. sys@SYBO2SZ> alter database mount;  
  123.   
  124. Database altered.  
  125.   
  126. -->由于仅仅是丢失了控制文件,因此我们只还原控制文件   
  127. -->恢复数据库,提示需要使用BACKUP CONTROLFILE选项,因为控制文件在备份后发生了变化   
  128. sys@SYBO2SZ> recover database;  
  129. ORA-00283: recovery session canceled due to errors  
  130. ORA-01610: recovery using the BACKUP CONTROLFILE option must be done  
  131.   
  132. -->提示需要实用到116归档日志   
  133. sys@SYBO2SZ> recover database using backup controlfile;  
  134. ORA-00279: change 1078785 generated at 09/08/2012 16:20:48 needed for thread 1  
  135. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc  
  136. ORA-00280: change 1078785 for thread 1 is in sequence #116  
  137.   
  138. -->下面提示在介质恢复期间有未知的文件添加到控制文件,且文件id为9   
  139. -->由此可以推断文件9是记录在尾数为116的归档日志中,正好与前面查看的归档日志时间相符   
  140. Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  
  141. auto  
  142. ORA-00283: recovery session canceled due to errors  
  143. ORA-01244: unnamed datafile(s) added to control file by media recovery  
  144. ORA-01110: data file 9: '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf'  
  145.   
  146. ORA-01112: media recovery not started  
  147.   
  148. -->使用alter database create datafile重建数据文件   
  149. -->此处故意使用了不同于创建之前的文件名tbs.dbf,此处并没有任何影响,相对于对数据文件进行了重命名   
  150. sys@SYBO2SZ> alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf';  
  151.   
  152. Database altered.  
  153.   
  154. -->尝试再次恢复,需要使用为数位116的归档日志,输入auto后,尾数为116,117的不在需要   
  155. sys@SYBO2SZ> recover database using backup controlfile;  
  156. ORA-00279: change 1078817 generated at 09/08/2012 16:29:19 needed for thread 1  
  157. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc  
  158. ORA-00280: change 1078817 for thread 1 is in sequence #116  
  159.   
  160.   
  161. Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  
  162. auto   
  163. ORA-00279: change 1078886 generated at 09/08/2012 16:30:52 needed for thread 1  
  164. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc  
  165. ORA-00280: change 1078886 for thread 1 is in sequence #117  
  166. ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc' no longer needed for this recovery  
  167.   
  168.   
  169. ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1  
  170. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc  
  171. ORA-00280: change 1078922 for thread 1 is in sequence #118  
  172. ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc' no longer needed for this recovery  
  173.   
  174. -->提示未找尾数为118的归档日志,118本身还没有归档,因此来说此时是联机日志   
  175. ORA-00308: cannot open archived log '/u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc'  
  176. ORA-27037: unable to obtain file status  
  177. Linux-x86_64 Error: 2: No such file or directory  
  178. Additional information: 3  
  179.   
  180. -->再次恢复   
  181. sys@SYBO2SZ> recover database using backup controlfile;  
  182. ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1  
  183. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc  
  184. ORA-00280: change 1078922 for thread 1 is in sequence #118  
  185.   
  186. -->直接指定redo日志,介质恢复成功   
  187. Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  
  188. /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log  
  189. Log applied.  
  190. Media recovery complete.  
  191.   
  192. -->下面需要使用RESETLOGS选项打开数据库   
  193. sys@SYBO2SZ> alter database open;    
  194. alter database open  
  195. *  
  196. ERROR at line 1:  
  197. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open  
  198.   
  199. sys@SYBO2SZ> alter database open resetlogs;  
  200.   
  201. Database altered.  
  202. --> Author : Robinson Cheng    -->Blog : http://blog.csdn.net/robinson_0612   
  203. -->验证新建对象的总记录数,正好等于删除后的记录数11条   
  204. sys@SYBO2SZ> select count(*) from tb_emp;  
  205.   
  206.   COUNT(*)  
  207. ----------   
  208.         11  
  • 1
  • 2
  • 下一页

相关内容