rman在rac中默认只连接当前实例,导致所有通道挤在同一节点,引发i/o、cpu及控制文件争用;必须显式用connect子句绑定tnsnames.ora中定义的单实例别名(如racdb1),并确保format路径对该节点可写且共享一致。

为什么RMAN在RAC里通道全挤在一个节点上
RMAN默认只连当前实例,ALLOCATE CHANNEL开的通道不会自动跨节点——不是没并行,是并行没跑对地方。所有通道都压在同一个RAC节点上,I/O、CPU、控制文件争用全爆发,BACKUP DATABASE可能比单实例还慢。
怎么让每个通道真正落到不同节点
必须显式用CONNECT子句绑定具体实例,且连接串必须是tnsnames.ora里定义的**单实例别名**(如racdb1、racdb2),不能用SCAN地址或/ as sysdba:
-
tnsping racdb1和tnsping racdb2都得通,否则ALLOCATE CHANNEL ... CONNECT 'sys/oracle@racdb1'直接报ORA-12514 - 每个通道的
FORMAT路径必须对该节点可直写:本地SSD、ACFS卷,或所有节点挂载一致的NFS(验证过touch /bak/test.txt双节点都成功) - 绝对不要把所有通道都指向同一NFS目录(如
/nfs/backup)——跨节点写会触发元数据锁,卡在control file sequential read或报RMAN-03009
恢复时通道分配错,为什么报ORA-19566
ORA-19566常被当成“备份片损坏”,实际多是路径不可达:备份时c1写在racdb1本地路径/u02/backup,恢复时c1却连到racdb2,根本找不到文件——RMAN报校验失败,本质是file not found。
- 恢复前先执行
CATALOG START WITH '/shared/backup/path',确保控制文件知道所有备份片位置 - 恢复命令里
ALLOCATE CHANNEL的CONNECT必须和备份时严格一一对应:备份用了racdb1/racdb2,恢复也得用这两个 - 哪怕备份片存共享存储(如
+FRA或NFS),仍建议恢复通道也分配到原备份节点,避免ASM diskgroup mount状态不一致或NFS客户端缓存不同步
节点故障后RMAN还能不能自动继续备份
不能。RAC下RMAN默认不自动跨节点执行备份,节点挂了就中断——这不是bug,是配置缺失导致的单点依赖。
- 删掉脚本里所有带
CONNECT参数的ALLOCATE CHANNEL语句;改用统一SCAN服务名连接:rman target sys/oracle@oradb(其中oradb是TNS中定义的SCAN VIP服务名) - 确保
tnsnames.ora里该服务名指向SCAN监听器,并启用FAILOVER=ON和LOAD_BALANCE=ON - 备份路径必须共享:所有节点挂载同一NFS(如
192.168.0.111:/data → /bak),且FORMAT显式写死共享路径,例如FORMAT '/bak/rman/df_%U',别信默认'%U'——它会落到$ORACLE_HOME/dbs,那是本地目录











