简介:这份文档面向需要为企业Oracle数据库搭建备份体系的DBA与运维工程师,围绕NetBackup(NBU)8.3.0.2与Oracle 11.2.0.4环境,给出从客户端代理安装到备份策略落地的完整配置参考。资源包为1个docx文档,约5.9MB,内容以图文步骤与脚本片段为主,便于对照实操。文档涵盖Oracle主机安装NBU客户端代理、获取授权token、在Master服务器创建Oracle类型策略、配置hosts与1556、13724端口通信、选择RMAN备份脚本,以及修改hot_database_backup.sh中的环境变量、通道、备份类型、标签与保留策略等关键环节,并提示热备份执行权限与脚本副本修改注意事项。已有836人学习,适合希望快速掌握NBU备份Oracle流程、减少配置踩坑的读者参考。
1. 从一次凌晨两点的恢复演练说起:NBU 8.3 备份 Oracle 11g 到底难在哪
去年冬天做恢复演练,一套 RedHat 6.8 上的 Oracle 11.2.0.4 库,NBU 8.3.0.2 的 Master 和 Media 早就跑得好好的,结果 Oracle 主机上客户端装完,策略建完,备份任务一跑就挂,报的还是那种看不出所以然的 SBT 通道错误。折腾到凌晨两点才发现,问题根本不在 RMAN 脚本,而是安装客户端时那个 token 粘贴后没回车——密码框不显示任何字符,很多人以为没输进去,又点了一次,结果 token 校验直接失败。这件事让我意识到,NBU 备份 Oracle 的坑,八成不在数据库侧,而在客户端注册和策略配置这些"看起来很简单"的环节。
这份配置文档针对的就是这个场景:Master 和 Media 已经就绪,现在要给 Oracle 主机装 agent、建 policy、改 RMAN 脚本、跑通全量和增量备份。它适合手里有 NBU 环境、需要给 Oracle 11g 上备份的 DBA 或系统管理员,也适合正在做备份方案选型、想搞清楚 NBU 对 Oracle 到底怎么接的运维。下面按实际落地顺序拆开讲,每一步都落到参数和命令上。
2. 客户端 agent 安装:token 校验、hosts 解析与端口放行
2.1 安装包选择与解压
NBU 8.3.0.2 的客户端安装包分两个:Windows 用NetBackup_8.3.0.2_CLIENTS1.tar.gz,Linux/Unix 用NetBackup_8.3.0.2_CLIENTS2.tar.gz。别下错,CLIENTS1 是 Windows 的,CLIENTS2 才是 Linux 的。下载入口在 Veritas 支持站点,选产品和版本号就能看到。
传到 Oracle 主机上之后,解压:
tar -xzf NetBackup_8.3.0.2_CLIENTS2.tar.gz cd NetBackup_8.3.0.2_CLIENTS2 ls解压后目录里会有install、NBU、packages这些。安装脚本是install,直接跑就行。注意 RedHat 6.8 的 glibc 版本比较老,如果报库依赖错误,先确认系统补丁打到最新,NBU 8.3 对 RHEL 6.x 的支持是有的,但需要基础库完整。
2.2 安装过程中的三个关键输入
运行./install之后,交互界面会依次问几个东西:
- Master Server 的 IP 或 hostname
- Media Server 的地址
- 授权 token
前两个填错还能改,token 填错就得重来。token 在 Master 服务器上找,路径是/usr/openv/netbackup/bin/admincmd/nbgetconfig -L或者直接在 Java Console 的 Host Properties 里看。找到 valid token 之后复制。
这里有个血泪经验:token 输入界面是密码框,粘贴后屏幕上什么都不显示,这是正常的。粘贴完直接回车,不要因为看不到字符就再点一次或者手动敲。我见过有人粘贴了三次,结果 token 前面带了三个不可见字符,校验直接失败。
安装完成后验证:
/usr/openv/netbackup/bin/bpclntcmd -pn这个命令会返回客户端注册到 Master 的信息,能看到 Master 主机名和客户端自己的 hostname 就说明注册成功了。如果返回空或者报错,先检查/usr/openv/netbackup/bp.conf里的 SERVER 条目是不是指向正确的 Master。
2.3 hosts 与端口:三台机器必须互相认识
文档里特别强调了一点:Oracle 主机、Master 主机、Media 主机三方的/etc/hosts都要配全,而且网络和端口必须通。这不是可选项,是硬性前提。
端口方面,NBU 默认用 1556(客户端与 Master 通信)和 13724(备份数据传输)。用telnet或nc从 Oracle 主机分别测 Master 和 Media 的这两个端口:
telnet <master_ip> 1556 telnet <media_ip> 13724如果 telnet 不通,先查防火墙。RHEL 6.8 默认的 iptables 规则可能把这两个端口挡了。临时放行:
iptables -I INPUT -p tcp --dport 1556 -j ACCEPT iptables -I INPUT -p tcp --dport 13724 -j ACCEPT service iptables savehosts 文件里三台机器的正反向解析都要能对上。常见做法是每台机器的/etc/hosts里都写上三行,IP 和 hostname 一一对应。如果 hostname 解析不一致,NBU 在建立连接时会用 hostname 去反查,查不到就超时。
提示:安装完客户端后,在 Master 上跑
bpclntcmd -hn <oracle_hostname>确认能解析到 Oracle 主机。如果这一步不通,后面 policy 里加客户端也会失败。
3. Master 上建 Policy:类型选 Oracle、存储选 Media、客户端选脚本模式
3.1 Policy 类型与存储单元
在 Master 的 Java Console 或 Web Console 里新建 Policy,几个关键项:
| 配置项 | 值 | 说明 |
|---|---|---|
| Policy type | Oracle | 必须选 Oracle,不是 Standard |
| Policy storage | 对应的 Media Server | 选实际承载备份数据的 Media |
| Policy volume pool | 按需 | 没有特殊要求就用默认池 |
| Client for use with scripts | 勾选 | 允许用 RMAN 脚本驱动备份 |
Policy type 选 Oracle 之后,NBU 会自动加载 Oracle 相关的备份选项。Storage 选错会导致备份任务分配到错误的 Media,数据写不到预期的磁带或磁盘池。
3.2 Schedule 设置:全量与增量的对应关系
Schedule 按实际需求建,但要注意 NBU 的 schedule type 和 RMAN 脚本里的NB_ORA_FULL、NB_ORA_INCR、NB_ORA_CINC环境变量是对应的:
- Automatic Full →
NB_ORA_FULL=1→ 脚本里走INCREMENTAL LEVEL=0 - Automatic Differential Incremental →
NB_ORA_INCR=1→ 脚本里走INCREMENTAL LEVEL=1 - Automatic Cumulative Incremental →
NB_ORA_CINC=1→ 脚本里走INCREMENTAL LEVEL=1 CUMULATIVE
常见做法是每周一次全量、每天一次差异增量。Schedule 的窗口期要留够,Oracle 库大的话全量可能跑几个小时,窗口太短会被 NBU 强制终止。
3.3 Clients 与 Backup Selections
Clients 里选 "client for use with scripts",然后添加 Oracle 主机的 hostname。这里填的 hostname 必须和 Oracle 主机上hostname命令的输出一致,也要和 hosts 文件里的解析一致。
Backup Selections 里填 RMAN 脚本的绝对路径。默认 sample 脚本在:
/usr/openv/netbackup/ext/db_ext/oracle/samples/rman这个目录下有hot_database_backup.sh、cold_database_backup.sh等。不要直接改 sample 文件,复制一份到别的地方再改。sample 文件在 NBU 升级时会被覆盖,改了也白改。
mkdir -p /usr/openv/netbackup/ext/db_ext/oracle/scripts cp /usr/openv/netbackup/ext/db_ext/oracle/samples/rman/hot_database_backup.sh \ /usr/openv/netbackup/ext/db_ext/oracle/scripts/hot_database_backup.sh chmod 755 /usr/openv/netbackup/ext/db_ext/oracle/scripts/hot_database_backup.shBackup Selections 里就填这个新路径。注意脚本的执行用户,NBU 默认用 root 跑,脚本内部会su - oracle切换到 Oracle 用户执行 RMAN。
注意:如果 Oracle 主机上
oracle用户的 shell 是 csh 或 tcsh,脚本里的export语法要改成setenv,否则 RMAN 执行时环境变量传不进去。
4. 改 RMAN 脚本:环境变量、SBT 库路径与通道分配
4.1 必须改的五个变量
hot_database_backup.sh里有一段 USER CUSTOMIZABLE VARIABLE SECTION,下面这几个变量必须按实际环境改:
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 ORACLE_SID=orcl1 ORACLE_USER=oracle ORACLE_TARGET_CONNECT_STR=sys/密码 RMAN_SBT_LIBRARY="/usr/openv/netbackup/bin/libobk.so64"ORACLE_HOME:Oracle 软件安装路径,11g 一般是/u01/app/oracle/product/11.2.0/db_1ORACLE_SID:目标数据库的 SID,不是服务名ORACLE_USER:执行 RMAN 的 OS 用户,通常是 oracleORACLE_TARGET_CONNECT_STR:连接串,格式是sys/密码,如果用了 TNS alias 就写sys/密码@TNS别名RMAN_SBT_LIBRARY:SBT 库路径,64 位系统用libobk.so64,32 位用libobk.so
RMAN_CATALOG默认是nocatalog,如果用了恢复目录就改成catalog <user>/<passwd>@<net_service_name>。没有恢复目录的话保持 nocatalog,但要注意控制文件的自动备份要单独做,脚本里已经包含了CURRENT CONTROLFILE的备份。
4.2 通道分配与备份格式
脚本里 RMAN 命令部分默认分配了两个 SBT_TAPE 通道:
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';两个通道意味着并行度是 2,如果 Media Server 的磁带驱动器多,可以加到 4 个通道,但不要超过实际可用的驱动器数量,否则通道会等待。备份格式串FORMAT 'bk_%s_%p_%t'里的%t是必须的,NBU 靠这个时间戳来唯一标识备份片。
归档日志备份部分:
BACKUP filesperset 20 FORMAT 'al_%s_%p_%t' ARCHIVELOG ALL DELETE INPUT;DELETE INPUT表示备份完成后删除已备份的归档日志。如果归档日志还要保留一段时间做其他用途,把DELETE INPUT去掉,改成DELETE INPUT之前先确认归档保留策略。
4.3 脚本执行逻辑与日志
脚本开头会把 stdout 和 stderr 重定向到${0}.out,也就是脚本同目录下的hot_database_backup.sh.out。每次执行前会删掉旧日志,所以只保留最后一次的。如果要做历史审计,把删日志那几行注释掉。
脚本里有一段判断 NB_ORA 环境变量的逻辑:
if [ "$NB_ORA_FULL" = "1" ]; then BACKUP_TYPE="INCREMENTAL LEVEL=0" BACKUP_TAG="${BACKUP_TAG}_inc_lvl0" elif [ "$NB_ORA_INCR" = "1" ]; then BACKUP_TYPE="INCREMENTAL LEVEL=1" BACKUP_TAG="${BACKUP_TAG}_inc_lvl1" elif [ "$NB_ORA_CINC" = "1" ]; then BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE" BACKUP_TAG="${BACKUP_TAG}_inc_lvl1_cinc" fi这段决定了从 NBU schedule 触发的备份走哪种类型。手动执行脚本时这些变量为空,会走默认的INCREMENTAL LEVEL=0,也就是全量。
RMAN_SEND部分会把NB_ORA_SERV、NB_ORA_CLIENT、NB_ORA_POLICY这些变量通过SEND命令传给 RMAN 通道,确保备份任务在 NBU 侧能正确关联到对应的 Master、客户端和 policy。如果这部分没配对,备份可能跑成功但 NBU 的 Job Monitor 里看不到关联信息。
提示:改完脚本后,先用 oracle 用户手动跑一次
./hot_database_backup.sh,确认 RMAN 能连上、SBT 通道能分配、备份能写到 Media。手动跑通了再交给 NBU schedule 触发。
5. 避坑排查:token 失败、SBT 报错、hosts 不一致与归档删除
5.1 token 校验失败,客户端注册不上
现象:安装客户端时输入 token 后提示 invalid,或者安装完成但 Master 上看不到客户端。
原因:token 粘贴时带了不可见字符,或者 token 已经过期。NBU 的 token 有有效期,默认是 24 小时,过期后需要重新生成。
解决:在 Master 上重新生成 token,用nbgetconfig或 Java Console 的 Host Properties 里的 Authorization 选项。复制时用Ctrl+Shift+C而不是鼠标选中,避免带入空格。粘贴后直接回车,不要多次粘贴。
5.2 RMAN 报 SBT 通道分配失败
现象:备份任务启动后 RMAN 报ORA-19554: error allocating device, device type: SBT_TAPE或ORA-27211: Failed to load Media Management Library。
原因:RMAN_SBT_LIBRARY路径不对,或者libobk.so64文件不存在。NBU 客户端安装后这个库应该在/usr/openv/netbackup/bin/下。
解决:确认路径和文件存在:
ls -l /usr/openv/netbackup/bin/libobk.so64如果文件不存在,说明客户端安装不完整,重新安装。如果路径对但还报错,检查 Oracle 用户是否有权限读这个库,以及LD_LIBRARY_PATH是否包含 NBU 的库路径。
5.3 hosts 解析不一致导致连接超时
现象:备份任务卡在 "connecting to client" 或者报cannot connect to client。
原因:Oracle 主机、Master、Media 三方的 hosts 文件里 hostname 和 IP 的对应关系不一致,或者某一方缺少另一方的解析记录。
解决:在三台机器上分别跑ping <hostname>和ping <ip>,确认正反向都能通。hosts 文件里每台机器的条目格式要统一,不要混用短名和 FQDN。NBU 默认用 hostname 做标识,如果 Oracle 主机的 hostname 改了但 hosts 没同步,也会出这个问题。
5.4 归档日志被删导致恢复不完整
现象:备份成功,但恢复时发现归档日志缺失,只能恢复到某个时间点之前。
原因:脚本里ARCHIVELOG ALL DELETE INPUT在备份完成后立即删除了归档日志,如果备份本身有问题(比如备份片损坏),归档日志已经没了,恢复就断了。
解决:在归档日志备份策略稳定之前,先把DELETE INPUT去掉,改成备份后保留归档。确认备份可恢复之后,再改成DELETE INPUT或者用DELETE INPUT配合归档日志的保留策略。另外,控制文件的自动备份要确保开启,nocatalog模式下控制文件备份是恢复的关键。
5.5 备份窗口不够导致任务被终止
现象:全量备份跑到一半被 NBU 强制结束,Job Monitor 里显示 status 150 或 196。
原因:Schedule 的窗口期设置太短,或者备份数据量超出预期,Media 的写入速度跟不上。
解决:先算一下全量备份的实际耗时,把 Schedule 的窗口期设成实际耗时的 1.5 倍。如果 Media 是磁带,检查驱动器数量和并行度是否匹配。磁盘池的话检查磁盘空间和写入带宽。另外,FILESPERSET 5这个参数控制每个备份集包含的数据文件数,调大可以减少备份片数量但会增加单个备份片的大小,根据实际调整。
6. 验证备份可恢复:用 RMAN 做一次异机恢复演练
备份跑通了不代表能恢复,这是两码事。我一般会在备份稳定运行一周后,做一次异机恢复演练,确认备份片真的能用。
6.1 准备恢复环境
找一台干净的 Oracle 主机,装同版本 Oracle 软件,不建库。把 NBU 客户端装好,hosts 和端口配通。在 Master 上给这台恢复机建一个临时 policy,或者直接用原来的 policy 加一个 client,但要注意不要和源库的备份任务冲突。
6.2 用 RMAN 做 restore 和 recover
在恢复机上用 oracle 用户执行:
rman target /然后:
STARTUP NOMOUNT; RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; RESTORE CONTROLFILE FROM 'cntrl_<最近一次的备份片编号>_<时间戳>'; ALTER DATABASE MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN RESETLOGS; }cntrl_开头的备份片是控制文件备份,从 NBU 的 Job Monitor 或者bpimagelist命令里找到最近一次的备份片编号。RESTORE DATABASE会从 NBU 拉取全量备份和增量备份,RECOVER DATABASE会应用归档日志。
6.3 验证数据一致性
恢复完成后,跑几个关键表的 count 和业务查询,对比源库。如果数据对不上,检查归档日志是否完整、恢复时间点是否正确。异机恢复演练不用每次都做全库,可以选一个关键 schema 做表级恢复验证。
注意:异机恢复时,恢复机的 Oracle SID 可以和源库不同,但
ORACLE_HOME路径最好一致,否则控制文件里的路径信息可能需要用SET NEWNAME重定向。
从那以后我每次配完 NBU 备份 Oracle,都会在 schedule 跑完第一次全量后强制走一遍异机恢复验证,哪怕只恢复一个表空间。备份这东西,没验证过就等于没有。希望帮到你。
本文还有配套的精品资源,点击获取