ITPub博客

首页 > 数据库 > Oracle > Oracle 基于备份控制文件的恢复(unsing backup controlfile)

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

Oracle 作者:lilingfeng1 时间:2016-10-10 09:56:36 0 删除 编辑

  通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 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、控制文件全部丢失的情形(控制文件备份后发生变化)

[sql] view plain copy
 print?
  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. 3 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: {=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: {=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: {=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  

2、删除表空间模拟控制文件变化的情形
   下面的这个例子的处理方式并非最佳,此处仅仅为演示unsing backup controlfile的用法且使用了不完全恢复方式,对于单个数据文件和
   表空间的丢失可以参考:RMAN 还原与恢复

[sql] view plain copy
 print?
  1. sys@SYBO2SZ> archive log list;   -->看看归档情况,log sequence从1开始      
  2. Database log mode              Archive Mode  
  3. Automatic archival             Enabled  
  4. Archive destination            /u02/database/SYBO2SZ/archive/  
  5. Oldest online log sequence     1  
  6. Next log sequence to archive   1  
  7. Current log sequence           1  
  8. sys@SYBO2SZ> alter system switch logfile;  
  9.   
  10. -->首先热备数据库  
  11. sys@SYBO2SZ> @db_hot_bak  
  12.   
  13. -->新的incarnation 793471702已经产生,可以看到同时也产生了一个尾数为118的上一个incarnation的归档日志  
  14. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  
  15. total 54M  
  16. -rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc  
  17. -rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc  
  18. -rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc  
  19.   
  20. -->删除表空间以更新控制文件  
  21. sys@SYBO2SZ> drop tablespace tbs including contents and datafiles;  
  22.   
  23. Tablespace dropped.  
  24.   
  25. sys@SYBO2SZ> alter system switch logfile;  
  26.   
  27. System altered.  
  28.   
  29. -->切换日志后,新增了尾数为2的归档日志  
  30. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  
  31. total 54M  
  32. -rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc  
  33. -rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc  
  34. -rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc  
  35. -rw-r----- 1 oracle oinstall  50K 2012-09-08 16:58 arch_793471702_1_2.arc  
  36.   
  37. sys@SYBO2SZ> show parameter background_dump_dest  
  38.   
  39. NAME                                 TYPE        VALUE  
  40. ------------------------------------ ----------- ------------------------------  
  41. background_dump_dest                 string      /u02/database/SYBO2SZ/bdump  
  42.   
  43. -->从alert log file中查询表空间被删除的准确时间  
  44. sys@SYBO2SZ> ho cat -n /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log | grep tbs.dbf  
  45.   6959  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'  
  46.   6962  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'...  
  47.  11014  alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'  
  48.  11016  Completed: alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'  
  49.  11273  Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf  
  50.   
  51. -->下面可以看到表空间及数据文件被删除的时间  
  52. -->同时也看到了控制文件进行了自动备份,因为RMAN配置中控制文件自动备份被置为ON  
  53. -->此处使用之前备份的控制文件来恢复测试,因此此处不考虑使用自动备份的控制文件  
  54. sys@SYBO2SZ> ho more +11270 /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log  
  55. Sat Sep  8 16:57:56 2012  
  56. drop tablespace tbs including contents and datafiles  
  57. Sat Sep  8 16:57:58 2012  
  58. Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf  
  59. Starting control autobackup  
  60. Control autobackup written to DISK device  
  61.         handle '/u02/database/SYBO2SZ/backup/rman/20120907/SYBO2SZ_lev1_201209071410_c-209726751-20120908-05'  
  62. Completed: drop tablespace tbs including contents and datafiles  
  63.   
  64. sys@SYBO2SZ> shutdown immediate;  
  65.   
  66. -->还原控制文件及所有的数据文件  
  67. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl  
  68.   
  69. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl  
  70.   
  71. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl  
  72.   
  73. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/*.dbf /u02/database/SYBO2SZ/oradata/.  
  74.   
  75. sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.  
  76.   
  77. sys@SYBO2SZ> startup mount;  
  78. ORACLE instance started.  
  79.   
  80. -->使用using backup controlfile选项以及设定时间点来恢复数据库  
  81. sys@SYBO2SZ> recover database until time '2012-09-08:16:57:56' using backup controlfile;  
  82. ORA-00279: change 1079138 generated at 09/08/2012 16:55:09 needed for thread 1  
  83. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793471702_1_2.arc  
  84. ORA-00280: change 1079138 for thread 1 is in sequence #2  
  85.   
  86.   
  87. Specify log: {=suggested | filename | AUTO | CANCEL}  
  88. auto  
  89. Log applied.  
  90. Media recovery complete.  
  91.   
  92. sys@SYBO2SZ> alter database open resetlogs;  
  93.   
  94. Database altered.  
  95.   
  96. -->验证恢复的对象中的记录数  
  97. sys@SYBO2SZ> select count(*) from tb_emp;  
  98.   
  99.   COUNT(*)  
  100. ----------  
  101.         11  

三、总结:
1、当控制文件全部丢失或损坏,且没有及时备份控制文件的情况下,需要使用unsing backup controlfile方式来恢复
2、使用unsing backup controlfile方式来恢复,需要使用resetlogs方式来打开数据库
3、尽可能配置RMAN备份使其自动备份控制文件

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30192548/viewspace-2126029/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-04-05

  • 博文量
    51
  • 访问量
    38494