RMAN在RAC中默认不并行是因为通道仅连接当前实例,全部挤在同一节点导致I/O和CPU瓶颈;必须显式用CONNECT指定各通道连接不同节点的单实例别名(如racdb1、racdb2),并确保备份路径对对应节点可写且低争用。

为什么RMAN在RAC里默认不并行?
RMAN在RAC中默认只连当前实例,ALLOCATE CHANNEL开的通道全挤在同一个节点上——不是没开并行,是并行没跑在不同节点。磁盘I/O、CPU、甚至NFS锁争用都会卡死,BACKUP DATABASE跑得比单实例还慢。
怎么让每个通道真正跑在不同节点?
必须显式用CONNECT子句指定每个通道连接哪个实例,且连接串必须是tnsnames.ora里定义的**单实例别名**(如racdb1),不能用SCAN地址或/ as sysdba。
-
sys/oracle@racdb1和sys/oracle@racdb2这类连接串必须提前配好,tnsping racdb1和tnsping racdb2都要通 - 每个通道的
DEVICE TYPE DISK FORMAT路径必须指向该节点可直写、低争用的位置:本地SSD、ACFS卷,或所有节点挂载一致的NFS(验证过touch /bak/test.txt双节点都成功) - 不要把所有通道都指向同一NFS目录(比如
/nfs/backup),尤其当挂载参数没调优时,跨节点写会触发元数据锁,RMAN-03009或长时间卡在control file sequential read
示例:
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK CONNECT 'sys/oracle@racdb1';
ALLOCATE CHANNEL c2 DEVICE TYPE DISK CONNECT 'sys/oracle@racdb2';
BACKUP DATABASE PLUS ARCHIVELOG;
}
恢复时通道分配错,为什么报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客户端缓存不同步
CONFIGURE CHANNEL和ALLOCATE CHANNEL混用容易踩什么坑?
CONFIGURE CHANNEL设的是全局模板,一旦执行就覆盖之前所有同设备类型的配置;而ALLOCATE CHANNEL里的参数优先级更高,但只对本次RUN生效。
- 执行
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/bak/%U'后,再执行CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2G,前者的FORMAT会被丢弃——必须合并在一条命令里 - 如果脚本里既有
CONFIGURE又在RUN块里ALLOCATE带CONNECT,后者会完全忽略CONFIGURE里的CONNECT设置(CONFIGURE根本不支持CONNECT) - 生产脚本推荐全用
ALLOCATE CHANNEL ... CONNECT显式声明,不依赖CONFIGURE,避免跨环境配置残留干扰
CONNECT、tnsnames没配单实例别名、备份路径没验证双节点可写——这三个地方出问题,其他都白搭。


















