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

Posted by wukaiqiang; tagged with none

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)。所以使用场景要么是控制文件完好数据文件是从备份中恢复的,要么控制文件和数据文件都是从备份中恢复的。

  1. 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 <-- Oracle建议应用的日志
ORA-00280: change 2255708 for thread 1 is in sequence #1

Specify log: {=suggested | filename | AUTO | CANCEL}
/u02/oradata/CDB1/archivelog/2019_06_13/o1_mf_1_1_gj3go3on_.arc <--- 输入日志名
ORA-00279: change 2255918 generated at 06/13/2019 10:53:23 needed for thread 1
ORA-00289: suggestion:/u02/oradata/CDB1/archivelog/2019_06_13/o1_mf_1_2_gj3gpf1h_.arc <-- Oracle建议下一个应用的日志
ORA-00280: change 2255918 for thread 1 is in sequence #2
ORA-00278: log file '/u02/oradata/CDB1/archivelog/2019_06_13/o1_mf_1_1_gj3go3on_.arc' no longer needed for 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.

  1. 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。

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

————————————————
版权声明:本文为CSDN博主「Hehuyi_In」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hehuyi_In/article/details/102907361