织梦CMS - 轻松建站从此开始!

欧博ABG-会员注册-官网网址

Data Guard备库未应用日志的问题一则

时间:2024-05-28 14:54来源: 作者:admin 点击: 67 次
查看当前归档日志路径,空间的使用率已经到了100%,于是在rman中,删除30天之前的归档日志文件,

这两天碰到一套库登录提示,

c53b674f6da2f9a8e8e0adf6b899f137.png

c53b674f6da2f9a8e8e0adf6b899f137.png

查看当前归档日志路径,空间的使用率已经到了100%,于是在rman中,删除30天之前的归档日志文件,

代码语言:javascript

复制

DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-30';

提示这个错误,原来这是套DG,草率了,他的意思是这些归档日志,备库还需要,所以不让删除,

代码语言:javascript

复制

RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process archived log file name=... thread=1 sequence=...

我们登录备库,发现归档空间,同样是100%的使用率,难道同步有问题?

一通乱敲,发现备库没启动,很可能是之前停机维护导致的。

于是启动到mount状态,同时启动监听器,执行日志应用,

代码语言:javascript

复制

alter database recover managed standby database using current logfile disconnect from session;

但是看到MRP进程等待sequence=61的日志,

代码语言:javascript

复制

SQL> select process,status,client_process,thread#,sequence#,block#,active_agents,known_agents from gv$managed_standby where process in('LNS','RFS','LGWR','MRP0') and thread# <>0; PROCESS STATUS CLIENT_P THREAD# SEQUENCE# BLOCK# ACTIVE_AGENTS KNOWN_AGENTS --------- ------------ -------- ---------- ---------- ---------- ------------- ------------ MRP0 WAIT_FOR_GAP N/A 1 61 0 9 9

通过检索v$archived_log,没同步的日志,还很多,

代码语言:javascript

复制

USERENV('INSTANCE') THREAD# LSQ HSQ ------------------- ---------- ---------- ---------- 1 1 61 316

rman中执行catalog start with(将最新的备份集以及归档日志文件列表导入到控制文中),

代码语言:javascript

复制

catalog start with '/archive';

等了一会,现在MRP等的是sequence=317,

代码语言:javascript

复制

SQL> select process,status,client_process,thread#,sequence#,block#,active_agents,known_agents from gv$managed_standby where process in('LNS','RFS','LGWR','MRP0') and thread# <>0; PROCESS STATUS CLIENT_P THREAD# SEQUENCE# BLOCK# ACTIVE_AGENTS KNOWN_AGENTS --------- ------------ -------- ---------- ---------- ---------- ------------- ------------ MRP0 WAIT_FOR_GAP N/A 1 317 0 9 9

一直不动,手工注册日志,

代码语言:javascript

复制

alter database register logfile '/archive/1_317_xxxxxxxxxx.dbf';

反复做了几次catalog,备库的alert记录,还是提示空间满,

代码语言:javascript

复制

Errors in file /oracle/app/oracle/diag/rdbms/conflundg/conflundg/trace/xxxxx_arc1_xxxxx.trc: ORA-19502: write error on file "/archive/1_433_xxxxxxxxxx.dbf", block number xxxxxx (block size=512) ORA-27061: waiting for async I/Os failed Linux-x86_64 Error: 28: No space left on device

找出当前能删除的归档日志,物理层执行删除,腾出归档空间,

代码语言:javascript

复制

select 'rm -rf '||name from v$archived_log where name like '%.dbf' and applied='YES' and completion_time<=sysdate-30;

但是发现备库归档空间,有些断号的日志,还很多,一个个scp,很累,或者按照推荐,重建备库,推倒重来。再等一会,只能说Oracle真抗造,日志开始同步了,主备库的sequence,几乎一致了,

代码语言:javascript

复制

SQL> select process,status,client_process,thread#,sequence#,block#,active_agents,known_agents from gv$managed_standby where process in('LNS','RFS','LGWR','MRP0') and thread# <>0; PROCESS   STATUS       CLIENT_P    THREAD#  SEQUENCE#     BLOCK# ACTIVE_AGENTS KNOWN_AGENTS --------- ------------ -------- ---------- ---------- ---------- ------------- ------------ MRP0 APPLYING_LOG N/A 1 537 181996 9 9 RFS IDLE Archival 1 0 0 0 0 RFS       IDLE         LGWR              1        537     181996             0            0

其实在主备库,都创建了crontab定时删除归档日志的任务,但通过调试发现,脚本中指定存储执行日志的文件夹被删除了,导致执行中断。

通过这个案例,一方面说明任务脚本的健壮性还可以提升,例如判断文件夹是否存在,至少不会因为一个非关键因素导致整个逻辑出错,另一方面也暴露出监控的覆盖面问题。

因此针对以上问题和场景,可以增加以下两个监控点功能,

1. 数据库可用性的探测监控,避免数据库异常关闭未打开的情况。

2. 归档日志删除任务的执行监控,避免执行失败,归档日志未删除的情况。

另外,在这个过程中,暴露出对于rman工具的操作和原理的理解上,还是相当地生疏,有待针对性提高。

近期更新的文章:

Windows调试Oracle数据库问题的一些手段

O’Reilly动物书系列

最近碰到的一些问题

MySQL的几种常用存储引擎

创建PDB的两种操作

Oracle中执行truncate操作出现hang

文章分类和索引:

《公众号800篇文章分类和索引

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-12-22 12:12 最后登录:2024-12-22 12:12
栏目列表
推荐内容