[转帖]通过修改CATALOG记录的方式实现备份集目录变更_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3743 | 回复: 0   主题: [转帖]通过修改CATALOG记录的方式实现备份集目录变更        下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2011-9-21 7:43:22 | [全部帖] [楼主帖] 楼主

今天第一次体会到了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)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论