从0搭建Oracle ODA NFS异地备份:从YUM源到RMAN定时任务的全流程

一句话总结:
先把 NFS 这条"备份通道"从网络、端口、挂载一路打通,再让 RMAN 把备份流量全部导到这条通道上,最后用 cron 把这件事每天自动干。

1 规划环境和目录

  • 确定 NFS 备份服务器、各 Oracle ODA 的 IP 和角色。

  • 设计好 NFS 端目录结构(按主机/IP 分目录)和本地挂载点路径。

2 准备软件环境

  • 在 NFS 服务器上配置内网 YUM 源。

  • 安装 nfs-utilsrpcbind 等 NFS 相关组件。

  • 在各 Oracle 服务器上安装 NFS 客户端工具。

3 配置 NFS 服务端

  • 在 NFS 服务器上创建备份目录(按每台 DB 主机独立目录)。

  • /etc/exports 中导出这些目录,限制只允许对应主机访问。

  • 配置 /etc/sysconfig/nfs 固定 NFS 相关端口,方便网络侧精确放行。

  • 重启 NFS 服务并用 exportfs / rpcinfo 检查。

4 网络与防火墙开通

  • 在 NFS 服务器本机 firewalld 上放行 NFS 相关服务/端口。

  • 向网络工程师提交端口开通需求:源为各 ODA,目的为 NFS 服务器,协议 TCP/UDP,端口 111/2049/20048/20050。

5 配置 Oracle 端 NFS 挂载

  • 在每台 ODA 上创建本地挂载点目录。

  • 通过 mount -t nfs 挂载 NFS 备份目录到本地路径。

  • 验证挂载是否成功(mountdf -h)。

  • 写入 /etc/fstab,确保重启后自动挂载。

6 链路验证(写入测试)

  • oracle 用户在挂载目录里创建测试文件。

  • 回到 NFS 服务器上查看相应目录,确认文件确实写到远端磁盘。

7 编写 RMAN 备份脚本

  • 在 Oracle 服务器上编写 rman.sh,配置 ORACLE_SID、日志目录。

  • backup databasebackup archivelogFORMAT 路径指向 NFS 挂载目录。

  • 手工执行一次脚本,确认备份能正常跑、文件落到 NFS 服务器。

8 配置定时任务(自动化备份)

  • 使用 oracle 用户配置 crontab,定时调用 rman.sh

  • 保留日志输出,便于日后排查(如写到 rman.cron.log)。

9 详细参考步骤如下

复制代码
1、配置yum源
2、部署nfs服务端
3、固定端口
4、部署nfs客户端
5、开放端口
6、挂载
7、编写rman脚本
8、设置定时执行任务

# Oracle 异地备份(NFS 方式)完整实现笔记(192.168.100.10 ←→ 192.168.10.11 / 192.168.20.11)
#
# 注意:
# 1)这是【步骤笔记】,请按步骤、按块执行,不要整段当脚本一次性跑。
# 2)所有操作只在文件系统 / 网络层面,不会重启或修改 Oracle 实例本身。


# 0. 环境说明(先搞清楚谁是谁)
# NFS 备份服务器(服务端):
#   - IP:192.168.100.10
#   - OS:CentOS Linux release 7.8.2003 (Core)
#   - 大容量磁盘挂载在 /home(约 8TB,用于集中存放所有库的备份)

# Oracle 数据库服务器(NFS 客户端,当前两台,后续可扩展):
#   - ODA1:192.168.10.11   (erpcdb1 等 CDB/PDB,主库)
#   - ODA2:192.168.20.11  (另一台 ODA,类似用法)

# 目标:
#   - 在 192.168.100.10 上为每台 DB 服务器准备一个专属备份目录:
#       /home/ODACDBbackup/192.168.10.11_CDB
#       /home/ODACDBbackup/192.168.20.11_CDB
#   - 每台 DB 服务器本地挂载成:
#       /ODACDBbackup_nfs/192.168.10.11_CDB
#       /ODACDBbackup_nfs/192.168.20.11_CDB
#   - RMAN 备份写入这些挂载目录,实现异地备份。


# 1. 在 192.168.100.10 上配置内网 YUM 源(只做一次)
# 目的:使用公司内网 YUM 源(192.168.200.10)安装/更新 rpm 包。
# 只在 192.168.100.10 上执行一次,其他机器如果已有 yum 源可跳过。

ssh root@192.168.100.10

# 1.1 下载并查看内网 YUM 源配置脚本
cd /root
curl -o setup-client.sh http://192.168.200.10/setup-client.sh

# (可选)看一下脚本前几行,确认逻辑(备份旧 repo,写新 repo)
head -40 setup-client.sh

# 1.2 执行脚本,切换到内网 YUM 源
chmod +x setup-client.sh
./setup-client.sh

# 1.3 验证 YUM 源是否正常
yum repolist
yum list nfs-utils      # 确认能查询到 nfs-utils 包


# 2. 在 192.168.100.10 部署 NFS 服务端
# 目的:在备份服务器上提供用于 RMAN 备份的共享目录。

ssh root@192.168.100.10

# 2.1 安装 NFS 相关软件(如果已安装会提示已是最新版本)
yum install -y nfs-utils rpcbind

# 2.2 创建用于存放各 DB 服务器备份的目录(按 IP 分)
mkdir -p /home/ODACDBbackup/192.168.10.11_CDB
mkdir -p /home/ODACDBbackup/192.168.20.11_CDB

# 2.3 初始权限(为避免权限问题,先宽松;之后可再收紧)
chmod -R 777 /home/ODACDBbackup

# 检查目录
ls -ld /home/ODACDBbackup
ls -ld /home/ODACDBbackup/*

# 2.4 配置导出规则:限制仅对应 IP 访问
vi /etc/exports

# 文件中增加如下两行(注意用 Tab 或空格分隔):
/home/ODACDBbackup/192.168.10.11_CDB   192.168.10.11/32(rw,sync,no_root_squash,no_subtree_check)
/home/ODACDBbackup/192.168.20.11_CDB  192.168.20.11/32(rw,sync,no_root_squash,no_subtree_check)

# 参数说明(记一遍):
#   rw               读写
#   sync             同步写盘,安全性更好
#   no_root_squash   客户端 root 在服务端仍然是 root(便于备份脚本与测试)
#   no_subtree_check 简化子目录检查,常用配置

# 2.5 让 exports 配置生效,并检查
exportfs -rav         # 重新导出
exportfs -v           # 查看当前导出列表,确认两条记录存在


# 3. 在 192.168.100.10 固定 NFS 相关端口(便于防火墙精确放行)
# 目的:避免 mountd / lockd 使用随机高端口,统一使用可预期的端口号。

ssh root@192.168.100.10

# 3.1 编辑 /etc/sysconfig/nfs
vi /etc/sysconfig/nfs

# 在文件末尾追加如下配置(若已有类似配置则修改为这些端口):
# 固定 NFSv3 / 锁相关端口,便于防火墙精确放通
MOUNTD_PORT=20048
LOCKD_TCPPORT=20050
LOCKD_UDPPORT=20050
# 如后续启用 statd,可再按需配置 STATD_PORT=20049 等

# 3.2 重启相关服务,使端口配置生效
systemctl restart nfs-config
# rpc-statd 如报错,可暂时忽略(当前场景不强依赖)
systemctl restart nfs-server

# 3.3 确认端口绑定情况
rpcinfo -p localhost | egrep 'nfs|mountd|nlockmgr'

# 期望看到(端口号与服务对应):
#   mountd   → 20048/tcp、20048/udp
#   nfs      → 2049/tcp、2049/udp
#   nlockmgr → 20050/tcp、20050/udp


# 4. 在各 Oracle 服务器上部署 NFS 客户端(192.168.10.11 / 192.168.20.11)
# 目的:让每台 Oracle 服务器可以挂载 NFS 共享目录。
# 注意:以下在每一台 DB 服务器上都要做一次(IP 替换为本机)。

# 4.1 ODA1(192.168.10.11)
ssh root@192.168.10.11

# 4.1.1 确认已安装 nfs-utils(若不存在再 yum 安装)
rpm -qa | grep nfs-utils
# 如无输出可执行:
# yum install -y nfs-utils

# 4.1.2 创建本地挂载点目录(空目录即可)
mkdir -p /ODACDBbackup_nfs/192.168.10.11_CDB
ls -ld /ODACDBbackup_nfs/192.168.10.11_CDB

# 4.2 ODA2(192.168.20.11)
ssh root@192.168.20.11

# 同样确认 nfs-utils
rpm -qa | grep nfs-utils
# 如无则安装:
# yum install -y nfs-utils

# 创建本地挂载点
mkdir -p /ODACDBbackup_nfs/192.168.20.11_CDB
ls -ld /ODACDBbackup_nfs/192.168.20.11_CDB


# 5. 开放端口(Linux 防火墙 + 网络防火墙)
# 分两块:
#   A. NFS 服务器本机 firewalld(192.168.100.10)
#   B. 核心网络防火墙 / 安全设备(由网络工程师按你提供的表单配置)

# 5.A 在 192.168.100.10 上放通 firewalld 服务
ssh root@192.168.100.10

# 查看 firewalld 状态
firewall-cmd --state
# running 表示开启中

# 放行 nfs / mountd / rpc-bind 服务(包含 TCP/UDP 各自端口)
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind

# 重载配置
firewall-cmd --reload

# 验证已放行的服务
firewall-cmd --list-services
# 期望包含:dhcpv6-client mountd nfs rpc-bind ssh

# 5.B 提供给网络工程师的开孔信息(写在表格/邮件里)
# 源地址(ODA 服务器):
#   192.168.10.11
#   192.168.20.11
#
# 目的地址(NFS 备份服务器):
#   192.168.100.10
#
# 协议:
#   TCP、UDP
#
# 放通端口:
#   111, 2049, 20048, 20050
#
# 作用说明(开通原因):
#   NFSv3/NFSv4 备份目录挂载(Oracle RMAN 异地备份使用)。
#   以上端口已在 NFS 服务器 /etc/sysconfig/nfs 中固定,仅用于 ODA 数据库异地备份访问。


# 6. 在各 Oracle 服务器上挂载 NFS 备份目录
# 目的:将 192.168.100.10 上的备份目录挂载为本地路径,为 RMAN 提供目标路径。
# 注意:挂载操作只影响文件系统挂载,不会影响 Oracle 实例本身。

# 6.1 ODA1(192.168.10.11)挂载
ssh root@192.168.10.11

# 6.1.1 验证到 NFS 服务器的 RPC/NFS 是否可达
rpcinfo -t 192.168.100.10 nfs     # 期望输出 "ready and waiting"
rpcinfo -p 192.168.100.10         # 能看到 portmapper/mountd/nfs/nlockmgr 等

# 6.1.2 执行挂载(使用默认 NFS v4,也可强制 vers=3)
mount -t nfs 192.168.100.10:/home/ODACDBbackup/192.168.10.11_CDB   /ODACDBbackup_nfs/192.168.10.11_CDB

# 如果想强制 NFSv3,可用下面这一种(根据实际情况二选一):
# mount -t nfs -o vers=3,tcp 192.168.100.10:/home/ODACDBbackup/192.168.10.11_CDB #   /ODACDBbackup_nfs/192.168.10.11_CDB

# 6.1.3 检查挂载结果(只读操作)
mount | grep ODACDBbackup_nfs
df -h /ODACDBbackup_nfs/192.168.10.11_CDB

# 6.2 ODA2(192.168.20.11)挂载
ssh root@192.168.20.11

# 同样验证 RPC/NFS 是否可达
rpcinfo -t 192.168.100.10 nfs
rpcinfo -p 192.168.100.10

# 挂载
mount -t nfs 192.168.100.10:/home/ODACDBbackup/192.168.20.11_CDB   /ODACDBbackup_nfs/192.168.20.11_CDB

# 检查挂载状态
mount | grep ODACDBbackup_nfs
df -h /ODACDBbackup_nfs/192.168.20.11_CDB


# 7. 挂载验证:用 oracle 用户实际写入测试 + 在 192.168.100.10 上确认
# 目的:确保 oracle 用户可以写入,并且数据确实落在 192.168.100.10 的磁盘上。
# 这一步只创建普通测试文件,不会对数据库造成任何影响。

# 7.1 在 ODA1(192.168.10.11)上用 oracle 用户写入测试文件
ssh root@192.168.10.11

su - oracle

cd /ODACDBbackup_nfs/192.168.10.11_CDB
pwd     # 确认当前目录是挂载目录

# 创建测试文件(普通文本)
touch test_from_192.168.10.11.txt
echo "test from 192.168.10.11 at $(date)" > test_from_192.168.10.11.txt

# 查看文件
ls -l

# 7.2 在 ODA2(192.168.20.11)上用 oracle 用户写入测试文件
ssh root@192.168.20.11

su - oracle

cd /ODACDBbackup_nfs/192.168.20.11_CDB
pwd     # 确认路径正确

touch test_from_192.168.20.11.txt
echo "test from 192.168.20.11 at $(date)" > test_from_192.168.20.11.txt

ls -l

# 7.3 在 NFS 服务器(192.168.100.10)上确认测试文件已经落盘
ssh root@192.168.100.10

# 查看两个目录下内容
ls -l /home/ODACDBbackup/192.168.10.11_CDB
ls -l /home/ODACDBbackup/192.168.20.11_CDB

# 期望能看到:
#   test_from_192.168.10.11.txt
#   test_from_192.168.20.11.txt


# 至此,可以确认:
#   - NFS 服务端配置 OK
#   - 端口已放通,客户端可访问
#   - 两台 ODA 已成功挂载异地备份目录
#   - oracle 用户可以写入,数据真实落在 192.168.100.10 的磁盘上
#
# 后续只需要在 RMAN 脚本中,将备份 FORMAT 路径指向:
#   - /ODACDBbackup_nfs/192.168.10.11_CDB
#   - /ODACDBbackup_nfs/192.168.20.11_CDB
# 即可实现 Oracle RMAN 异地备份。
相关推荐
麦聪聊数据10 分钟前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务11 分钟前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Fcy64829 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满31 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio1 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice1 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey9031 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七2 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习