Chinaunix首页 | 论坛 | 博客
  • 博客访问: 572148
  • 博文数量: 107
  • 博客积分: 4406
  • 博客等级: 上校
  • 技术积分: 1279
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-07 16:20
文章分类

全部博文(107)

文章存档

2014年(4)

2012年(4)

2011年(16)

2010年(7)

2009年(7)

2008年(11)

2007年(49)

2006年(9)

分类: Oracle

2007-12-06 14:25:15

RAC环境数据库的备份
    RAC环境的备份、恢复和普通数据库的备份、恢复是有一些区别的
    这个区别主要体现在RAC环境的特殊性上。
根据Oracle的RAC环境的不同,RMAN备份、恢复操作也是不同的。如果RAC环境是建立在CLUSTER文件系统上的,
或者是建立在ASM上的,那么备份和恢复过程可能会很简单,基本上和普通的数据库环境没有太多的区别。
如果RAC环境是建立在裸设备上的,由于归档日志无法存储在裸设备上,那么归档日志文件必须放在多个节点的本地硬盘上,
这时备份和恢复就变得和普通的数据库环境有所差异。
这里先讨论一下ASM环境上建立的RAC数据库的备份。如果将归档日志放在ASM上,那么两个节点都是可以备份的,
这个时候,备份和普通的单实例数据库没有差别。
SQL> SHOW PARAMETER LOG_ARCHIVE_DEST_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=+DISK/testrac/
log_archive_dest_10 string
$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期三 4月 25 17:23:01 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> configure channel device type disk format '/data1/backup/%U';

使用目标数据库控制文件替代恢复目录旧的 RMAN 配置参数:

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data/backup/testrac/%U';
新的 RMAN 配置参数:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data1/backup/%U';
已成功存储新的 RMAN 配置参数
RMAN> backup database plus archivelog delete all input;
数据库的恢复也很简单,
开始还原和恢复:
$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期四 4月 26 11:21:29 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

已连接到目标数据库 (未启动)
RMAN> startup mount

Oracle 实例已启动数据库已装载

对于建立在裸设备上的RAC环境,由于归档不能存放到裸设备上,因此,所有的归档都必须保存在本地的磁盘上。
直接通过RMAN备份会导致错误。
首先模仿裸设备的情况,修改原来LOG_ARCHIVE_DEST_1的配置,将每个实例的归档改在本地硬盘:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog'
SID = 'testrac1';

系统已更改。

系统已更改。
然后尝试直接备份数据库:
$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期五 5月 11 16:06:48 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U';
4> backup database plus archivelog delete all input;
5> }
 
 
使用目标数据库控制文件替代恢复目录分配的通道: c1通道 c1: sid=301 实例=testrac1 devtype=DISK
启动 backup 于 11-5月 -07当前日志已存档释放的通道: c1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup plus archivelog 命令 (在 05/11/2007 16:08:09 上) 失败
RMAN-06059: 没有找到预期的归档日志, 归档日志的丢失将影响可恢复性
ORA-19625: 识别文件/data1/archivelog/2_89_618591128.dbf时出错
ORA-27037: 无法获得文件状态
SVR4 Error: 2: No such file or directory
Additional information: 3
RMAN>
由于节点1上无法访问到节点2上的归档,所以出现了上面的错误。对于这种情况,可以使用带CONNECT语句的ALLOCATE来分配CHANNEL:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
connect ;
5> backup database plus archivelog delete all input;
6> }
RMAN>
采用这种方法后可以成功的备份。

基于裸设备的RAC环境下的恢复。
   
首先备份并删除上次全备份以来的归档日志,然后准备开始恢复:

RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
   connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
   connect ;
5> backup archivelog all delete all input;
6> }
在恢复之前,需要将数据库关闭,通过rman启动实例并准备恢复:
$ srvctl stop db -d testrac
下面准备通过RMAN进行数据库的恢复。由于RAC的备份是同时备份到两个节点的本地硬盘上,因此恢复的时候也应该两个节点同时进行RESTORE操作。
可以在两个节点上分别启动RMAN,将数据库处于STARTUP MOUNT状态,然后就可以在任意一个节点上执行RESTORE操作:
$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期一 5月 14 13:46:25 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

已连接到目标数据库 (未启动)
RMAN> startup mount

Oracle 实例已启动数据库已装载
系统全局区域总计 2147483648 字节
Fixed Size 2031480 字节
Variable Size 335544456 字节
Database Buffers 1795162112 字节
Redo Buffers 14745600 字节

RMAN> exit

恢复管理器完成。
另一个节点:

$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期一 5月 14 13:46:41 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.

已连接到目标数据库 (未启动)
RMAN> startup mount

Oracle 实例已启动数据库已装载
系统全局区域总计 2147483648 字节
Fixed Size 2031480 字节
Variable Size 335544456 字节
Database Buffers 1795162112 字节
Redo Buffers 14745600 字节
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
   connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
   connect ;
5> restore database;
6> }
如果只启动了RAC的一个节点,则会导致RMAN出现下面的错误:
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 05/11/2007 17:55:17 上) 失败
RMAN-06026: 有些目标没有找到 - 终止恢复
RMAN-06100: 没有通道来恢复数据文件14的备份或是副本
RMAN-06100: 没有通道来恢复数据文件13的备份或是副本
RMAN-06100: 没有通道来恢复数据文件11的备份或是副本
RMAN-06100: 没有通道来恢复数据文件7的备份或是副本
RMAN-06100: 没有通道来恢复数据文件4的备份或是副本
RMAN-06100: 没有通道来恢复数据文件3的备份或是副本
RMAN-06100: 没有通道来恢复数据文件2的备份或是副本
下面恢复归档日志:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
   connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
   connect ;
5> restore (archivelog sequence between 179 and 183 thread 1)
6> (archivelog sequence between 99 and 103 thread 2);
7> }
现在面临一个问题,对于还原(RESTORE)操作,可以两个实例同时进行,但是对于恢复(RECOVER)操作,只能一个实例完成。
这就要求一个实例必须能同时看到两个实例的归档日志。可以通过nfs mount等方式来实现,
这里采用最简单的方法,将节点2上的归档拷贝到节点1的归档目录下。
RMAN> host 'rcp 172.25.198.223:/data1/archivelog/* /data1/archivelog'
2> ;
主机命令完成
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
   connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
   connect ;
5> recover database;
6> }
如果没有将归档日志文件拷贝到恢复节点上,则会出现下面的错误:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U'
   connect ;
4> allocate channel c2 device type disk format '/data1/backup/%U'
   connect ;
5> recover database;
6> }

分配的通道: c1通道 c1: sid=313 实例=testrac1 devtype=DISK
分配的通道: c2通道 c2: sid=316 实例=testrac2 devtype=DISK
启动 recover 于 14-5月 -07
正在开始介质的恢复
存档日志线程 1 序列 179 已作为文件 /data1/archivelog/1_179_618591128.dbf
存在于磁盘上存档日志线程 1 序列 180 已作为文件 /data1/archivelog/1_180_618591128.dbf
存在于磁盘上存档日志线程 1 序列 181 已作为文件 /data1/archivelog/1_181_618591128.dbf
存在于磁盘上存档日志线程 1 序列 182 已作为文件 /data1/archivelog/1_182_618591128.dbf
存在于磁盘上存档日志线程 1 序列 183 已作为文件 /data1/archivelog/1_183_618591128.dbf
存在于磁盘上存档日志文件名 =/data1/archivelog/1_179_618591128.dbf
 线程 =1 序列 =179通道 c2: 正在启动到默认目标的存档日志恢复通道 c2: 正在恢复存档日志存档日志线程 =2
 序列=99通道 c2: 正在恢复存档日志存档日志线程 =2 序列=100通道 c2: 正在读取备份段 /data1/backup/2pihmq8b_1_1通道 c2:
 已恢复备份段 1段句柄 = /data1/backup/2pihmq8b_1_1 标记 = TAG20070514T112919通道 c2:
 恢复完成, 用时: 00:00:25故障转移到上一个备份存档日志文件名 =/data1/archivelog/2_99_618591128.dbf
 线程 =2 序列 =99释放的通道: c1释放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 05/14/2007 15:01:38 上) 失败
RMAN-11003: 在分析/执行 SQL 语句期间失败: alter database recover logfile '/data1/archivelog/2_99_618591128.dbf'
ORA-00308: 无法打开归档日志 '/data1/archivelog/2_99_618591128.dbf'
ORA-27037: 无法获得文件状态
SVR4 Error: 2: No such file or directory
Additional information: 3
1
阅读(1886) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~