Oracle 恢复之using backup controlfile 和 until cancel

Oracle恢复数据库时有几个常用但非常相似的命令,整理下它们各自的作用及适用场景。

  • recover database
  • recover database until cancel
  • recover database using backup controlfile
  • recover database using backup controlfile until cancel
  • recover database until cancel using backup controlfile
命令 控制文件旧于数据文件? 完全恢复? 备注
recover database 不可以  
recover database until cancel 不可以 常用于current/active redo丢失时
recover database using backup controlfile 可以  
recover database using backup controlfile until cancel 可以 相当于执行recover database using backup controlfile,然后选择AUTO应用所有归档,但不输入redo文件进行应用
recover database until cancel using backup controlfile 可以 当于以旧的redo中的scn为恢复终点,不应用归档日志,会丢失所有数据。

 

1. recover database

在普通的recover database或者recover tablespace,recover datafile时,Oracle会以当前controlfile记录的SCN为准,利用archive log和redo log,把相关datafile的block恢复到“当前controlfile记录的SCN”。

使用场景:既然恢复是以控制文件中的SCN为目标,当然要求控制文件不能比数据文件旧(控制文件SCN>=数据文件SCN)。所以使用场景要么是控制文件完好数据文件是从备份中恢复的,要么控制文件和数据文件都是从备份中恢复的。

2. recover database until cancel

也要求控制文件不能比数据文件旧,在丢失current/active redo时手动指定恢复终点,用于不完全恢复。这个命令只能在 SQL命令行进行,通过提示归档日志文件的建议名称进行主动恢复,应用到哪个归档由你自己把控。在归档和联机日志都完整的情况下,你甚至可以通过不完全恢复的语句来实现数据的完全恢复。

recover database until cancel 命令输入AUTO选项时只会应用归档日志,而不会自动应用redo日志,这是和recover database的区别,后者自动应用所有归档和在线日志进行前滚操作。

SQL> recover database until cancel;
ORA-00279: change 2255708 generated at 06/13/2019 10:47:31 needed for thread 1
ORA-00289: suggestion: /u02/oradata/CDB1/archivelog/2019_06_13/o1_mf_1_1_gj3go3on_.arc  <-- 1 2255708
oracle建议应用的日志 ora-00280: change for thread is in sequence #1 specify log: {=suggested | filename | AUTO | CANCEL} /u02/oradata/CDB1/archivelog/2019_06_13/o1_mf_1_1_gj3go3on_.arc <--- 1 13 2019 2255918
输入日志名 ora-00279: change generated at 06 10:53:23 needed for thread ora-00289:
suggestion: u02 oradata cdb1 archivelog 2019_06_13 o1_mf_1_2_gj3gpf1h_.arc <--
oracle建议下一个应用的日志 ora-00280: is in sequence #2 ora-00278: log file ' o1_mf_1_1_gj3go3on_.arc' no longer this recovery o1_mf_1_1_gj3go3on_.arc已应用完,
不再需要 specify log: {=suggested | filename | AUTO | CANCEL} <-- 再次要求输入选项 cancel <--
选择cancel media recovery cancelled.
应用结束 sql> alter database open resetlogs; Database altered.

  

 

3. recover database using backup controlfile

如果数据文件完好,而全部控制文件丢失,需要从备份中还原,此时控制文件就比数据文件旧(控制文件SCN<数据文件scn),只使用recover database恢复db到还原出来的控制文件scn是打不开数据库的。这时就需要用到第二个命令。

recover database using backup controlfile告诉oracle,不要以还原出来的控制文件作为恢复的终点,而要恢复到比它更靠后的位置,恢复时可以看到提示 Specify log: {=suggested | filename | AUTO | CANCEL}。通常选择AUTO应用所有归档,但注意AUTO不会应用redo日志,需要手动输入redo文件进行应用。然后通过alter database open resetlogs;命令打开DB。

4. recover database using backup controlfile until cancel

如果数据文件完好,全部控制文件丢失,并且current/active redo都丢失。执行这个命令相当于执行recover database using backup controlfile,然后选择AUTO应用所有归档,但不输入redo文件进行应用(因为已经丢了),明显这也是一种不完全恢复,current/active redo中的数据会丢失。

5. recover database until cancel using backup controlfile

如果数据文件完好,全部控制文件丢失,并且current/active redo都丢失。执行这个命令相当于以旧的redo中的scn为恢复终点,不应用归档日志,会丢失所有数据。

参考

https://blog.csdn.net/zftang/article/details/6582032

https://www.cnblogs.com/askscuti/p/10996101.html

posted @ 2021-08-26 22:48  雪竹子  阅读(399)  评论(0编辑  收藏  举报