RMAN在RAC中备份速度慢因通道默认集中于单节点,须显式用CONNECT指定各节点实例、挂载本地/低争用存储,并统一归档路径至共享存储,恢复时通道分配须与备份严格对应。
RMAN 备份时只连一个节点,备份速度上不去
rac 环境下用 rman 默认只连接到当前登录的实例,allocate channel 开的通道全挤在同一个节点上,磁盘 i/o 和 cpu 都成瓶颈。并行备份不是靠多开几个 backup 命令,而是让每个通道真正跑在不同节点上。
实操要点:
- 必须用
CONNECT TARGET显式指定每个通道连接哪个实例,格式是sys/oracle@racdb1(其中racdb1是tnsnames.ora里定义的单实例别名) - 不能依赖
ORACLE_SID或本地连接,RAC 下/ as sysdba会随机落到某个节点,不可控 - 每个通道的
DEVICE TYPE DISK路径最好挂载在对应节点本地或共享但低争用的存储(比如 ACFS),避免跨节点写同一 NFS 目录引发锁等待 - 示例:
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 或卡住
恢复阶段如果没按备份时的通道逻辑对齐节点,RMAN 可能反复尝试从错误节点读取备份片,尤其当备份片存放在某节点本地路径时,其他节点根本访问不到——这时不是权限问题,是路径不存在。
常见错误现象:
-
ORA-19566: exceeded limit of 0 corrupt blocks for file ...(其实是找不到文件,误报校验失败) RMAN-03002: failure during compilation of command ... RMAN-06023: no backup or copy of datafile ... found to restore- 恢复命令长时间无响应,
V$SESSION_LONGOPS显示大量 “control file sequential read”
解决办法:
- 恢复前先用
CATALOG START WITH把所有备份片注册进控制文件,并确认LIST BACKUP输出中每个备份集的DEVICE TYPE和HANDLE路径可被对应节点访问 - 恢复时显式指定通道连接,和备份时一一对应:比如备份用了
racdb1和racdb2,恢复也得用这两个 - 若备份片存在共享目录(如 +FRA 或 NFS),仍建议恢复时也分配到同节点通道,减少跨节点文件系统元数据竞争
tnsnames.ora 里没配单实例连接串,RMAN 直接报 ORA-12154
RMAN 的 CONNECT 子句不接受 service_name 形式的 SCAN 地址,必须是能路由到具体实例的连接描述符。很多 DBA 只配了 racdb_scan,忘了补上 racdb1、racdb2 这类静态实例别名。
检查与修复步骤:
- 确认
$ORACLE_HOME/network/admin/tnsnames.ora中存在类似以下条目:racdb1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb) (INSTANCE_NAME = racdb1)) ) -
INSTANCE_NAME必须和v$instance.instance_name完全一致,大小写敏感 - 测试连通性不要只用
sqlplus,要用rman TARGET sys/oracle@racdb1实际验证 - 如果使用 Oracle 19c+ 的统一目录(Recovery Catalog),确保 catalog 数据库能解析这些 TNS 别名(即 tnsnames.ora 要放在 catalog 所在服务器上)
ARCHIVELOG 备份没同步归档路径,导致恢复失败
RAC 每个节点独立生成归档日志,默认路径在各自本地 $ORACLE_BASE/fast_recovery_area 下。如果只配置了节点1的归档路径为共享位置,节点2还在写本地目录,备份脚本又只连节点1,那节点2的归档就漏了。
关键判断点:
- 查
SELECT DEST_NAME, STATUS, DESTINATION FROM V$ARCHIVE_DEST WHERE DESTINATION IS NOT NULL;,确认所有ENABLED的归档目标是否都指向共享存储(如 +FRA、NFS、ASM diskgroup) - 归档路径不一致时,
BACKUP ARCHIVELOG ALL只扫当前连接实例能看到的归档,不会自动跨节点收集 - 安全做法是:所有节点归档统一设为 ASM(如
+FRA/racdb/archivelog),或者用LOG_ARCHIVE_DEST_n配置多个远程归档(需启用LOG_ARCHIVE_DEST_STATE_n=ENABLE) - 若已存在本地归档,备份前先用
ALTER SYSTEM ARCHIVE LOG CURRENT在每个节点手动归档一次,再连各节点分别BACKUP ARCHIVELOG FROM TIME '...'










