目录
一、快速判断与根本原因
第一步:检查 ASM 磁盘组剩余空间(如果是 ASM 归档)
第二步:检查归档目标状态与错误信息
第三步:检查 FRA(快速恢复区)与 ASM 磁盘组
第四步:确认归档进程状态
第五步:检查数据库运行日志(最有力的证据)
二、应急处理与恢复
2.1.清理过期归档
2.2.验证恢复
问题复现:
[grid@host03 ~]$ crsctl status resource -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
ONLINE ONLINE host03 STABLE
ONLINE ONLINE host04 STABLE
ora.chad
ONLINE ONLINE host03 STABLE
ONLINE ONLINE host04 STABLE
ora.helper
OFFLINE OFFLINE host03 IDLE,STABLE
OFFLINE OFFLINE host04 STABLE
ora.net1.network
ONLINE ONLINE host03 STABLE
ONLINE ONLINE host04 STABLE
ora.ons
ONLINE ONLINE host03 STABLE
ONLINE ONLINE host04 STABLE
ora.proxy_advm
OFFLINE OFFLINE host03 STABLE
OFFLINE OFFLINE host04 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.ASMNET2LSNR_ASM.lsnr(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.DGDATA.dg(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.DGMGMT.dg(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE host03 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE host04 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE host04 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE host03 169.254.0.152 172.27
.1.100 172.27.2.100,
STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE host03 Started,STABLE
2 ONLINE ONLINE host04 Started,STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.asmnet2.asmnetwork(ora.asmgroup)
1 ONLINE ONLINE host03 STABLE
2 ONLINE ONLINE host04 STABLE
ora.cvu
1 ONLINE ONLINE host04 STABLE
ora.gns
1 ONLINE ONLINE host04 STABLE
ora.gns.vip
1 ONLINE ONLINE host04 STABLE
ora.host03.vip
1 ONLINE ONLINE host03 STABLE
ora.host04.vip
1 ONLINE ONLINE host04 STABLE
ora.mgmtdb
1 ONLINE ONLINE host03 Open,STABLE
ora.orcl.db
1 ONLINE INTERMEDIATE host04 Stuck Archiver,HOME=
/u01/app/oracle/prod
uct/19.3.0/dbhome_1,
STABLE
2 ONLINE INTERMEDIATE host03 Stuck Archiver,HOME=
/u01/app/oracle/prod
uct/19.3.0/dbhome_1,
STABLE
ora.qosmserver
1 ONLINE ONLINE host04 STABLE
ora.rhpserver
1 OFFLINE OFFLINE STABLE
ora.scan1.vip
1 ONLINE ONLINE host03 STABLE
ora.scan2.vip
1 ONLINE ONLINE host04 STABLE
ora.scan3.vip
1 ONLINE ONLINE host04 STABLE
--------------------------------------------------------------------------------
[grid@host03 ~]$
核心问题很明确:ora.orcl.db 的两个实例(host03、host04)状态均为 INTERMEDIATE,且详细描述为 Stuck Archiver。这表示归档进程(ARCn)无法将联机重做日志写出,导致日志切换阻塞,进而使数据库实例处于挂起或半挂起状态。
我们之前有处理过这问题:记一次Oracle集群归档日志爆满之后如何处理(涉及ASM磁盘的增添。有坑必踩)_oracle归档日志满了如何处理-CSDN博客
一、快速判断与根本原因
Stuck Archiver的直接诱因通常是归档目标空间耗尽或归档路径不可写。在 RAC 环境中,单个节点归档失败就可能拖累整个集群,因为 LGWR 进程必须等待归档完成才能复用重做日志。
结合实际的环境,排查应优先聚焦在归档空间上。请按顺序执行以下只读检查,快速定位是“真满了”还是“逻辑配额满了”。
第一步:检查 ASM 磁盘组剩余空间(如果是 ASM 归档)
如果归档路径指向 ASM,必须用 asmcmd lsdg 确认底层磁盘组是否还有真实可用空间。注意:db_recovery_file_dest_size调大并不代表 ASM 磁盘组有空间,底层满了照样报错。
就像1.2章节,即使逻辑空间上限是充足的。但底层空间将满,归档依然不能写入到磁盘中,导致归档进程异常。
其实上图就已经能基本判断为归档空间饱满所致。
第二步:检查归档目标状态与错误信息
以 oracle 用户登录任一实例,查询归档目标状态。ERROR 列通常会直接给出线索(如空间不足、权限问题)。
set lines 400; column destination format a50; SELECT DEST_ID, STATUS, DESTINATION, ERROR FROM V$ARCHIVE_DEST_STATUS WHERE STATUS != 'INACTIVE';附加问题:归档路径配置错误。ora.orcl.db 的归档目标指向了本地文件系统路径 /u01/app/oracle/product/19.3.0/dbhome_1/dbs/arch,而非 RAC 环境必需的共享存储(ASM)。该路径无法被 oracle 用户写入,导致 ORA-19504: failed to create file "",进而使 ARCn 进程卡住。
假如我们把先把目录创建并修改目录权限,看是否能通过修改进行解决
可以看到并不能解决,因为数据库的 LOG_ARCHIIVE_DEST_1 参数没有更新,或者参数更新了但 RAC 的另一节点未同步生效,ARCn 进程仍然会因为无法写入(或路径配置未真正生效)而卡住。
强制切换日志也失败!!!继续下边的排查!
这里有点奇怪,暂时不知道什么原因!!!也许是之前的双节点配置不一致,一个显示配置路径,一个使用闪回区的位置。也许吧!!!
第三步:检查 FRA(快速恢复区)与 ASM 磁盘组
Stuck Archivelog最常见的原因是归档空间满,前面已经基本证实。下边我们需同时检查 Oracle 内部限额和底层存储的真实剩余空间。
如果归档在 FRA闪回区(文件系统):查 v$recovery_file_dest,看 space_used是否逼近 space_limit,且 space_reclaimable 为 0 或极低。
SELECT NAME, SPACE_LIMIT/1073741824 AS LIMIT_GB, SPACE_USED/1073741824 AS USED_GB, SPACE_RECLAIMABLE/1073741824 AS RECLAIM_GB FROM V$RECOVERY_FILE_DEST;
可以看到FRA 配置为 +DGDATA,限额 16GB,已用约 3GB,可回收约 0.05GB。这样看起来感觉感觉空间还蛮多,但是还需结合下面来进行判断。
我们环境中归档存放在 ASM 磁盘组(环境中有 DGDATA、DGMGMT,归档很可能也在 ASM):以 grid 用户执行 asmcmd lsdg,查看对应归档磁盘组(如 +ARCH 或 +DATA 中的归档目录)的 Free_MB。若 Free_MB 极小或为 0,即为存储层写满。
asmcmd lsdg 输出揭示了一个关键且危险的新情况:DGDATA 磁盘组的 Usable_file_MB 为 -1604。
这意味着,虽然 DGDATA 还有 888MB 的物理剩余空间(Free_MB),但这个空间不足以在磁盘故障后安全地恢复冗余。对于 NORMAL 冗余的磁盘组,Usable_file_MB 为负值表示磁盘组已经处于“不安全”状态,任何一块磁盘的故障都可能导致数据丢失或冗余降级。
第四步:确认归档进程状态
查看 v$ARCHIVE_PROCESSES,正常情况下 STATE 应为 IDLE 或 BUSY。若状态异常,说明 ARCn 进程本身有问题。
命令:SELECT PROCESS, STATUS, STATE, LOG_SEQUENCE FROM V$ARCHIVE_PROCESSES;
第五步:检查数据库运行日志(最有力的证据)
有力的证据就是结合看数据库的运行日志,数据库告警日志(Alert Log)。从 Oracle 11g 开始,日志统一由 ADR(自动诊断库)管理,路径有规律可循,但最准确的方式是直接查数据库。
通用路径规律:
$ORACLE_BASE/diag/rdbms/<db_name>/<SID>/trace/alert_<SID>.log
查询语句:SELECT value FROM v$diag_info WHERE name = 'Diag Trace';
日志目录(我当前的测试环境):/u01/app/oracle/diag/rdbms/orcl/orcl1/trace
二、应急处理与恢复
在确认是空间问题后,首要任务是释放空间让归档恢复,实例才能从 INTERMEDIATE 回到ONLINE。这里我们由于是测试环境,我们之前有专门讲过如何添加ASM磁盘组成员来扩容磁盘组来进行容量问题。记一次Oracle集群归档日志爆满之后如何处理(涉及ASM磁盘的增添。有坑必踩)_oracle归档日志满了如何处理-CSDN博客
2.1.清理过期归档
使用 RMAN 删除旧归档。注意在 RAC 中,建议在每个节点分别连接本地实例执行,避免并发冲突。
# 在 host03 上 export ORACLE_SID=orcl1 rman target / RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-2';2.2.验证恢复
检查归档进程状态:
下图是我已经清理归档之后的状态:
空间释放后,手动切换日志并观察 alert log,看归档是否成功。
ALTER SYSTEM ARCHIVE LOG CURRENT;
随后再次执行 crsctl status resource -t,观察 ora.orcl.db 的 STATE 是否变为 ONLINE,Stuck Archiver描述是否消失。
[grid@host03 ~]$ crsctl status resource -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.LISTENER.lsnr ONLINE ONLINE host03 STABLE ONLINE ONLINE host04 STABLE ora.chad ONLINE ONLINE host03 STABLE ONLINE ONLINE host04 STABLE ora.helper OFFLINE OFFLINE host03 IDLE,STABLE OFFLINE OFFLINE host04 STABLE ora.net1.network ONLINE ONLINE host03 STABLE ONLINE ONLINE host04 STABLE ora.ons ONLINE ONLINE host03 STABLE ONLINE ONLINE host04 STABLE ora.proxy_advm OFFLINE OFFLINE host03 STABLE OFFLINE OFFLINE host04 STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.ASMNET2LSNR_ASM.lsnr(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.DGDATA.dg(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.DGMGMT.dg(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.LISTENER_SCAN1.lsnr 1 ONLINE ONLINE host03 STABLE ora.LISTENER_SCAN2.lsnr 1 ONLINE ONLINE host04 STABLE ora.LISTENER_SCAN3.lsnr 1 ONLINE ONLINE host04 STABLE ora.MGMTLSNR 1 ONLINE ONLINE host03 169.254.0.152 172.27 .1.100 172.27.2.100, STABLE ora.asm(ora.asmgroup) 1 ONLINE ONLINE host03 Started,STABLE 2 ONLINE ONLINE host04 Started,STABLE ora.asmnet1.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.asmnet2.asmnetwork(ora.asmgroup) 1 ONLINE ONLINE host03 STABLE 2 ONLINE ONLINE host04 STABLE ora.cvu 1 ONLINE ONLINE host04 STABLE ora.gns 1 ONLINE ONLINE host04 STABLE ora.gns.vip 1 ONLINE ONLINE host04 STABLE ora.host03.vip 1 ONLINE ONLINE host03 STABLE ora.host04.vip 1 ONLINE ONLINE host04 STABLE ora.mgmtdb 1 ONLINE ONLINE host03 Open,STABLE ora.orcl.db 1 ONLINE ONLINE host04 Open,HOME=/u01/app/o racle/product/19.3.0 /dbhome_1,STABLE 2 ONLINE ONLINE host03 Open,HOME=/u01/app/o racle/product/19.3.0 /dbhome_1,STABLE ora.qosmserver 1 ONLINE ONLINE host04 STABLE ora.rhpserver 1 OFFLINE OFFLINE STABLE ora.scan1.vip 1 ONLINE ONLINE host03 STABLE ora.scan2.vip 1 ONLINE ONLINE host04 STABLE ora.scan3.vip 1 ONLINE ONLINE host04 STABLE -------------------------------------------------------------------------------- [grid@host03 ~]$