基于catalog库进行部分表空间的还原

应某省的局方要求,在双机热备的备机上,将主机数据库的system、undo、temp和某个应用的表空间DATA_STATIC进行还原。
环境如下:
(1)HA主机:xj_db01
(2)HA备机:xj_db02
(3)备份软件:LEGATO
且legato的备份脚本为:

(4)要求:将带库上的备份还原到xj_db02上,使用文件系统(原来的生产库使用裸设备)。

下面,我们开始还原和恢复。
(一)还原spfile:

此时rman没有找到spfile,于是自己nomount一个dummy数据库。我们需要通过catalog库,将spfile和controlfile进行restore(注,如果没有catalog库,也可以利用dbms_backup_restore包来进行restore)。restore之前需要先set dbid,如果不指定,就会报错,相关的报错见文章后面troubleshooting部分。

(二)还原controlfile:
先用已经restore的spfile启动数据库,在create pfile from spfile;修改pfile中的控制文件路径到文件系统。再用pfile启动,create spfile from pfile;再用该spfile启动数据库。

restore控制文件之后,我们把数据库启动到mount状态。

(三)还原数据文件,要启动一个最小的数据,我们只需还原undo和system表空间即可。在这里,我们还原undo、system和一个应用的表空间data_static。在这里,我们将把数据文件还原到/oradata/recover_xjmisc/dfile路径,因此我们需要set newname一下,并且在最后进行switch datafile all。注意表空间的相关数据文件,我们可以通过关联v$datafile和v$tablespace来获得。

(四)将控制文件中的其他数据文件做offline drop。
我们可以在sqlplus下通过动态sql取。

在rman中我们把undo、system和应用数据文件去掉后,执行剩下的语句:

(五)更改redolog路径:

(六)还原部分arch日志,需要还原哪些,可以从list backup of archivelog all;来查看最近一次全备时间点之后的归档日志的sequence号。注意我们在备机上也是需要把arch restore到别的目录,因此也是需要set archivelog destination:

(七)做recover。如果在restore时间比较长,在restore开始之后,recover开始之前,legato有进行了一次备份,那么用这个catalog做recover就会报错(报错见troubleshooting部分)。我们可以用控制文件中的信息来执行recover,用nocatalog模式连接。在recover的时候,我们要skip那些不需要的tablespace:

至此,部分表空间的还原完成,我们用不完全恢复的方式,恢复数据库至sequence 45851时间点。如果还需要recover后续的,就要补充arch日志,再recover。

(八)我们用open resetlogs的模式打开数据库。此时redolog就会在之前第五步的指定路径出现。

(九)9i中rman的恢复之后需要手工添加tempfile:

(十)【Troubleshooting】:
(1)如果没有set dbid就进行restore spfile,就会报错:

我们需要set dbid。

(2)由于我们是利用带库备份,如果在restore的时候,没有指定channel的parms变量,就会报错:

我们需要添加channel和parms。

(3)如果在restore完成之后,recover完成之前,legato又做了一次备份,那么在执行recover的时候,就会报错:

我们可以用nocatalog来做。

(4)如果数据库resetlogs方式打开后,还是想用原来的备份集做再次还原,那么就需要reset database:reset database to incarnation XXX;

相关文章

7条评论

  1. 收藏
    去年我们这边也有个类似的案例。一张计费配置表被改动了,也是采用不完恢复,只恢复该表空间的数据。
    不过,前面restore的操作都是采用DP进行。

  2. 不错不错,一直看你的blog.

    控制文件和spfile是怎么备份的?脚本里没有看到,设置了auto吗?如果是,在备机rman在dummy实例时,直接restore spfile from XXX,restore controlfile from XXX.可否?

  3. re dhhb:只要含system表空间,默认就会自动备份spfile和控制文件,因此全备的时候,也含了这2个文件。控制文件的自动备份configure 是default的,即不是自动备份。

  4. 哦,是这样啊。 我的意思是如果不是用catalog库来恢复,直接在rman下使用restore spfile from + 包含控制文件的备份集 来恢复spfile和controlfile…

  5. re dhhb:不用catalog恢复也有不少方式,如用dbms_backup_resotre的包,或者从控制文件的snapshot中恢复(10G默认是$ORACLE_HOME/dbs/sncfsid.ora)。pfile可以自己写。

  6. 不错,小荷,我转走了哈。保留你的版权~~~~不过今天的GDDSSP他们已经自己回滚回去了。。。先学习

回复 dhhb 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据