从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 异地备份。
相关推荐
DN金猿1 小时前
恢复 Linux 上误删除的文件
linux·运维·服务器
倔强的石头_1 小时前
从 Oracle 到 KingbaseES:破解迁移痛点,解锁信创时代数据库新可能
数据库
踢足球09291 小时前
Redis的典型应用
数据库·redis·缓存
6***A6631 小时前
Nginx 反向代理配置
运维·nginx
hadage2332 小时前
--- redis 常见问题 ---
数据库·redis·mybatis
O***P5712 小时前
redis批量删除namespace下的数据
数据库·redis·缓存
远瞻。2 小时前
【环境配置】Ubuntu系统安装cuda
linux·运维·ubuntu
kyle~2 小时前
Linux---<unistd.h>类Unix系统编程核心头文件
linux·运维·unix
5***26222 小时前
SQL Server导出和导入可选的数据库表和数据,以sql脚本形式
数据库·sql