ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN备份之备份多个备份集到带库(二)

RMAN备份之备份多个备份集到带库(二)

原创 Linux操作系统 作者:yangtingkun 时间:2007-07-20 00:00:00 0 删除 编辑

使用RMAN备份到带库时,同时备份多个备份集,需要注意一些问题。

RMAN备份之备份多个备份集到带库(一):http://yangtingkun.itpub.net/post/468/309044


上一篇文章简单介绍了如何才能在磁带上备份多个备份集,这里要说明一下采用这种方法可能遇到的问题。

首先如果要备份多个备份集的话,要求磁带库必须要用多个驱动器。这时由于多个备份集需要同时进行写操作。

这个测试环境中的带库是PX502,有两个驱动器,也就是说,最多支持COPIES = 2。不过这里还隐藏着一个比较严重的问题。

上面的备份都是针对一个对象进行的。虽然分配了两个CHANNEL,但是只有一个CHANNEL执行备份操作(另一个CHANNEL空闲,但是由于设置了BACKUP COPIES 2,因此另一个CHANNEL用来进行第二个备份集的生成)。

但是如果备份的目标超过一个,这时Oracle的RMAN会自动将其分配到两个CHANNEL上去,而且由于设置了BACKUP COPIES 2,每个备份集都有备份在两个CHANNEL上,因此,实际上后台存在4个任务,且每个备份和它的备份COPY必须同时进行,而系统只有两个驱动器,这就造成了两个驱动器都在等待它的COPIES准备就绪,从而整个备份陷入死锁状态。

如果已经造成了死锁,可以通过下面的方法来完成备份。通过图形化界面,找到正在备份的JOB,杀掉其中一个,使得一个CHANNEL的备份出现失败,从而使另一个CHANNEL的备份可以获取资源。

由于设置了两个CHANNEL,一个CHANNEL的备份失败后,会在另一个CHANNEL上进行重试,这样,就改变了4个备份任务的实现顺序,使得两个备份都可以和它的COPIES同时进行:

RMAN> run
2> {
3> set backup copies 2;
4> allocate channel c1 device type sbt;
5> allocate channel c2 device type sbt;
6> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
7> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
8> backup tablespace users, ndindex;
9> }

正在执行命令: SET BACKUP COPIES

分配的通道: c1
通道 c1: sid=287 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 实例=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

向通道发命令: c1
向通道发命令: c2

向通道发命令: c1
向通道发命令: c2

启动 backup 于 14-6月 -07
通道 c1: 启动全部数据文件备份集
通道 c1: 正在指定备份集中的数据文件
输入数据文件 fno=00010 name=+DISK/testrac/datafile/ndindex01.dbf
通道 c1: 正在启动段 1 于 14-6月 -07
通道 c2: 启动全部数据文件备份集
通道 c2: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c2: 正在启动段 1 于 14-6月 -07
通道 c1: 已完成段 1 于 14-6月 -07, 有 2 个副本和标记 TAG20070614T163039
段 handle=i0ik93hf_1_1 comment=API Version 2.0,MMS Version 5.0.0.0
段 handle=i0ik93hf_1_2 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 备份集已完成, 经过时间:00:14:56
MAN-03009: backup 命令 (c2 通道上, 在 06/14/2007 16:46:00 上) 失败
ORA-27192: skgfcls: sbtclose2 返回错误 - 无法关闭文件
ORA-19511: 从介质管理器层接收到错误, 错误文本为:
Failed to process backup file
ORA-19502: 文件 "i1ik93hf_1_1", 块编号 1 写错误 (块大小 = 512)
ORA-27030: skgfwrt: sbtwrite2 返回错误
ORA-19511: 从介质管理器层接收到错误, 错误文本为:
VxBSASendData: Failed with error:
Server Status: Communication with the server has not been iniatated or the server status has not been retrieved from the server.
通道 c2 已禁用, 将在另一个通道上运行该通道上失败的作业
通道 c1: 启动全部数据文件备份集
通道 c1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c1: 正在启动段 1 于 14-6月 -07
通道 c1: 已完成段 1 于 14-6月 -07, 有 2 个副本和标记 TAG20070614T163039
段 handle=i2ik94e8_1_1 comment=API Version 2.0,MMS Version 5.0.0.0
段 handle=i2ik94e8_1_2 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 备份集已完成, 经过时间:00:02:15
完成 backup 于 14-6月 -07
释放的通道: c1
释放的通道: c2

但是这样的备份需要人为的干预,这种方式对于自动备份是不可行的。而且,关闭CHANNEL的JOB任务时,应该等待JOB运行到WRITING状态,过早的关闭会造成类型下面的错误:

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> set backup copies 2;
6> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
7> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
8> backup archivelog all;
9> }

分配的通道: c1
通道 c1: sid=308 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 实例=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

正在执行命令: SET BACKUP COPIES

向通道发命令: c1
向通道发命令: c2

向通道发命令: c1
向通道发命令: c2

启动 backup 于 14-6月 -07
当前日志已存档
通道 c1: 正在启动存档日志备份集
通道 c1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =336 记录 ID=869 时间戳=625248441
通道 c1: 正在启动段 1 于 14-6月 -07
通道 c2: 正在启动存档日志备份集
通道 c2: 正在指定备份集中的存档日志
输入存档日志线程 =2 序列 =251 记录 ID=868 时间戳=625248441
通道 c2: 正在启动段 1 于 14-6月 -07
MAN-03009: backup 命令 (c2 通道上, 在 06/14/2007 16:08:38 上) 失败
ORA-00447: 后台进程出现致命错误
继续执行其它作业步骤, 将不重新运行失败的作业
MAN-03009: backup 命令 (c1 通道上, 在 06/14/2007 16:10:23 上) 失败
ORA-19506: 无法创建顺序文件, 名称 = "hqik925q_1_2", 参数 = ""
ORA-27028: skgfqcre: sbtbackup 返回错误
ORA-19511: 从介质管理器层接收到错误, 错误文本为:
No policy or schedule name is explicitly specified for copy number <2>.
通道 c1 已禁用, 将在另一个通道上运行该通道上失败的作业
通道 c2: 正在启动存档日志备份集
通道 c2: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =336 记录 ID=869 时间戳=625248441
通道 c2: 正在启动段 1 于 14-6月 -07
释放的通道: c1
释放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c2 通道上, 在 06/14/2007 16:10:27 上) 失败
ORA-19506: 无法创建顺序文件, 名称 = "hsik92bf_1_2", 参数 = ""
ORA-27028: skgfqcre: sbtbackup 返回错误
ORA-19511: 从介质管理器层接收到错误, 错误文本为:
No policy or schedule name is explicitly specified for copy number <2>.

上面就是过早的关闭了备份的JOB,造成了一个CHANNEL出现了问题,随后的分配CHANNEL操作都会造成下面的问题,直到RMAN退出并重新登陆:

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> set backup copies 2;
6> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
7> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
8> backup tablespace users;
9> }

分配的通道: c1
通道 c1: sid=308 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

释放的通道: c1
释放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: allocate 命令 (c2 通道上, 在 06/14/2007 16:13:28 上) 失败
ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> }

分配的通道: c1
通道 c1: sid=308 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

释放的通道: c1
释放的通道: c2
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: allocate 命令 (c2 通道上, 在 06/14/2007 16:14:30 上) 失败
ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误

RMAN> exit


恢复管理器完成。
$ rman target /

恢复管理器: Release 10.2.0.3.0 - Production on 星期四 6月 14 16:15:02 2007

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

连接到目标数据库: TESTRAC (DBID=4291216984)

RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> }

使用目标数据库控制文件替代恢复目录
分配的通道: c1
通道 c1: sid=287 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 实例=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)
释放的通道: c1
释放的通道: c2

那么有没有一个比较简单的方法来解决上面的死锁问题呢,其实这个方法也很简单,只有人为的指定CHANNEL去进行备份就可以了。

RMAN> run
2> {
3> set backup copies 2;
4> allocate channel c1 device type sbt;
5> allocate channel c2 device type sbt;
6> send 'NB_ORA_CLIENT=backup,CPF1_POLICY=testoracle,CPF1_SCHED=Default-Application-Backup';
7> send 'NB_ORA_CLIENT=backup,CPF2_POLICY=testoracle,CPF2_SCHED=test_multi_copy';
8> backup channel c1 tablespace users, ndindex;
9> }

正在执行命令: SET BACKUP COPIES

分配的通道: c1
通道 c1: sid=287 实例=testrac2 devtype=SBT_TAPE
通道c1: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

分配的通道: c2
通道 c2: sid=285 实例=testrac2 devtype=SBT_TAPE
通道c2: VERITAS NetBackup for Oracle - Release 6.0 (2006110304)

向通道发命令: c1
向通道发命令: c2

向通道发命令: c1
向通道发命令: c2

启动 backup 于 14-6月 -07
通道 c1: 启动全部数据文件备份集
通道 c1: 正在指定备份集中的数据文件
输入数据文件 fno=00010 name=+DISK/testrac/datafile/ndindex01.dbf
输入数据文件 fno=00005 name=+DISK/testrac/datafile/users.267.618591279
通道 c1: 正在启动段 1 于 14-6月 -07
通道 c1: 已完成段 1 于 14-6月 -07, 有 2 个副本和标记 TAG20070614T170141
段 handle=i3ik95bm_1_1 comment=API Version 2.0,MMS Version 5.0.0.0
段 handle=i3ik95bm_1_2 comment=API Version 2.0,MMS Version 5.0.0.0
通道 c1: 备份集已完成, 经过时间:00:08:55
完成 backup 于 14-6月 -07
释放的通道: c1
释放的通道: c2

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69356/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10503333