参考文档:
https://blogs.oracle.com/Database4CN/entry/%E4%BD%BF%E7%94%A8rman%E5%A4%87%E4%BB%BDrac%E6%9C%AC%E5%9C%B0%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84archive_log%E7%9A%84%E7%AC%AC%E4%BA%8C%E7%A7%8D%E6%96%B9%E6%A1%88
有一部分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;
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;
}
通过以上实验,我们可以看出来,只要开启到RAC所有节点的channel,在做所有归档备份的时候,oracle会自动将本地归档目录中的archive log分配给本地的channel。这样既可以将备份的负载分配到所有的节点中,又可以避免使用NFS方式在单节点备份的网络传输问题。
但是sys的密码是明文的......