Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2880451
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2009-12-25 16:00:05

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


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

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

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

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

最后尝试了一下能否通过修改CATALOG记录的方式,可以骗过OracleRMAN,使得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,或者删除修改的备份集,避免不一致给系统带来损害。

阅读(1715) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~