理解 using backup controlfile


using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using backup controlfile的 recover 方式一旦使用之后,常用的recover database命令将不可再使用,且必须要使用resetlogs方式来打开数据库,下面是具体的演示描述。

一、演示 using backup controlfile 时的相关变化

  1. -->查看数据库SYBO2SZ控制文件的时间信息   
  2. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/controlf/  
  3. total 29M  
  4. -rw-r----- 1 Oracle oinstall 9.7M 2012-09-10 11:59 cntl3SYBO2SZ.ctl   
  5. -rw-r----- 1 oracle oinstall 9.7M 2012-09-10 11:59 cntl2SYBO2SZ.ctl   
  6. -rw-r----- 1 oracle oinstall 9.7M 2012-09-10 11:59 cntl1SYBO2SZ.ctl   
  7.   
  8. -->查看系统时间   
  9. sys@SYBO2SZ> ho date  
  10. Mon Sep 10 12:00:09 CST 2012  
  11.   
  12. -->查看数据库SYBO2SZ的状态,此时数据库处于关闭状态   
  13. sys@SYBO2SZ> ho ps -ef | grep pmon_SYBO2SZ  
  14. oracle     440 32067  0 12:01 pts/4    00:00:00 /bin/bash -c ps -ef | grep pmon_SYBO2SZ  
  15. oracle     442   440  0 12:01 pts/4    00:00:00 grep pmon_SYBO2SZ  
  16.   
  17. sys@SYBO2SZ> startup mount;  
  18. ORACLE instance started.  
  19.   
  20. Total System Global Area  599785472 bytes  
  21. Fixed Size                  2074568 bytes  
  22. Variable Size             381683768 bytes  
  23. Database Buffers          209715200 bytes  
  24. Redo Buffers                6311936 bytes  
  25. Database mounted.  
  26.   
  27. -->当mount数据库后,控制文件的状态及时间信息被更新   
  28. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/controlf/  
  29. total 29M  
  30. -rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl3SYBO2SZ.ctl   
  31. -rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl2SYBO2SZ.ctl   
  32. -rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl1SYBO2SZ.ctl   
  33.   
  34. sys@SYBO2SZ> select instance_name,status,database_status from v$instance;  
  35.   
  36. INSTANCE_NAME    STATUS       DATABASE_STATUS  
  37. ---------------- ------------ -----------------   
  38. SYBO2SZ          MOUNTED      ACTIVE  
  39.   
  40. -->此时数据库文件的时间并没有被更新,依旧为11:23   
  41. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/oradata/sys*  
  42. -rw-r----- 1 oracle oinstall 501M 2012-09-10 11:23 /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf   
  43. -rw-r----- 1 oracle oinstall 301M 2012-09-10 11:23 /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf   
  44.   
  45. sys@SYBO2SZ> alter session set nls_date_format='yyyymmdd hh24:mi:ss';  
  46.   
  47. -->Author : Robinson Cheng  -->Blog: <A href="http://blog.csdn.net/robinson_0612">http://blog.csdn.net/robinson_0612   
  48. </A>-->也可以看到此时controlfile_type为current,open_resetlogs为NOT ALLOWED   
  49. sys@SYBO2SZ> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs                    
  50.   2   FROM v$database;  
  51.   
  52. CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL  
  53. ------- --------------------- ------------------- ----------------- -----------   
  54. CURRENT                  6012             1151639 20120910 04:30:14 NOT ALLOWED  
  55.   
  56. -->使用带using backup controlfile的recover 命令,出现Specify log提示   
  57. -->此时再开另一个session连接到实例,下面以idle开头的sql提示符即为另一个session   
  58. sys@SYBO2SZ> recover database using backup controlfile;  
  59. ORA-00279: change 1160803 generated at 09/10/2012 11:23:59 needed for thread 1  
  60. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc  
  61. ORA-00280: change 1160803 for thread 1 is in sequence #3  
  62.   
  63.   
  64. Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  
  65. cancel  
  66. Media recovery cancelled.  
  67.   
  68.     -->session2 的操作   
  69.     idle> conn / as sysdba  
  70.     Connected.  
  71.     idle> alter session set nls_date_format='yyyymmdd hh24:mi:ss';  
  72.           
  73.     Session altered.  
  74.           
  75.     -->下面的查询在使用recover database using backup controlfile后此时controlfile_type为BACKUP   
  76.     -->且open_resetlogs为REQUIRED,相应的sequence以及change#全部发生了变化   
  77.     idle> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs   
  78.       2  FROM v$database;  
  79.           
  80.     CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL  
  81.     ------- --------------------- ------------------- ----------------- -----------   
  82.     BACKUP                   6014             1160803 20120910 11:23:59 REQUIRED  
  83.   
  84. -->上面的查询完成后,输入cancel,提示Media recovery cancelled   
  85. -->尝试使用open方式打开数据库,提示必须使用RESETLOGS or NORESETLOGS选项   
  86. sys@SYBO2SZ> alter database open;  
  87. alter database open  
  88. *  
  89. ERROR at line 1:  
  90. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open  
  91.   
  92. -->使用resetlogs选项打开数据库,注意,此时如果使用noresetlogs选项,会重复出现上述提示   
  93. -->此时提示file1需要介质恢复   
  94. sys@SYBO2SZ> alter database open resetlogs;  
  95. alter database open resetlogs  
  96. *  
  97. ERROR at line 1:  
  98. ORA-01113: file 1 needs media recovery  
  99. ORA-01110: data file 1: '/u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf'  
  100.   
  101. -->根据recover的提示,查看arch_793474012_1_3.arc文件,此时文件并不存在   
  102. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc  
  103. ls: /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc: No such file or directory  
  104.   
  105. -->再次尝试恢复,依然提示需要arch_793474012_1_3.arc归档日志,此时在session2中查看状态信息   
  106. sys@SYBO2SZ> recover database using backup controlfile;  
  107. ORA-00279: change 1160803 generated at 09/10/2012 11:23:59 needed for thread 1  
  108. ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc  
  109. ORA-00280: change 1160803 for thread 1 is in sequence #3  
  110.   
  111. -->将组3的联机日志路径复制到Specify log处实现完全恢复   
  112. Specify log: {<RET>=suggested | filename | AUTO | CANCEL}  
  113. /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log  
  114. Log applied.  
  115. Media recovery complete.  
  116.   
  117.     -->session2   
  118.     -->可以看到控制文件的sequence#发生了几次变化   
  119.     idle> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs  
  120.       2  FROM v$database;  
  121.           
  122.     CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL  
  123.     ------- --------------------- ------------------- ----------------- -----------   
  124.     BACKUP                   6014             1160803 20120910 11:23:59 REQUIRED  
  125.           
  126.     idle> /  
  127.           
  128.     CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL  
  129.     ------- --------------------- ------------------- ----------------- -----------   
  130.     BACKUP                   6015             1160803 20120910 11:23:59 REQUIRED  
  131.           
  132.     -->查看当前联机日志信息   
  133.     idle> select * from v$logfile;  
  134.   
  135.         GROUP# STATUS  TYPE    MEMBER                                                  IS_  
  136.     ---------- ------- ------- ------------------------------------------------------- ---   
  137.              3         ONLINE  /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log          NO  
  138.              3         ONLINE  /u02/database/SYBO2SZ/redolog/log3bSYBO2SZ.log          NO  
  139.              4         ONLINE  /u02/database/SYBO2SZ/redolog/log4aSYBO2SZ.log          NO  
  140.              4         ONLINE  /u02/database/SYBO2SZ/redolog/log4bSYBO2SZ.log          NO  
  141.           
  142.     -->此时日志组3为current状态,因此将组3的联机日志路径复制到Specify log处实现完全恢复   
  143.     idle> select * from v$log;  
  144.           
  145.         GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME  
  146.     ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -----------------   
  147.              4          1          2   20971520          2 YES INACTIVE               1124329 20120909 09:00:49  
  148.              3          1          3   20971520          2 NO  CURRENT                1150957 20120910 04:00:06  
  149.   
  150. -->完全恢复成功后,使用open方式依旧不成功        
  151. sys@SYBO2SZ> alter database open;  
  152. alter database open  
  153. *  
  154. ERROR at line 1:  
  155. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open  
  156.   
  157. -->使用open resetlogs方式成功打开数据库   
  158. sys@SYBO2SZ> alter database open resetlogs;  
  159.   
  160. Database altered.  
  161.   
  162.     -->session 2   
  163.     -->此时session 2中controlfile_type已经被置为CURRENT,open_resetlogs方式也被置为NOT ALLOWED   
  164.     idle> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs  
  165.       2  FROM v$database;  
  166.           
  167.     CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL  
  168.     ------- --------------------- ------------------- ----------------- -----------   
  169.     CURRENT                  6073             1160878 20120910 12:09:58 NOT ALLOWED  
  170.   
  171. -->查看数据文件的时间信息,此时已被更新到最新状态          
  172. sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/oradata/sys*  
  173. -rw-r----- 1 oracle oinstall 501M 2012-09-10 12:09 /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf   
  174. -rw-r----- 1 oracle oinstall 301M 2012-09-10 12:09 /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf   
  175.   
  176. sys@SYBO2SZ> ho date  
  177. Mon Sep 10 12:10:42 CST 2012  
  178.   
  179. -->相应的新的incarnation已经产生   
  180. sys@SYBO2SZ> archive log list;        
  181. Database log mode              Archive Mode  
  182. Automatic archival             Enabled  
  183. Archive destination            /u02/database/SYBO2SZ/archive/  
  184. Oldest online log sequence     1  
  185. Next log sequence to archive   1  
  186. Current log sequence           1  

二、总结

1、using backup controlfile用于恢复备份的控制文件与当前的控制文件不一致的情形

2、一旦使用了using backup controlfile方式,控制文件的类型将由 current 转移到 backup 类型,同时open_resetlogs为required

3、一旦使用了using backup controlfile方式,后续再次使用recover database将变得无效

4、必须要使用 resetlogs 方式打开数据库,即使我们做的是完全恢复

5、注意理解演示中时间状态的更新情况。实际上来说是实例的启动过程,即:

nomount:    根据pfile 或 spfile 启动相关后台进程,分配SGA

mount:         打开控制文件,检查控制文件状态一致性,将数据库与实例关联起来

open:            根据控制文件中记录的数据文件日志文件对其进行逐一检查无误后,整个数据库置于open状态

相关内容