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

 

参考

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

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

### Oracle RMAN备份教程:异机恢复的实现方法与最佳实践 #### 1. 异机恢复概述 在Oracle数据库管理中,RMAN(Recovery Manager)是一种强大的工具,用于执行数据库备份恢复操作。对于跨机器的数据恢复需求,即所谓的“异机恢复”,其核心步骤涉及将源数据库的备份集传输至目标服务器并完成相应的恢复过程[^1]。 #### 2. 异机恢复的前提条件 为了成功实施异机恢复,需要满足以下几个前提条件: - **操作系统兼容性**:确保源数据库目标数据库运行在同一版本的操作系统或至少具有二进制文件兼容性。 - **Oracle软件一致性**:目标服务器上的Oracle Home应与源数据库保持一致,或者能够支持相同版本的数据库实例。 - **网络连接可用性**:如果通过网络传输备份,则需确认两台主机之间的连通性权限设置。 - **存储路径映射清晰**:由于数据文件位置可能发生变化,在迁移过程中必须重新定义这些对象的实际物理地址[^3]。 #### 3. 完整备份创建 以下是利用RMAN生成完整数据库备份的具体命令: ```sql RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; BACKUP DATABASE FORMAT '/u01/backup/%U'; } ``` 上述脚本会把整个数据库保存成一系列磁盘文件形式存放在指定目录下(/u01/backup/)当中。注意这里的`FORMAT`参数指定了最终输出文件名模式(`%U`)及其存放地点。 #### 4. 备份转移至目标环境 一旦完成了本地备份工作后,下一步就是把这些产生的`.bkp`格式档案复制过去另一端设备上去。可以采用多种方式来达成此目的比如SCP(Secure Copy Protocol),FTP(File Transfer Protocol)或者其他企业级解决方案如Tivoli Storage Manager等等。 #### 5. 配置目标侧控制文件自动备份功能开启状态调整 到达接收方之后首要任务之一便是打开CONTROLFILE AUTOBACKUP选项以便于稍后的元信息记录保留下来方便后续处理: ```sql CONFIGURE CONTROLFILE AUTOBACKUP ON; ``` 这条语句的作用是在每次正常结束一次成功的备份作业之时自动生成一个新的controlfile副本作为额外的安全保障措施。 #### 6. 执行实际恢复动作 当所有准备工作都已完成以后就可以正式开始着手解决主要议题——也就是启动真正的RESTORE & RECOVER流程啦! 假设我们已经拥有了先前由SOURCE SIDE传递过来的一套完整的DB IMAGE加上最新的ARCHIVED LOGS集合体的话那么现在只需要简单地遵循如下指令序列即可顺利完成全部事务: ```sql STARTUP NOMOUNT; RESTORE CONTROLFILE FROM '/path/to/controlfile autobackup file'; ALTER DATABASE MOUNT; # 如果存在多个DATAFILES则逐一替换对应的新路径 SET NEWNAME FOR DATAFILE 1 TO '/new/path/system.dbf'; ... SWITCH DATAFILE ALL; RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; ALTER DATABASE OPEN RESETLOGS; ``` 以上每一步都有特定含义并且环环相扣缺一不可所以务必严格按照顺序来进行操作哦! #### 7. 测试验证阶段 最后但同样重要的是不要忘记进行全面的功能检测以保证新部署好的实例确实处于健康稳定的工作状况之中[^4]: - 运行常规查询检查业务逻辑是否受到影响; - 查看监听器日志寻找潜在异常情况报告; - 对关键表空间做容量评估防止因搬迁引起的空间不足现象发生等问题都需要特别关注起来才行呢。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值