从0到可落地:Oracle RMAN异地NFS备份标准脚本(多实例通用)

知识点小结:

  1. 备份路径不要写死 IP

备份目录建议用逻辑名字(如 `backup_server01_CDB`),真实 IP 只出现在 `/etc/fstab` 或挂载命令里,方便迁移与脱敏。

  1. RMAN 备份内容要齐全

一套标准备份至少包含:`database`、`archivelog`、`controlfile`、`spfile`,缺一项,恢复时就可能掉坑。

  1. 多通道备份要结合磁盘性能

`allocate channel c1~c4` 能提高备份速度,但通道越多越吃 IO/CPU,需要根据实际磁盘能力调优。

  1. 保留策略要写死在脚本里

例如统一用 "恢复窗口 7 天",`archivelog` 和 `backup` 的清理条件保持一致,避免库里堆积一堆历史垃圾备份。

  1. 和系统层配合好 NFS

RMAN 只是往文件系统写文件,异地能力全靠 NFS 挂载和网络链路,挂载稳定性、权限与监控同样关键。

  1. 脚本只是开始,恢复演练才是终点

有了备份脚本,至少做一次从这套备份里恢复测试(最好在测试环境),验证能不能完整拉起库。

bash 复制代码
#!/bin/bash
# Oracle RMAN 本地→NFS 全库+归档+控制文件+spfile 备份脚本示例
# 使用前请根据自己环境修改:ORACLE_SID、备份路径、保留天数等

# 加载 Oracle 环境变量(ORACLE_HOME/ORACLE_SID 等)
. ~/.bash_profile

# 统一日期格式,方便 RMAN 日志和备份文件命名
export NLS_DATE_FORMAT='YYYYMMDDHH24MISS'

################################################################################
# 挂载到本机的 NFS 备份目录(示例)
# 说明:
#   1)假设已在操作系统层面完成 NFS 挂载,例如:
#      mount -t nfs backup-server:/backup/oracle /ODACDBbackup_nfs
#   2)下面的 "backup_server01_CDB" 只是一个标识,不是 IP,
#      可以改成公司内部约定的备份服务器名称或代号。
################################################################################
BACKUP_NFS_BASE="/ODACDBbackup_nfs/backup_server01_CDB/rman"

################################################################################
# 一、MES CDB 实例备份(请按实际实例名修改 ORACLE_SID)
################################################################################
export ORACLE_SID=mescdb1    # MES 库实例名,按自己环境修改

rman target / >> /home/oracle/rman/log/mescdb_$(date +"%Y%m%d").log << EOF
run{
        # 分配多个磁盘通道,提高备份并行度(可根据服务器 IO、CPU 能力调整通道数量)
        allocate channel c1 device type disk;
        allocate channel c2 device type disk;
        allocate channel c3 device type disk;
        allocate channel c4 device type disk;

        # 校验备份片状态,清理失效的备份记录
        crosscheck backup;
        crosscheck archivelog all;
        delete noprompt expired backup;

        # 切换一次联机日志,确保当前 redo 也能进入归档并被本次备份覆盖
        sql 'alter system switch logfile';

        # 1)备份数据库数据文件(全库)
        backup database
          format '${BACKUP_NFS_BASE}/mes_%d_%T_%U';

        # 2)备份所有归档日志
        backup archivelog all
          format '${BACKUP_NFS_BASE}/mes_%T_%s_%U';

        # 3)备份当前控制文件
        backup current controlfile
          format '${BACKUP_NFS_BASE}/mescntrl_%T_%p_%s_%U';

        # 4)备份 spfile 参数文件
        backup spfile
          format '${BACKUP_NFS_BASE}/messp_%d_%U_%T.sp';

        # 5)清理 7 天前的归档和备份(保留策略,可按需调整)
        delete noprompt archivelog until time 'sysdate-7';
        delete noprompt backup of database completed before 'sysdate - 7';
        delete noprompt backup of archivelog until time 'sysdate - 7';
        delete noprompt obsolete recovery window of 7 days;

        # 释放通道
        release channel c1;
        release channel c2;
        release channel c3;
        release channel c4;
}
exit;
EOF

################################################################################
# 二、UTF8 CDB 实例备份(第二个实例示例,按需保留或删除)
################################################################################
export ORACLE_SID=UTF8CDB1   # 另一个 CDB 实例名,根据实际环境修改

rman target / >> /home/oracle/rman/log/u8db_$(date +"%Y%m%d").log << EOF
run{
        # 同样分配 4 个磁盘通道
        allocate channel c1 device type disk;
        allocate channel c2 device type disk;
        allocate channel c3 device type disk;
        allocate channel c4 device type disk;

        crosscheck backup;
        crosscheck archivelog all;
        delete noprompt expired backup;

        sql 'alter system switch logfile';

        # 全库备份
        backup database
          format '${BACKUP_NFS_BASE}/u8_%d_%T_%U';

        # 归档日志备份
        backup archivelog all
          format '${BACKUP_NFS_BASE}/u8_%T_%s_%U';

        # 控制文件备份
        backup current controlfile
          format '${BACKUP_NFS_BASE}/u8cntrl_%T_%p_%s_%U';

        # spfile 备份
        backup spfile
          format '${BACKUP_NFS_BASE}/u8sp_%d_%U_%T.sp';

        # 同样保留 7 天的恢复窗口
        delete noprompt archivelog until time 'sysdate-7';
        delete noprompt backup of database completed before 'sysdate - 7';
        delete noprompt backup of archivelog until time 'sysdate - 7';
        delete noprompt obsolete recovery window of 7 days;

        release channel c1;
        release channel c2;
        release channel c3;
        release channel c4;
}
exit;
EOF
相关推荐
大树884 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush44 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5205 小时前
Linux 11 动态监控指令top
linux
Inhand陈工5 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
麦聪聊数据6 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
不会C语言的男孩6 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_6 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化