RMAN Recovery Catalog

下面是Rman recovery catalog相关的知识和实验:

 

一,创建Recovery catalog
RMAN恢复目录数据库:  必须OPEN
目标数据库:  根据不同情况,必须MOUNT或OPEN

启动target 数据库
[oracle@even ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jan 2 15:27:22 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              88082000 bytes
Database Buffers          192937984 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.

启动catalog 数据库
[oracle@even ~]$ export ORACLE_SID=catalogdb
[oracle@even ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jan 2 15:28:43 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              92276304 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.

 

在catalogdb数据库里做如下操作:
Configure the recovery catalog database:
SQL> create tablespace rcat_tbs datafile '/u01/app/oracle/oradata/catalogdb/rman_tbs01.dbf' size 80M;
Create the recovery catalog owner:
SQL> create user rcat_owner identified by oracle default tablespace rcat_tbs temporary tablespace temp;
SQL> grant recovery_catalog_owner to rcat_owner;
SQL> grant connect,resource to rcat_owner;
SQL> alter user rcat_owner quota unlimited on rcat_tbs;

注意要到$cd $ORACLE_HOME/network/admin目录下去配置listener.ora and tnsnames.ora,否则下面的rman没有办法连接上
Create the recovery catalog:
[oracle@even admin]$ rman catalog 
rcat_owner/oracle@catalogdb                                          

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 2 15:40:16 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to recovery catalog database


在rcat_tbs表空间上创建catalog
RMAN> create catalog tablespace rcat_tbs;

recovery catalog created

RMAN> exit

注册target database to catalog database
[oracle@even ~]$ rman target  
sys/oracle@test catalog rcat_owner/oracle@catalogdb

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 2 15:50:08 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: TEST (DBID=2101363784)
connected to recovery catalog database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

同步target 信息到catalog里
[oracle@even ~]$ rman target  
sys/oracle@test catalog  rcat_owner/oracle@catalogdb

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 2 15:54:48 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: TEST (DBID=2101363784)
connected to recovery catalog database

RMAN> resync catalog;

starting full resync of recovery catalog
full resync complete


关于RMAN脚本的使用命令接口:
创建RMAN脚本
RMAN> create script bck_db_level0{
2> backup as backupset incremental level=0 format '/u03/backup/%d_%s_%p' database;
3> sql 'alter system archive log current';
4> }
修改RMAN脚本
RMAN> replace script bck_db_level0{
2> backup as backupset incremental level=0 format '/u01/backup/%d_%s_%p' database;
3> sql 'alter system archive log current';
4> }

显示RMAN脚本
RMAN> print script bck_db_level0;
printing stored script: bck_db_level0
 {backup as backupset incremental level=0 format '/u01/backup/%d_%s_%p' database;
sql 'alter system archive log current';
}

删除RMAN脚本
RMAN> delete script bck_db_level0;

执行RMAN脚本
RMAN> run {execute script bck_db_level0;}

 

二,用recovery catalog备份目标数据库的实验:
[oracle@even ~]$ rman target 
sys/oracle@test catalog rcat_owner/oracle@catalogdb                                           

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 2 16:55:27 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: TEST (DBID=2101363784)
connected to recovery catalog database

RMAN> backup as compressed backupset database plus archivelog ;


提示:
对于注册到恢复目录,是否就必须或者只能以CATALOG模式进行备份或恢复操作了呢?当然不是,恢复目录只是RMAN中的一个可选项,而不是必选项,备份信息是否记入CATALOG取决于执行RMAN操作时是否连接到了CATALOG,也就是说,即使目标数据库已经注册到恢复目录中,但连接时没有以CATALOG模式连接,则备份信息仍然是只存入目标端数据库的控制文件,相当于NOCATALOG模式。另外,已经注册到 CATALOG 中的数据库希望取消注册怎么办呢?使用U NREGISTER 命令即可:
RMAN> unregister database;

database name is "TEST" and DBID is 2101363784

Do you really want to unregister the database (enter YES or NO)? YES
database unregistered from the recovery catalog

如果DBA要管理的Oracle数据库较多,那么对于这些数据库的备份,建议使用恢复目录统一管理,这样既方便备份和恢复操作,而且安全性也相对比较高(执行完备份操作后,单独备份恢复目录数据库即可,无须担心被备份的数据库控制文件丢失可能造成的影响)。不过如果DBA仅管理一个或者数个Oracle数据库,那么我想NOCATALOG模式操作起来会更加方便。

 

三,nocatalog 和catalog还原恢复数据的异同 

注意,当使用rman nocatalog恢复时,数据库必须是处于“mount”状态的。而Oracle startup mount的前提条件是control必须存在。因此,你必须在恢复datafile之前

先恢复controlfile。 使用rman catalog方式时,可以startup nomount然后restore controlfile;但使用rman nocatalog时,必须先用文件方式恢复controlfile。
下面对比一下rman nocatalog和rman catalog的恢复时的步骤,以便建立正确的备份策略(以下的恢复都是在online状态下的备份):

rman nocatalog恢复:
1) 建立oracle运行环境(包括init或sp文件)
2) 文件方式恢复controlfile到init文件指定的位置
3) startup mount
4) rman,恢复datafile
5) alter database open resetlogs

rman catalog恢复:
1) 建立oracle运行环境(包括init或sp文件)
2) rman ,restore controfile
3) alter database mount
4) rman, restore datafile
5) alter database open resetlogs

可以看出,rman nocatalog备份时,必须用文件方式备份controlfile。


下面是我target database控制文件丢失的数据库还原,恢复的实验:
[oracle@even ~]$ rman target  
sys/oracle@test   catalog  rcat_owner/oracle@catalogdb                                            

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Jan 2 16:30:50 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: test (not mounted)
connected to recovery catalog database

RMAN> restore controlfile;

Starting restore at 2013-01-02 16:30:55
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/TEST/autobackup/2013_01_02/o1_mf_s_803664071_8g7tb83y_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/flash_recovery_area/TEST/autobackup/2013_01_02/o1_mf_s_803664071_8g7tb83y_.bkp tag=TAG20130102T160110
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output filename=/u01/app/oracle/oradata/test/control01.ctl
output filename=/u01/app/oracle/oradata/test/control02.ctl
output filename=/u01/app/oracle/oradata/test/control03.ctl
Finished restore at 2013-01-02 16:31:00

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

RMAN> restore database;

Starting restore at 2013-01-02 16:31:29
Starting implicit crosscheck backup at 2013-01-02 16:31:29
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
Crosschecked 33 objects
Finished implicit crosscheck backup at 2013-01-02 16:31:32

Starting implicit crosscheck copy at 2013-01-02 16:31:32
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2013-01-02 16:31:33

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/app/oracle/flash_recovery_area/TEST/autobackup/2013_01_02/o1_mf_s_803664071_8g7tb83y_.bkp
File Name: /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_16_8g7tdmyy_.arc
File Name: /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_17_8g7tdoyl_.arc
File Name: /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_15_8g7tdfd7_.arc

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/test/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/test/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/test/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/test/users01.dbf
restoring datafile 00005 to /u01/app/oracle/oradata/test/example01.dbf
restoring datafile 00006 to /u01/app/oracle/oradata/test/tspitr_tbs01.dbf
channel ORA_DISK_1: reading from backup piece

/u01/app/oracle/flash_recovery_area/TEST/backupset/2013_01_02/o1_mf_nnndf_TAG20130102T155829_8g7t55s5_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/flash_recovery_area/TEST/backupset/2013_01_02/o1_mf_nnndf_TAG20130102T155829_8g7t55s5_.bkp

tag=TAG20130102T155829
channel ORA_DISK_1: restore complete, elapsed time: 00:06:29
Finished restore at 2013-01-02 16:38:06

RMAN> recover database;

Starting recover at 2013-01-02 16:39:27
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 14 is already on disk as file /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_14_8g7tb1wz_.arc
archive log thread 1 sequence 15 is already on disk as file /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_15_8g7tdfd7_.arc
archive log thread 1 sequence 16 is already on disk as file /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_16_8g7tdmyy_.arc
archive log thread 1 sequence 17 is already on disk as file /u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_17_8g7tdoyl_.arc
archive log thread 1 sequence 18 is already on disk as file /u01/app/oracle/oradata/test/redo03.log
archive log filename=/u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_14_8g7tb1wz_.arc thread=1 sequence=14
archive log filename=/u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_15_8g7tdfd7_.arc thread=1 sequence=15
archive log filename=/u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_16_8g7tdmyy_.arc thread=1 sequence=16
archive log filename=/u01/app/oracle/flash_recovery_area/TEST/archivelog/2013_01_02/o1_mf_1_17_8g7tdoyl_.arc thread=1 sequence=17
archive log filename=/u01/app/oracle/oradata/test/redo03.log thread=1 sequence=18
media recovery complete, elapsed time: 00:00:02
Finished recover at 2013-01-02 16:39:34

RMAN> sql 'alter database open resetlogs';

sql statement: alter database open resetlogs
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete


到此目标数据库顺利还原恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值