首页 > 数据库 >Oracle 恢复之using backup controlfile 和 until cancel

Oracle 恢复之using backup controlfile 和 until cancel

时间:2023-04-18 10:36:37浏览次数:43  
标签:database redo Oracle cancel using controlfile recover backup


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

Specify log: {<RET>=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: {<RET>=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为恢复终点,不应用归档日志,会丢失所有数据。

 


标签:database,redo,Oracle,cancel,using,controlfile,recover,backup
From: https://blog.51cto.com/u_13631369/6202548

相关文章

  • Oracle 利用在线重定义进行分区表转换
    例如原始非分区表为createtableTESTUSER.LOG_TEST("id"CHAR(36)primarykey,"created_at"DATE)一、选择重定义方法   Bykey,选择主键或者所有字段有NOTNULL约束的唯一键用于在线重定义操作。使用这种方法,在线重定义之前和之后表应该有相同的主键字段(默......
  • Oracle Dataguard安装先决条件与注意事项
    业务方要求把一个单实例DB做成dg,由于之前是业务方自己安装管理的,过去检查一番,发现这个库软件居然不是企业版的。整理了几篇相关的官方文档链接给业务方,反馈Oracle标准版不支持dg。顺便也根据官方文档(19c)整理一份checklist,方便以后使用。一、硬件与OS要求1.主库与所有从库安装版本......
  • oracle、达梦数据库、MySQL数据创建表与字段注释
    /**1.oracle注释*//*表本身注释*/commentontable表名is'注释信息';/*字段注释*/commentoncolumn表名.字段名is'注释信息';/*实例如下:*/commentontableUSERis'用户表';commentoncolumnUSER.IDis'主键ID';/**2.MySQL注释*//*表本身注释*/altertable表名co......
  • Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法
    首先看看官方文档中的描述Thiswaiteventindicatesthataserverprocesswasunabletofindafreebufferandhaspostedthedatabasewritertomakefreebuffersbywritingoutdirtybuffers.Adirtybufferisabufferwhosecontentshavebeenmodified.Dirtyb......
  • Oracle create index 中途取消后应该如何处理
        有时会遇到这样的情况,在创建索引的过程中啪叽网断了,会话中断;或者创建索引时觉得执行太慢,直接按了crtl+c取消,直接把运行窗口关了...尝试重新建索引的时候会遇到报错ORA-00095索引名已存在,而dropindex时又报错ORA-08104 thisindex isbeingonlinebuiltorrebuilt......
  • Oracle 单进程可用PGA为4G限制导致的ORA-4030报错
    一、问题背景收到开发反馈,系统报表运行过程中报错,一看发现是ORA-4030,内存的问题查看alert日志,发现期间有大量ORA-4030报错,并且主要是pga相关的打开trace文件,可以看到报错进程使用内存接近4G但是查看pga参数设置,发现设置的上限是20G,完全没到,并且期间总的PGA使用率也不高 二、报错......
  • Oracle 常规坏块处理方法
    收到业务反馈,查看erp请求时遇到报错,一看居然是坏块。。。-_-|| alert日志中也出现相关报错,但还好只有一个坏块一、有备份的处理方法这一般就非常简单,rman有坏块修复功能Recoverdatafile19block44;如有必要,可同时修复多个文件多个块Recoverdatafile19block44datafile19......
  • Oracle 列由VARCHAR2改为CLOB类型
    最近突然遇到好多Oracle列由VARCHAR2改为CLOB类型的需求,不知道大家是不是约好了。。。查了一些网上的文章,结合实际修改的情况记录一下各种场景及解决方法。 一、示例准备新建两张表TB_WITHOUT_DATA(VARCHAR2列不包含数据)和TB_WITH_DATA(Varchar2列包含数据)createtableTB_WITHOU......
  • Oracle将想要查询的时间点集合作为一个新表,去另一个表里只查询规定时间点的数据
    最近遇到一个新需求,我们需要在一个表中选取特定时间段内一些固定时间点的数据(比如只想要取每个小时零点的数据),废物的我想不出来,让大佬教的,记录一下。假如这个表长这样,名字就叫Table吧,需要取到每个小时零点的高度 TIMEHEIGHT2023-04-1800:00:0012023-04-1801:00......
  • Oracle Recovery Tools快速恢复断电引起的无法正常启动数据库---惜分飞
    由于异常断电,数据库启动报错ORA-01113和ORA-01110,ORA-00322和ORA-00312以及ORA-00314和ORA-00312错误MonApr1709:35:042023ALTERDATABASEOPENErrorsinfileD:\APP\ADMINISTRATOR\diag\rdbms\orcl\orcl\trace\orcl_ora_10192.trc:ORA-01113:文件1需要介质恢......