简介:本资源是一份面向DBA、Oracle运维工程师及高可用数据库架构学习者的实战型部署指南,聚焦RHEL 7.6平台下Oracle 19c基于ASM存储的Data Guard物理备库全流程搭建。内容覆盖硬件与系统环境校验、GI与数据库软件安装、ASM磁盘组初始化、主备节点网络配置、监听与TNS服务设置、Data Guard参数调优及Switchover/Failover验证等关键环节,提供可复用的目录规划(如/app/grid、/app/oracle)、权限配置命令(如chmod 644 /etc/sysconfig/network)及典型错误规避提示。资源为单个PDF文件,共1个文件,大小4.68MB,结构清晰、步骤详实,含大量终端输出截图与配置命令示例,便于边学边练。目前已有707人学习下载,适合具备Linux基础与Oracle入门经验的技术人员快速掌握企业级容灾架构落地能力。
1. RHEL 7.6 上跑 Oracle 19c + ASM + DataGuard:不是“能装就行”,而是“装完就稳、切不丢数、查不出错”
你手头有一套 RHEL 7.6 的两节点环境,4 核 20G 内存,200G 存储,目标是搭一套生产级可用的 Oracle 19c 主备集群——不是单实例加个归档,而是真刀真枪用 ASM 管理共享磁盘、用 DataGuard 实现物理备库自动同步、故障时秒级切换。但现实很骨感:GI 安装卡在“找不到 ASM 磁盘”、gridSetup.sh图形界面黑屏、asmcmd lsdg显示ORA-15032: not all alterations performed、主库切日志后备库MRP0进程始终APPLYING_LOG却不推进……这些不是玄学,是 RHEL 7.6 对 Oracle 19c 的内核参数容忍度、udev 绑定规则写法、libstdc++版本冲突、甚至DISPLAY环境变量漏配导致的连锁翻车。本指南不讲“点击下一步”,只拆解RHEL 7.6 下 Oracle 19c ASM DataGuard 全链路落地的 5 个硬核断点:从scsi_id输出校验到crsctl check cluster -all全通,从DGMGRL验证SUCCESS到SELECT APPLIED_SCN, RECOVERED_SCN FROM V$DATAGUARD_STATS差值 < 1000。适合正在搭建灾备环境、被 Oracle 官方文档绕晕、或刚在测试环境里DROP DATABASE后发现备库没跟上的 DBA 和系统工程师。
2. 系统层硬准备:RHEL 7.6 的 7 项不可妥协配置
Oracle 19c 在 RHEL 7.6 上不是“向下兼容”,而是“向上强求”。官方文档写的“最低要求”是保底线,真实生产环境必须按 20G 内存、20G SWAP、4 核 CPU 的规格反向锁死所有 OS 层参数。这里不讲理论,只列实操中每一条都亲手验证过、少一条就装不下去的配置项。
2.1 内核参数:shmall和shmmax的数值陷阱
Oracle 19c GI 要求共享内存段(SHM)能容纳整个 ASM 实例+数据库实例的 SGA。RHEL 7.6 默认kernel.shmmax = 68719476736(64GB),看似够用,但shmall(页数)若未同步放大,会导致ORA-27123: unable to attach to shared memory segment。关键不是“设大”,而是页大小与字节换算必须精确:
# 查看当前页大小(RHEL 7.6 默认 4KB) getconf PAGESIZE # 输出:4096 # 计算 shmall:shmmax / pagesize # 文档给的 shmmax=12640516096 字节 → 12640516096 / 4096 = 3086064(取整) # 但实测中,必须再上浮 5%,否则 GI 安装时 crsctl start res 报 ORA-27303 echo "kernel.shmall = 3240367" >> /etc/sysctl.conf echo "kernel.shmmax = 12640516096" >> /etc/sysctl.conf提示:
shmall必须是整数,且shmall * 4096 >= shmmax。用sysctl -p加载后,务必执行ipcs -lm验证max total shared memory是否等于shmall * 4096。若显示0,说明sysctl.conf语法错误(如空格、中文符号)。
2.2 用户与组:10 个组名不能靠“复制粘贴”,必须groupadd -g强制指定 GID
Oracle 19c GI 要求asmadmin/asmdba/asmoper等组 GID 严格匹配文档值(54321~54330)。RHEL 7.6 若用groupadd asmdba不带-g,系统会分配下一个空闲 GID(如 1001),导致gridSetup.sh检测失败并报PRVG-11331 : Group 'asmdba' does not exist with required GID。必须逐条执行:
# 严格按顺序创建,GID 一个都不能错 /usr/sbin/groupadd -g 54321 asmadmin /usr/sbin/groupadd -g 54322 asmdba /usr/sbin/groupadd -g 54323 asmoper /usr/sbin/groupadd -g 54324 dba /usr/sbin/groupadd -g 54325 oper /usr/sbin/groupadd -g 54326 oinstall /usr/sbin/groupadd -g 54327 backupdba /usr/sbin/groupadd -g 54328 dgdba /usr/sbin/groupadd -g 54329 kmdba /usr/sbin/groupadd -g 54330 racdba # 创建用户时,UID 也必须锁定(-u 54321),且主组为 oinstall,附加组全列 /usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle /usr/sbin/useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba grid注意:
useradd命令中-G后的组名顺序无关,但必须全部列出,缺一个(如漏dgdba)会导致 DataGuard Broker 启动失败。
2.3 软件包依赖:compat-libstdc++-33的 i686/x86_64 双架构强制安装
RHEL 7.6 ISO 镜像中compat-libstdc++-33包缺失是高频坑。yum install compat-libstdc++-33会报No package compat-libstdc++-33 available。必须手动下载两个 RPM 并强制安装:
# 下载地址(需替换为实际镜像源) # compat-libstdc++-33-3.2.3-72.el7.i686.rpm # compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm # 安装命令(--force --nodeps 是必须的,否则报依赖冲突) rpm -ivh --force --nodeps compat-libstdc++-33-3.2.3-72.el7.i686.rpm rpm -ivh --force --nodeps compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm # 验证是否生效 strings /usr/lib64/libstdc++.so.6 | grep GLIBCPP # 正常应输出 GLIBCPP_3.2、GLIBCPP_3.2.1 等提示:
--nodeps不是偷懒,是 Oracle 19c 安装程序硬依赖libstdc++-33的 ABI 符号,而 RHEL 7.6 自带libstdc++-48不提供这些旧符号。不装这个包,gridSetup.sh启动时直接 Segmentation fault。
2.4 Shell 限制:limits.conf中memlock的单位是 KB,不是字节
/etc/security/limits.conf中memlock值若写成3145728(字节),实际是 3MB,远低于 Oracle 要求的 3GB。必须确认单位:
# 正确写法:3145728 KB = 3GB grid soft memlock 3145728 grid hard memlock 3145728 oracle soft memlock 3145728 oracle hard memlock 3145728 # 验证方法(切换到 grid 用户后执行) ulimit -l # 输出应为 3145728注意:
ulimit -l输出单位是 KB,不是字节。若输出unlimited,说明pam_limits.so未生效,检查/etc/pam.d/login是否有session required pam_limits.so。
2.5 时间同步:禁用 chronyd 后必须手动校准,ctss 不是“自动兜底”
Oracle 19c GI 要求集群节点时间差 < 1 秒。RHEL 7.6 默认启用chronyd,但gridSetup.sh会检测并报PRVG-11367 : NTP daemon running。停掉chronyd后,ctss(Cluster Time Synchronization Service)不会自动启动,必须手动校准:
# 停 chronyd(两节点都执行) systemctl stop chronyd systemctl disable chronyd mv /etc/chrony.conf /etc/chrony.conf_bak # 手动校准(以 node2 为基准,node2dg 同步它) # node2 执行: date -s "2024-06-15 10:00:00" # node2dg 执行(用 rdate,非 ntpdate,因 ntpdate 已废弃): rdate -s 10.6.0.139 # 验证(两节点同时执行) date; echo "----"; ntpstat # ntpstat 应输出 "unsynchronised"提示:
ctss服务在 GI 安装完成后才由crsctl自动管理。安装前的时间差必须人工控死,否则gridSetup.sh在“Perform Prerequisites”阶段直接失败。
2.6 网络配置:NOZEROCONF=yes是防止虚拟网卡干扰的“保险丝”
RHEL 7.6 的 NetworkManager 会自动生成169.254.0.0/16链路本地地址,Oracle GI 的 SCAN VIP 和 VIP 会与之冲突,导致crsctl check cluster报CRS-4638: Oracle High Availability Services is online但CRS-4537: Cluster Ready Services is online为 false。必须关闭 zeroconf:
# 编辑网络配置 echo "NOZEROCONF = yes" >> /etc/sysconfig/network # 重启网络(或 reboot) systemctl restart network注意:此操作需在安装 GI 前完成。若已安装失败,需先
crsctl stop crs,再改配置,再crsctl start crs。
2.7 文件系统规划:/app分区必须独立,且挂载选项含noatime,nobarrier
ASM 磁盘组性能直接受底层文件系统影响。/app(存放 ORACLE_BASE、GRID_HOME)若与/合并在同一 LVM 逻辑卷,IO 争抢会导致asmcmd响应迟缓。且默认挂载选项relatime会频繁更新访问时间戳,拖慢 ASM 元数据读写:
# 查看当前挂载选项 mount | grep "/app" # 若输出不含 noatime,nobarrier,则需重新挂载 # 临时挂载(验证用) mount -o remount,noatime,nobarrier /app # 永久生效:编辑 /etc/fstab # 将原行(如)/dev/mapper/ora-app /app xfs defaults 0 0 # 改为:/dev/mapper/ora-app /app xfs defaults,noatime,nobarrier 0 0提示:
nobarrier对 XFS 文件系统安全,可提升 ASM 日志写入性能。noatime避免touch类操作触发元数据更新。
3. ASM 磁盘绑定:scsi_id输出校验与 udev 规则的 4 个致命细节
ASM 磁盘识别失败是 GI 安装第一道鬼门关。/dev/sdc这种设备名在重启后会漂移,必须用scsi_id输出的 WWID 绑定到固定/dev/asmdisk01。但scsi_id命令本身就有坑,udev规则写错一个字符,/dev/asmdisk01就永远不出现。
3.1scsi_id命令:必须加-g -u -d三参数,否则输出为空
RHEL 7.6 的scsi_id默认不输出 WWID。常见错误是只执行/usr/lib/udev/scsi_id -g /dev/sdc,结果返回空。正确命令:
# 必须三个参数:-g(格式化输出)、-u(使用 UUID)、-d(指定设备) /usr/lib/udev/scsi_id -g -u -d /dev/sdc # 正常输出:36000c291ca220c52c813c595ffdf14f4 # 验证所有磁盘(4 块 ASM 盘) for i in sdc sdd sde sdf; do echo "$i:"; /usr/lib/udev/scsi_id -g -u -d /dev/$i; done注意:
-d /dev/sdc的/dev/不能省略,否则报Failed to open device。
3.2 udev 规则:PROGRAM中路径必须用绝对路径,RESULT必须与scsi_id输出完全一致
/etc/udev/rules.d/99-my-asmdevices.rules中,PROGRAM调用的scsi_id必须写全路径/usr/lib/udev/scsi_id,且RESULT的值要一字不差复制scsi_id输出(包括开头的36和结尾的4):
# 错误写法(路径错、RESULT 少字符) PROGRAM=="/sbin/scsi_id -g -u -d $devnode", RESULT=="36000c291ca220c52c813c595ffdf14f" # 正确写法(路径全、RESULT 全) KERNEL=="sd*[!0-9]", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", \ PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", \ RESULT=="36000c291ca220c52c813c595ffdf14f4", \ RUN+="/bin/sh -c 'mknod /dev/asmdisk01 b $major $minor; chown grid:asmadmin /dev/asmdisk01; chmod 0660 /dev/asmdisk01'"提示:
KERNEL=="sd*[!0-9]"匹配sdc而非sdc1,避免分区被误绑。\是续行符,提高可读性。
3.3 udev 规则加载:udevadm trigger后必须udevadm settle等待完成
udevadm trigger发送事件后,规则执行是异步的。若立即执行ls -l /dev/asmdisk*,可能看到No such file。必须等待 udev 完成:
# 触发并等待(-t 30 表示最长等 30 秒) /sbin/udevadm trigger --type=devices --action=change /sbin/udevadm settle -t 30 # 验证(grid 用户执行) ls -l /dev/asmdisk* # 应输出:brw-rw----. 1 grid asmadmin 8, 32 Jun 15 10:00 /dev/asmdisk01注意:
udevadm settle是阻塞命令,返回即表示完成。不加此步,后续gridSetup.sh扫描磁盘时会找不到/dev/asmdisk01。
3.4 权限固化:chown后必须chmod 0660,且asmadmin组必须包含grid
udev 规则中的chown grid:asmadmin只在设备创建时生效。若grid用户不在asmadmin组,asmcmd会报ORA-15032: not all alterations performed。必须双重确认:
# 检查 grid 用户组成员 id grid # 输出必须含:groups=... 54321(asmadmin) ... # 检查磁盘权限 ls -l /dev/asmdisk01 # 应为:brw-rw----. 1 grid asmadmin ... # 若权限不对,手动修复(临时) sudo chown grid:asmadmin /dev/asmdisk01 sudo chmod 0660 /dev/asmdisk01提示:
0660是硬性要求,0640或0600会导致 ASM 实例无法读取磁盘头。
4. GI 与 DB 安装避坑:图形界面、静默安装、环境变量的 5 条血泪经验
gridSetup.sh和runInstaller的图形界面在 RHEL 7.6 上极易崩溃。很多教程说“配好 DISPLAY 就行”,但实际要解决 Java AWT、X11 转发、字体缺失三重问题。这里不讲“怎么开图形”,只列5 条装过 12 次后总结的必做动作。
4.1DISPLAY配置:export DISPLAY=:0是最大误区,必须用10.6.0.243:10.0
RHEL 7.6 默认不启动 X Server,DISPLAY=:0指向本地,但gridSetup.sh运行在远程 SSH 会话中,需 X11 转发。正确做法:
# 在客户端(如 Windows 的 Xshell)开启 X11 转发 # 在服务器端(node2/node2dg)执行: xhost +local: export DISPLAY=localhost:10.0 # 或更稳妥:export DISPLAY=10.6.0.243:10.0 (10.6.0.243 是客户端 IP) # 验证(grid 用户执行) xclock # 若弹出时钟窗口,说明 DISPLAY 正确注意:
xhost +local:开放本地连接,生产环境可改为xhost +si:localuser:grid。
4.2 字体缺失:libXrender和libXfont必须同时安装
gridSetup.sh启动时若报java.lang.InternalError: java.lang.NullPointerException,90% 是字体问题。yum install libXrender不够,必须补libXfont:
yum install libXrender libXfont # 验证 fc-list | head -5 # 应输出字体列表,如 /usr/share/fonts/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book提示:
fc-list命令若报command not found,先yum install fontconfig。
4.3 静默安装:responseFile中oracle.install.asm.OSDBA_GROUP必须填asmdba,不能填dba
gridSetup.sh -silent -responseFile是规避图形界面的正解,但响应文件中oracle.install.asm.OSDBA_GROUP=asmdba是硬编码要求。填dba会导致 ASM 实例无法启动:
# 正确的 responseFile 片段(grid.rsp) oracle.install.asm.OSDBA_GROUP=asmdba oracle.install.asm.OSOPER_GROUP=asmoper oracle.install.asm.OSASM_GROUP=asmadmin注意:
OSASM_GROUP是asmadmin,不是oinstall。填错则crsctl start res ora.asm报ORA-15077: could not locate ASM instance serving a required diskgroup。
4.4 环境变量:.bash_profile中ORACLE_SID必须与gridSetup.sh选的“Standalone Server”模式匹配
gridSetup.sh选 “Standalone Server” 时,ASM 实例 SID 固定为+ASM。若.bash_profile中ORACLE_SID=+ASM但未export,或export在PATH设置之后,sqlplus / as sysasm会连到空实例:
# grid 用户的 .bash_profile 必须包含(且 export 在最前) export ORACLE_SID=+ASM export ORACLE_BASE=/app/grid export ORACLE_HOME=/app/product/19.2.0/crs export PATH=$ORACLE_HOME/bin:$PATH提示:
source ~/.bash_profile后,执行echo $ORACLE_SID确认输出+ASM。
4.5 GI 安装后验证:crsctl check cluster -all成功 ≠ ASM 可用,必须asmcmd lsdg
crsctl check cluster -all返回CRS-4537和CRS-4529为online,只说明 CRS 进程正常。真正验证 ASM 是否就绪,必须用asmcmd:
# grid 用户执行 export ORACLE_HOME=/app/product/19.2.0/crs export PATH=$ORACLE_HOME/bin:$PATH asmcmd ASMCMD> lsdg # 正常输出: # State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name # MOUNTED NORMAL N 512 4096 4194304 40960 38912 20480 19456 0 Y DATA/ # 若报 ORA-15032/ORA-15040,说明磁盘组未挂载,需检查 udev 绑定和权限注意:
lsdg输出中State必须为MOUNTED,Voting_files=Y表示该磁盘组含投票盘(对 Standalone Server 模式非必须,但gridSetup.sh默认创建)。
5. DataGuard 配置与验证:从DGMGRL到V$DATAGUARD_STATS的闭环检查
DataGuard 不是“配完log_archive_dest_2就完事”。主库切日志、备库MRP0进程启动、DGMGRL SHOW CONFIGURATION显示SUCCESS,这三步只是起点。真正的闭环是V$DATAGUARD_STATS中APPLIED_SCN与RECOVERED_SCN差值 < 1000,且V$ARCHIVED_LOG中APPLIED='YES'的日志连续。
5.1 主库归档配置:log_archive_dest_2的SYNC/ASYNC选择与VALID_FOR约束
RHEL 7.6 网络延迟通常 < 1ms,SYNC模式可保障零数据丢失。但VALID_FOR参数若写错,会导致归档失败:
-- 主库(node2)执行 ALTER SYSTEM SET log_archive_dest_2='SERVICE=node2dg SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=nodetwodg' SCOPE=BOTH; -- 关键点: -- 1. SERVICE=node2dg 必须与 tnsnames.ora 中的服务名一致 -- 2. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 表示“仅主库在线日志归档时启用” -- 3. DB_UNIQUE_NAME=nodetwodg 必须与备库 init.ora 中的 db_unique_name 一致提示:
SYNC模式下,主库COMMIT会等待备库写入 standby redo log 后才返回,确保 ACID。若网络抖动,可用NET_TIMEOUT=30降级为ASYNC。
5.2 备库监听配置:listener.ora中GLOBAL_DBNAME必须为db_unique_name_DGMGRL
DataGuard Broker 要求备库监听器注册的全局数据库名为db_unique_name_DGMGRL,否则DGMGRL连接失败:
# 备库 node2dg 的 $ORACLE_HOME/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = nodetwodg_DGMGRL) # 必须加 _DGMGRL (ORACLE_HOME = /app/oracle/product/19.2.0/dbhome_1) (SID_NAME = nodetwodg) ) )注意:
GLOBAL_DBNAME不是ORACLE_SID,也不是DB_NAME,必须严格为db_unique_name_DGMGRL。
5.3 Broker 配置:DGMGRL中ENABLE CONFIGURATION前必须START OBSERVER
DataGuard Broker 的 Observer 进程是自动故障转移的“大脑”。若未启动,ENABLE CONFIGURATION会卡住:
# 在任意节点(推荐主库 node2)启动 Observer nohup dgmgrl -silent "connect /" "start observer" > /tmp/observer.log 2>&1 & # 验证 Observer 进程 ps -ef | grep observer # 应输出:grid ... dgmgrl ... start observer # 再执行 ENABLE dgmgrl / DGMGRL> CONNECT / DGMGRL> ENABLE CONFIGURATION;提示:
nohup启动确保 Observer 在 SSH 断开后仍运行。日志/tmp/observer.log是排错第一现场。
5.4 实时同步验证:V$DATAGUARD_STATS的 3 个核心字段解读
SELECT * FROM V$DATAGUARD_STATS是判断同步质量的黄金视图。重点关注:
| 字段 | 正常值 | 异常现象 | 原因 |
|---|---|---|---|
APPLIED_SCN | 与主库V$DATABASE.CURRENT_SCN差值 < 1000 | 差值 > 10000 | 备库 IO 或 CPU 瓶颈,MRP0进程卡住 |
RECOVERED_SCN | 与APPLIED_SCN差值 ≈ 0 | 差值 > 1000 | REDO APPLY进程未启动,或STANDBY_FILE_MANAGEMENT=AUTO未生效 |
ESTIMATED_FLASHBACK_REQUIRED_BYTES | 0 | > 0 | 备库闪回区空间不足,需扩容DB_RECOVERY_FILE_DEST_SIZE |
-- 主库查询 CURRENT_SCN SELECT CURRENT_SCN FROM V$DATABASE; -- 备库查询 DATAGUARD_STATS SELECT NAME, VALUE, TIME_COMPUTED FROM V$DATAGUARD_STATS WHERE NAME IN ('applied_scn', 'recovered_scn', 'estimated_flashback_required_bytes');注意:
TIME_COMPUTED若为+00:00,说明统计未刷新,需ALTER SYSTEM ARCHIVE LOG CURRENT强制归档。
5.5 故障切换演练:SWITCHOVER TO前必须DGMGRL SHOW DATABASE VERBOSITY确认状态
SWITCHOVER TO是高危操作,必须确保备库处于READY状态,而非ERROR或UNKNOWN:
dgmgrl / DGMGRL> CONNECT / DGMGRL> SHOW DATABASE VERBOSITY nodetwodg; # 正常输出: # Database - nodetwodg # Role: PHYSICAL STANDBY # Intended State: APPLY-ON # Transport Lag: 0 seconds (computed 0 seconds ago) # Apply Lag: 0 seconds (computed 0 seconds ago) # Apply Rate: 1.20 MByte/s # Real Time Query: ON # Instance(s): # nodetwodg # 只有当 "Intended State" 为 APPLY-ON 且 "Apply Lag" < 10 秒,才可执行 DGMGRL> SWITCHOVER TO nodetwodg;提示:
SHOW DATABASE VERBOSITY比SHOW DATABASE多输出Transport Lag和Apply Lag,这是判断实时性的唯一依据。
6. 生产环境加固:从crontab自动巡检到ADRCI日志归档的 3 个实战技巧
装完不是终点,稳定运行才是目标。我负责的某跨平台系统上线后,每天凌晨 3 点自动执行 3 个脚本,覆盖了 90% 的突发告警场景。这里分享不用改 Oracle 配置、纯 Linux 层就能落地的加固技巧。
6.1crontab自动巡检:用crsctl和sqlplus组合检查集群健康
把crsctl check cluster -all和sqlplus / as sysdba查询V$INSTANCE封装成脚本,每日检查:
# 创建巡检脚本 /app/scripts/check_cluster.sh #!/bin/bash # 检查 GI 集群 echo "=== $(date) CRS Check ===" >> /app/logs/crs_check.log /app/product/19.2.0/crs/bin/crsctl check cluster -all 2>&1 >> /app/logs/crs_check.log # 检查 ASM 实例 echo "=== $(date) ASM Check ===" >> /app/logs/asm_check.log export ORACLE_HOME=/app/product/19.2.0/crs export PATH=$ORACLE_HOME/bin:$PATH echo "SELECT INSTANCE_NAME, STATUS FROM V\$INSTANCE;" | sqlplus -s / as sysasm 2>&1 >> /app/logs/asm_check.log # 检查主库 DataGuard 状态 echo "=== $(date) DG Check ===" >> /app/logs/dg_check.log export ORACLE_HOME=/app/oracle/product/19.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH echo "SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE FROM V\$DATABASE;" | sqlplus -s / as sysdba 2>&1 >> /app/logs/dg_check.log# 加入 crontab(grid 用户) # 每日凌晨 3:00 执行 0 3 * * * /app/scripts/check_cluster.sh提示:
crontab中必须export ORACLE_HOME和PATH,否则sqlplus找不到命令。
6.2ADRCI自动归档:用adrci脚本清理 30 天前的 trace 和 alert 日志
Oracle 19c 的 ADR(Automatic Diagnostic Repository)日志若不清理,/app/oracle/diag会占满磁盘。adrci可编程清理:
# 创建清理脚本 /app/scripts/clean_adr.sh #!/bin/bash # 清理 ASM 的 ADR adrci <<EOF SET HOME diag/asm/+asm PURGE -age 43200 # 30天 = 43200分钟 EXIT EOF # 清理 DB 的 ADR adrci <<EOF SET HOME diag/rdbms/nodetwodg/nodetwodg PURGE -age 43200 EXIT EOF# 加入 crontab(oracle 用户) # 每周六 2:00 执行 0 2 * * 6 /app/scripts/clean_adr.sh注意:
adrci的PURGE -age单位是分钟,43200= 30 天。SET HOME必须指定完整路径,diag/rdbms/<db_unique_name>/<instance_name>。
6.3rsync备份ORACLE_HOME:用增量同步替代冷备份,10 分钟完成
ORACLE_HOME备份传统用tar,但 10GB 的 19c HOME 解压要 20 分钟。用rsync增量同步到 NFS,首次全量,后续只传差异:
# 假设 NFS 挂载在 /backup/oracle_home # 创建同步脚本 /app/scripts/backup_ohome.sh #!/bin/bash # 同步 GRID_HOME rsync -av --delete /app/product/19.2.0/crs/ /backup/oracle_home/grid_19c/ # 同步 DB_HOME rsync -av --delete /app/oracle/product/19.2.0/dbhome_1/ <p> <a href="https://download.csdn.net/download/u010575833/21074532" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>