有一部分RAC环境中的log_archive_dest_n设置到了本地的磁盘上,这在正常使用中并没有什么问题。而在备份的时候如果只从一个instance的channel发起的话,由于只能访问本节点的本地目录,所以在备份其他节点的archive log的时候会出现错误。而很多情况下,客户会使用NFS的方式,把本地节点的归档目录mount到其他的节点。这样配置,一个节点就可以访问所有其他节点的archive log了。但是此种方法也有一个问题:就是在某节点备份archive log的时候,如果备份的是其他节点生成archive log的时候,由于是通过NFS mount过来的目录,所以归档日志需要通过网络传输到本地然后再备份到磁带上。这样一来,增加的节点间文件传输既造成了对网络的影响,其本身的效率也受到网络带宽以及性能的制约。所以以下介绍一种通过每个节点开启通道,让每个节点的通道备份本节点archive log的方式(不使用NFS):

1. 在归档目录设置到本地的RAC中,检查现有的archive log

SQL> select name from v$archived_log;

NAME
——————————————————————————–

NAME
——————————————————————————–

/home/oracle/arch2/2_53_827893172.dbf
/home/oracle/arch2/2_54_827893172.dbf
/home/oracle/arch2/2_55_827893172.dbf
/home/oracle/arch1/1_122_827893172.dbf
/home/oracle/arch1/1_123_827893172.dbf
/home/oracle/arch1/1_124_827893172.dbf
/home/oracle/arch1/1_125_827893172.dbf
/home/oracle/arch1/1_126_827893172.dbf

NAME
——————————————————————————–
/home/oracle/arch2/2_56_827893172.dbf
/home/oracle/arch1/1_127_827893172.dbf
/home/oracle/arch2/2_57_827893172.dbf
/home/oracle/arch2/2_58_827893172.dbf
/home/oracle/arch2/2_59_827893172.dbf
/home/oracle/arch1/1_128_827893172.dbf

28 rows selected.


2. 尝试使用默认的本地channel去备份所有的归档:

RMAN> backup archivelog all;

Starting backup at 12-MAY-16
current log archived
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=60 instance=ora11g1 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 05/12/2016 09:40:46
RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
ORA-19625: error identifying file /home/oracle/arch2/2_53_827893172.dbf <<<<<< 找不到节点2的archive log
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

3. 分别启动本地以及另外一个instance的两个channel,然后备份所有的归档(这里面有一个可能的问题,就是oracle在把归档日志分配到channel的时候,会不会出现本地arhive log分到其他节点instance channel的疑问, 但是通过实验,oracle显然可以避免类似问题的发生):

RMAN> run {
allocate channel ‘dev_0’ type disk connect /;
allocate channel ‘dev_1’ type disk connect sys/oracle@ora11g_11;  <<<<<<此channel连接到节点2的instance上。
backup archivelog all;
release channel dev_0;
release channel dev_1;
}
2> 3> 4> 5> 6> 7>
released channel: ORA_DISK_1
allocated channel: dev_0
channel dev_0: SID=60 instance=ora11g1 device type=DISK

allocated channel: dev_1
channel dev_1: SID=32 instance=ora11g2 device type=DISK

Starting backup at 12-MAY-16
current log archived
channel dev_1: starting archived log backup set
channel dev_1: specifying archived log(s) in backup set
input archived log thread=2 sequence=53 RECID=21 STAMP=881588641
channel dev_1: starting piece 1 at 05-JUN-15
channel dev_0: starting archived log backup set
channel dev_0: specifying archived log(s) in backup set
input archived log thread=1 sequence=122 RECID=24 STAMP=911640813
channel dev_0: starting piece 1 at 12-MAY-16
channel dev_0: finished piece 1 at 12-MAY-16
piece handle=+DATA/ora11g/backupset/2016_05_12/annnf0_tag20160512t093710_0.261.911641035 tag=TAG20160512T093710 comment=NONE
channel dev_0: backup set complete, elapsed time: 00:00:03
channel dev_1: finished piece 1 at 05-JUN-15
piece handle=+DATA/ora11g/backupset/2015_06_05/annnf0_tag20160512t093710_0.262.911617575 tag=TAG20160512T093710 comment=NONE
channel dev_1: backup set complete, elapsed time: 00:00:04
channel dev_1: starting archived log backup set
channel dev_1: specifying archived log(s) in backup set
input archived log thread=2 sequence=54 RECID=22 STAMP=881588646
input archived log thread=2 sequence=55 RECID=23 STAMP=881588647
input archived log thread=2 sequence=56 RECID=29 STAMP=881588655
channel dev_1: starting piece 1 at 05-JUN-15
channel dev_0: starting archived log backup set
channel dev_0: specifying archived log(s) in backup set
input archived log thread=1 sequence=123 RECID=25 STAMP=911640816
input archived log thread=1 sequence=124 RECID=26 STAMP=911640816
input archived log thread=1 sequence=125 RECID=27 STAMP=911640817
input archived log thread=1 sequence=126 RECID=28 STAMP=911640818
input archived log thread=1 sequence=127 RECID=30 STAMP=911640818
channel dev_0: starting piece 1 at 12-MAY-16
channel dev_0: finished piece 1 at 12-MAY-16
piece handle=+DATA/ora11g/backupset/2016_05_12/annnf0_tag20160512t093710_0.259.911641039 tag=TAG20160512T093710 comment=NONE
channel dev_0: backup set complete, elapsed time: 00:00:02
channel dev_1: finished piece 1 at 05-JUN-15
piece handle=+DATA/ora11g/backupset/2015_06_05/annnf0_tag20160512t093710_0.260.911617565 tag=TAG20160512T093710 comment=NONE
channel dev_1: backup set complete, elapsed time: 00:00:03
channel dev_1: starting archived log backup set
channel dev_1: specifying archived log(s) in backup set
input archived log thread=2 sequence=57 RECID=31 STAMP=881588658
channel dev_1: starting piece 1 at 05-JUN-15
channel dev_0: starting archived log backup set
channel dev_0: specifying archived log(s) in backup set
input archived log thread=1 sequence=128 RECID=34 STAMP=911640825
channel dev_0: starting piece 1 at 12-MAY-16
channel dev_0: finished piece 1 at 12-MAY-16
piece handle=+DATA/ora11g/backupset/2016_05_12/annnf0_tag20160512t093710_0.257.911641041 tag=TAG20160512T093710 comment=NONE
channel dev_0: backup set complete, elapsed time: 00:00:02
channel dev_1: finished piece 1 at 05-JUN-15
piece handle=+DATA/ora11g/backupset/2015_06_05/annnf0_tag20160512t093710_0.258.911614343 tag=TAG20160512T093710 comment=NONE
channel dev_1: backup set complete, elapsed time: 00:00:02
channel dev_1: starting archived log backup set
channel dev_1: specifying archived log(s) in backup set
input archived log thread=2 sequence=58 RECID=32 STAMP=881588659
input archived log thread=2 sequence=59 RECID=33 STAMP=881588660
input archived log thread=2 sequence=60 RECID=36 STAMP=881588866
channel dev_1: starting piece 1 at 05-JUN-15
channel dev_0: starting archived log backup set
channel dev_0: specifying archived log(s) in backup set
input archived log thread=1 sequence=129 RECID=35 STAMP=911641027
channel dev_0: starting piece 1 at 12-MAY-16
channel dev_0: finished piece 1 at 12-MAY-16
piece handle=+DATA/ora11g/backupset/2016_05_12/annnf0_tag20160512t093710_0.263.911641045 tag=TAG20160512T093710 comment=NONE
channel dev_0: backup set complete, elapsed time: 00:00:01
channel dev_1: finished piece 1 at 05-JUN-15
piece handle=+DATA/ora11g/backupset/2015_06_05/annnf0_tag20160512t093710_0.256.911613925 tag=TAG20160512T093710 comment=NONE
channel dev_1: backup set complete, elapsed time: 00:00:02
Finished backup at 12-MAY-16

released channel: dev_0

released channel: dev_1


通过以上实验,我们可以看出来,只要开启到RAC所有节点的channel,在做所有归档备份的时候,oracle会自动将本地归档目录中的archive log分配给本地的channel。这样既可以将备份的负载分配到所有的节点中,又可以避免使用NFS方式在单节点备份的网络传输问题。