catalog move.php,通过修改CATALOG记录的方式实现备份集目录变更

今天第一次体会到了CATALOG的好处,不过这种用法肯定是文档所不推荐的。

碰到了一个难以解决的问题,是在进行DUPLICATE命令的时候碰到的。

源数据库RAC环境采用裸设备方式,将备份集放到一个节点的本地磁盘上,但是目标数据库使用了ASM,且本地磁盘没有足够的空间,因此将远端的备份级拷贝到了ASM磁盘组中,但是目前的问题是,DUPLICATE命令会根据源数据库备份集的位置读取本地的备份级。

在本地服务器上通过ln的方式对ASM磁盘组中的文件是无效的,Oracle尝试读取时仍然会报错。

而通过在源数据库上CATALOG备份集的新位置也是不可行的,因为源数据库上面没有启动ASM实例,而且也没有空间来新配置一个ASM实例,并将备份集拷贝进去。

最后尝试了一下能否通过修改CATALOG记录的方式,可以骗过Oracle的RMAN,使得RMAN可以在辅助实例上根据ASM上面的路径读取备份集。

于是本地尝试一下这种方式是否可行:

E:>rman target / catalog cata_log/cata_log

恢复管理器: Release 10.2.0.1.0 - Production on星期一9月8 17:22:17 2008

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

连接到目标数据库: YTK102 (DBID=3695768905)连接到恢复目录数据库

RMAN> backup tablespace users;

启动backup于08-9月-08正在启动全部恢复目录的resync完成全部resync分配的通道: ORA_DISK_1通道ORA_DISK_1: sid=132 devtype=DISK通道ORA_DISK_1:启动全部数据文件备份集通道ORA_DISK_1:正在指定备份集中的数据文件输入数据文件fno=00004 name=E:ORACLEORADATAYTK102USERS01.DBF通道ORA_DISK_1:正在启动段1于08-9月-08通道ORA_DISK_1:已完成段1于08-9月-08段句柄=E:ORACLEBACKUPYTK102DJQ3EN2_1_1标记=TAG20080908T172241注释=NONE通道ORA_DISK_1:备份集已完成,经过时间:00:00:01完成backup于08-9月-08

利用一个现有的CATALOG进行尝试,首先备份USERS表空间,下面将备份级的位置进行转移:

RMAN> HOST;

Microsoft Windows XP [版本5.1.2600]

(C)版权所有1985-2001 Microsoft Corp.

E:>MOVE E:ORACLEBACKUPYTK102DJQ3EN2_1_1 E:ORACLEBACKUPDJQ3EN2_1_1

E:>EXIT主机命令完成

RMAN>

下面登陆到CATALOG用户下,修改刚才这个备份的HANDLE:

SQL> conn cata_log/cata_log已连接。SQL> COL HANDLE FORMAT A50

SQL> SELECT BP_KEY, HANDLE FROM RC_BACKUP_PIECE;

BP_KEY HANDLE

---------- ----------------------------------------------

587 E:ORACLEBACKUPBJMSAHJ_1_1

588 E:ORACLEBACKUPYTK102CJMSB39_1_1

608 E:ORACLEBACKUPYTK102DJQ3EN2_1_1

下面修改刚刚备份的这个文件的HANDLE,指向新的文件位置:

SQL> UPDATE RC_BACKUP_PIECE SET HANDLE='E:ORACLEBACKUPDJQ3EN2_1_1' WHERE BP_KEY = 608;

已更新1行。

SQL> COMMIT;

提交完成。

下面将表空间置为OFFLINE,并删除需要恢复数据文件:

SQL> CONN YANGTK/YANGTK已连接。

SQL> ALTER TABLESPACE USERS OFFLINE;

表空间已更改。

SQL> HOST DEL E:ORACLEORADATAYTK102USERS01.DBF

然后尝试恢复:

RMAN> RESTORE TABLESPACE USERS;

启动restore于08-9月-08使用通道ORA_DISK_1

通道ORA_DISK_1:正在开始恢复数据文件备份集通道ORA_DISK_1:正在指定从备份集恢复的数据文件正将数据文件00004恢复到E:ORACLEORADATAYTK102USERS01.DBF通道ORA_DISK_1:正在读取备份段E:ORACLEBACKUPDJQ3EN2_1_1通道ORA_DISK_1:已恢复备份段1段句柄= E:ORACLEBACKUPDJQ3EN2_1_1标记= TAG20080908T172241通道ORA_DISK_1:恢复完成,用时: 00:00:02完成restore于08-9月-08

可以看到,备份已经从指定的位置进行了恢复。所以这种方式来解决前面提到的问题是可行的,利用这种方式,CATALOG方式的备份和恢复将变得更加灵活。

不过需要注意一点,目前修改的只是CATALOG数据库中的记录,而控制文件中备份的位置并没有发生变化。

SQL> SELECT HANDLE FROM V$BACKUP_PIECE

2 WHERE START_TIME > SYSDATE - 1/24;

HANDLE

--------------------------------------------

E:ORACLEBACKUPYTK102DJQ3EN2_1_1

建议利用这种方法之后,应该尽快进行恢复,比如将备份级放回原始位置,并修改RC_BACKPU_PIECE,或者删除修改的备份集,避免不一致给系统带来损害。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值