设为首页 收藏本站
查看: 1118|回复: 0

[经验分享] Oracle 基于备份控制文件的恢复(unsing backup controlfile)

[复制链接]

尚未签到

发表于 2016-8-4 15:35:26 | 显示全部楼层 |阅读模式
   通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing
backup controlfile方式来恢复控制文件。说简单点,只要是备份的控制文件与当前的控制文件不一致进行恢复数据库,就需要使用到 unsing
backup controlfile方式,而一旦使用了该方式,则需使用resetlgos选项来打开数据库。

  
   有关控制文件的介绍请参考: Oracle 控制文件(CONTROLFILE)
  using backup controlfile 请参考:理解 using backup controlfile
  
  一、基于备份控制文件的恢复注意事项(无论是否使用恢复目录catalog)
1、即使没有数据文件需要还原,当使用unsing backup controlfile 方式时必须结合 recover 命令
2、不论使用备份的控制文件进行时点恢复或完全恢复,必须使用 open resetlogs 方式打开数据库
3、如果联机日志不可访问,必须使用不完全恢复到联机日志文件中最早的一个SCN之前。这是因为RMAN并不备份联机日志文件
4、在恢复期间,RMAN自动搜索联机日志和没有记录在RMAN存储仓库中的归档日志以完成恢复
5、RMAN会根据初始化参数文件中归档位置以及控制文件联机日志信息自动寻找有效的归档日志和联机日志。使用unsing backup controlfile方
式时,在恢复期间,一旦归档目的地以及归档格式发生变化,或添加新的联机日志成员将收到RMAN-06054错误信息。

   本文主要使用热备方式来完成演示
  
  二、演示unsing backup controlfile的使用
  1、控制文件全部丢失的情形(控制文件备份后发生变化)


-->首先使用热备脚本进行备份
sys@SYBO2SZ> get db_hot_bak.sql
1  set feedback off heading off verify off
2  set pagesize 0 linesize 200
3  define dir='/u02/database/SYBO2SZ/backup/hotbak'
4  define script='/tmp/tmphotbak.sql'
5  spool &script
6  select 'ho cp '||name||' &dir' from v$datafile;
7  spool off
8  alter database begin backup;
9  start &script
10  alter database end backup;
11  alter database backup controlfile to '&dir/contlbak.ctl' reuse;
12  create pfile='&dir/initSYBO2SZ.ora' from spfile;
13* set feedback on heading on verify on pagesize 100
sys@SYBO2SZ> @db_hot_bak
sys@SYBO2SZ> show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u02/database/SYBO2SZ/controlf
/cntl1SYBO2SZ.ctl, /u02/databa
se/SYBO2SZ/controlf/cntl2SYBO2
SZ.ctl, /u02/database/SYBO2SZ/
controlf/cntl3SYBO2SZ.ctl
-->为数据库添加新的表空间,此时控制文件将不同于先前备份的控制文件                                                  
sys@SYBO2SZ> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on;
Tablespace created.
-->为数据库添加对象
sys@SYBO2SZ> create table tb_emp tablespace tbs as select * from scott.emp ;
Table created.
sys@SYBO2SZ> select count(*) from tb_emp;
COUNT(*)
----------
14
sys@SYBO2SZ> select * from v$log;
GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
3          1        116   20971520          2 NO  CURRENT                1078066 08-SEP-12
4          1        115   20971520          2 YES INACTIVE               1063428 08-SEP-12
sys@SYBO2SZ> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,
-----------------
20120908 16:30:41
-->切换日志
sys@SYBO2SZ> alter system archive log current;
System altered.
-->删除部分记录用于恢复后验证
sys@SYBO2SZ> delete from tb_emp where deptno=10;
3 rows deleted.
sys@SYBO2SZ> commit;
Commit complete.
sys@SYBO2SZ> alter system archive log current;
System altered.
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 143M
-rw-r----- 1 oracle oinstall  15M 2012-09-08 16:20 arch_792094299_1_115.arc
-rw-r----- 1 oracle oinstall 236K 2012-09-08 16:30 arch_792094299_1_116.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:32 arch_792094299_1_117.arc
-->异常关机
sys@SYBO2SZ> shutdown abort;
ORACLE instance shut down.
-->模拟所有控制文件丢失
sys@SYBO2SZ> ho rm -rf /u02/database/SYBO2SZ/controlf/*
sys@SYBO2SZ> ho ls /u02/database/SYBO2SZ/controlf/
-->启动后收到ORA-00205错误
sys@SYBO2SZ> startup
ORACLE instance started.
Total System Global Area  599785472 bytes
Fixed Size                  2074568 bytes
Variable Size             276826168 bytes
Database Buffers          314572800 bytes
Redo Buffers                6311936 bytes
ORA-00205: error in identifying control file, check alert log for more info
sys@SYBO2SZ> select instance_name,status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
SYBO2SZ          STARTED
sys@SYBO2SZ> select name,open_mode from v$database;
select name,open_mode from v$database
*
ERROR at line 1:
ORA-01507: database not mounted
-->还原控制文件
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl
-->mount数据库
sys@SYBO2SZ> alter database mount;
Database altered.
-->由于仅仅是丢失了控制文件,因此我们只还原控制文件
-->恢复数据库,提示需要使用BACKUP CONTROLFILE选项,因为控制文件在备份后发生了变化
sys@SYBO2SZ> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
-->提示需要实用到116归档日志
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078785 generated at 09/08/2012 16:20:48 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc
ORA-00280: change 1078785 for thread 1 is in sequence #116
-->下面提示在介质恢复期间有未知的文件添加到控制文件,且文件id为9
-->由此可以推断文件9是记录在尾数为116的归档日志中,正好与前面查看的归档日志时间相符
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 9: '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf'
ORA-01112: media recovery not started
-->使用alter database create datafile重建数据文件
-->此处故意使用了不同于创建之前的文件名tbs.dbf,此处并没有任何影响,相对于对数据文件进行了重命名
sys@SYBO2SZ> alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf';
Database altered.
-->尝试再次恢复,需要使用为数位116的归档日志,输入auto后,尾数为116,117的不在需要
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078817 generated at 09/08/2012 16:29:19 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc
ORA-00280: change 1078817 for thread 1 is in sequence #116

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 1078886 generated at 09/08/2012 16:30:52 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc
ORA-00280: change 1078886 for thread 1 is in sequence #117
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc' no longer needed for this recovery

ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc
ORA-00280: change 1078922 for thread 1 is in sequence #118
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc' no longer needed for this recovery
-->提示未找尾数为118的归档日志,118本身还没有归档,因此来说此时是联机日志
ORA-00308: cannot open archived log '/u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
-->再次恢复
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc
ORA-00280: change 1078922 for thread 1 is in sequence #118
-->直接指定redo日志,介质恢复成功
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log
Log applied.
Media recovery complete.
-->下面需要使用RESETLOGS选项打开数据库
sys@SYBO2SZ> alter database open;  
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
sys@SYBO2SZ> alter database open resetlogs;
Database altered.
--> Author : Robinson Cheng    -->Blog : http://blog.csdn.net/robinson_0612
-->验证新建对象的总记录数,正好等于删除后的记录数11条
sys@SYBO2SZ> select count(*) from tb_emp;
COUNT(*)
----------
11
  2、删除表空间模拟控制文件变化的情形
下面的这个例子的处理方式并非最佳,此处仅仅为演示unsing backup controlfile的用法且使用了不完全恢复方式,对于单个数据文件和
表空间的丢失可以参考:RMAN 还原与恢复


sys@SYBO2SZ> archive log list;   -->看看归档情况,log sequence从1开始   
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/database/SYBO2SZ/archive/
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence           1
sys@SYBO2SZ> alter system switch logfile;
-->首先热备数据库
sys@SYBO2SZ> @db_hot_bak
-->新的incarnation 793471702已经产生,可以看到同时也产生了一个尾数为118的上一个incarnation的归档日志
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 54M
-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc
-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc
-->删除表空间以更新控制文件
sys@SYBO2SZ> drop tablespace tbs including contents and datafiles;
Tablespace dropped.
sys@SYBO2SZ> alter system switch logfile;
System altered.
-->切换日志后,新增了尾数为2的归档日志
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 54M
-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc
-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc
-rw-r----- 1 oracle oinstall  50K 2012-09-08 16:58 arch_793471702_1_2.arc
sys@SYBO2SZ> show parameter background_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /u02/database/SYBO2SZ/bdump
-->从alert log file中查询表空间被删除的准确时间
sys@SYBO2SZ> ho cat -n /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log | grep tbs.dbf
6959  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'
6962  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'...
11014  alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'
11016  Completed: alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'
11273  Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf
-->下面可以看到表空间及数据文件被删除的时间
-->同时也看到了控制文件进行了自动备份,因为RMAN配置中控制文件自动备份被置为ON
-->此处使用之前备份的控制文件来恢复测试,因此此处不考虑使用自动备份的控制文件
sys@SYBO2SZ> ho more +11270 /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log
Sat Sep  8 16:57:56 2012
drop tablespace tbs including contents and datafiles
Sat Sep  8 16:57:58 2012
Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf
Starting control autobackup
Control autobackup written to DISK device
handle '/u02/database/SYBO2SZ/backup/rman/20120907/SYBO2SZ_lev1_201209071410_c-209726751-20120908-05'
Completed: drop tablespace tbs including contents and datafiles
sys@SYBO2SZ> shutdown immediate;
-->还原控制文件及所有的数据文件
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/*.dbf /u02/database/SYBO2SZ/oradata/.
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
sys@SYBO2SZ> startup mount;
ORACLE instance started.
-->使用using backup controlfile选项以及设定时间点来恢复数据库
sys@SYBO2SZ> recover database until time '2012-09-08:16:57:56' using backup controlfile;
ORA-00279: change 1079138 generated at 09/08/2012 16:55:09 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793471702_1_2.arc
ORA-00280: change 1079138 for thread 1 is in sequence #2

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
sys@SYBO2SZ> alter database open resetlogs;
Database altered.
-->验证恢复的对象中的记录数
sys@SYBO2SZ> select count(*) from tb_emp;
COUNT(*)
----------
11
  三、总结:
1、当控制文件全部丢失或损坏,且没有及时备份控制文件的情况下,需要使用unsing backup controlfile方式来恢复
2、使用unsing backup controlfile方式来恢复,需要使用resetlogs方式来打开数据库
3、尽可能配置RMAN备份使其自动备份控制文件

  
  四、更多参考:
  基于用管理的备份备份请参
   Oracle 冷备份
   Oracle 热备份
   Oracle 备份恢复概念
   Oracle 实例恢复
   Oracle 基于用户管理恢复的处理(详细描述了介及其)
   SYSTEM 表空间管理及备份恢复
   SYSAUX表空间管理及恢复
  
  RMAN的备份复与管理请参
   RMAN 概述及其体系结构
   RMAN 配置、监控与管理
   RMAN 备份详解
   RMAN 还原与恢复
   RMAN catalog 的创建和使用
   基于catalog 创建RMAN存储脚本
   基于catalog 的RMAN 备份与恢复
   RMAN 备份困惑(使用plus archivelog)
  
  ORACLE体系结构请参
   Oracle 表空间与数据文件
   Oracle 密码文件
   Oracle 参数文件
   Oracle 联机重做日志文件(ONLINE LOG FILE)
   Oracle 控制文件(CONTROLFILE)
   Oracle 归档日志
   Oracle 回滚(ROLLBACK)和撤销(UNDO)
   Oracle 数据库实例启动关闭过程
   Oracle 10g SGA 的自动化管理
   Oracle 实例和Oracle数据库(Oracle体系结构)
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252887-1-1.html 上篇帖子: Oracle delete 数据后的释放表空间问题 下篇帖子: oracle查看被锁的表和解锁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表