您的位置:首页 > 数据库 > Oracle

【个人笔记】用RMAN恢复控制文件以及相关操作步骤的个人理解

2018-02-03 21:50 288 查看
Oracle 11g R2测试前做过全备测试机所有控制文件全部删除      当数据库控制文件损坏后,数据库是无法正常down下来的,只能进行shutdown abort 操作。这个时候startup数据库,只能启动到nomount状态。
  1.   restore controlfile from '/u01/dbbackup/rman/cf_c-1490764804-20180203-02.bkp';
       rman target / 进入rman界面进行操作,执行上面的命令。控制文件的备份路径换成你自己的。
       当你看到  Finished restore at 2018-02-03 15:45:58  后就说明执行成功了。
       执行成功后数据库就可以切换到mount状态下。2. alter database mount;将数据库切换到mount状态下。
3. recover database;      这时候我们发现一件很神奇的事情,默认controlfile的头信息要大于等于数据文件的头信息,他先更新controlfile的头信息,再更新数据文件的头信息,所以所有controlfile的头信息要比数据文件的头信息要么一样,要么新。由于我这个controlfile是从备份文件里面调回来的,所以这个controlfile 的头信息要比现在的数据文件的头信息旧。那这个时候怎么办,我要对整个数据库做一个recover database。为什么要做recover database。而不用做restore datafile,因为数据文件的介质还在。为什么要做 recover database,因为我们的控制文件的头信息要比所有的数据文件的头信息旧,这个时候要做前滚,把所有的头信息都扫一边,把其中最新的头信息拿到,然后所有的控制文件和数据文件的头信息都根据这个头信息,将不一致的头信息都滚到一致的状态下,所以要整库去做recover database。
4. alter database open resetlogs;       接下来执行alter database open resetlogs;重新初始化。要以重置日志模式,重置日志模式当中oracle会把所有的redolog文件全部的初始化一遍,因为此时redolog已经没有用了
redolog里面放的前滚的事务已经没有用了,全部要初始化,然后这个时候数据库才能open打开。执行完这个alter database open resetlogs后会看到 database open。



这个时候我们使用archive log list 发现log的编号又从最初始的1重新开始了。



也就是我们的数据库重置了一个新的incarnation(化身,实体化),
       数据库重置了一个“新的化身”(挺有意思的叫法)。
       现在我们登陆RMAN,由于数据库重置了一个新的版本,所有我们要对数据库做一次全备,做全备之前要把,过去的备份文件删掉,因为我们的数据库现在有了一个新的版本出现了,所有要做一次全备。
       大家记住一个结论,凡是做过 open resetlogs,数据库必需做一次全备。因为数据库已经产生了一个新的incarnation(化身),所以数据库必须做一次全备,之前的备份已经无效了。(数据库恢复好了,能够正常打开来了,才能做全备。)(那么如果alter database open resetlogs做完以后,数据库没有做全备,然后数据库就在跑业务了,然后数据库突然crash掉了。那么也可以依赖,open resetlogs之前的全备去恢复数据库,但是这个还原做的功能也是有限的,在你使用open resetlogs之前的全备去还原的时候,如果你的数据库在open resetlogs以后做过库结构的改变,比如新建过表空间,加过数据文件或者数据文件改动过,只要这些库结构变过,那就不能恢复了,彻底不能恢复了)。所以,所以,在你做了alter database open resetlogs以后一定要做全备,不做全备,你就是在走钢丝。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息