Oracle案例06—— OGG-01098 Could not flush "./dirdat/e1000004383" (error 28, No space left on device)

 一、前言

  自从换了新环境,各种问题层出不穷,如果不是之前积累的经验丰富,估计都歇菜了,看来作为数据库全栈工程师(oracle/mysql/sqlserver/sap hana/pg/mongodb/redis)还是有好处的(新环境需要完善的地方很多很多啊...),O(∩_∩)O哈哈~。今天同事找我说有个报表库4.5号数据就没有了,问我是不是ogg数据同步有问题。我一脸懵逼,首先4.5号出现的问题,现在都快1个月了才发现说明监控机制不完善,其次业务部门这反映也太滞后了也,出问题就先解决问题呗。

二、问题排查

登录Ogg源库查看相关进程:

[oracle@dg dirprm]$ ../ggsci

GGSCI (dg) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     DPRPT01     00:00:00      666:57:30   
EXTRACT     ABENDED     EXTRPT01    00:00:00      666:57:38   
GGSCI (dg) 2> info EXTRPT01

EXTRACT    EXTRPT01  Last Started 2017-10-27 18:12   Status ABENDED
Checkpoint Lag       00:00:00 (updated 666:58:56 ago)
Log Read Checkpoint  Oracle Redo Logs
                     2018-04-05 23:00:24  Seqno 282927, RBA 832138240
                     SCN 12.2143954677 (53683562229)

通过上面检查,发现源端的数据抽取进程已经挂起27天左右了,也就是发生在4.5号的23:00,那么具体是什么原因导致的这个问题呢?需要通过检查ogg错误日志

[oracle@dg ogg]$ cd dirrpt/

[oracle@dg dirrpt]$ vi DPRPT010.rpt

2018-04-05 23:00:36  ERROR   OGG-01098  Could not flush "./dirdat/e1000004383" (error 28, No space left on device).
Failed to save data to 'dirdmp/gglog-EXTRPT01.dmp', error 28 - No space left on device

发现具体导致进程挂起的原因是因为磁盘空间不足,导致数据抽取无法写入trail文件,检查磁盘空间发现磁盘目前是充足的,那么尝试重启ext进程

GGSCI (dg) 1>start EXTRPT01
Sending START request to MANAGER ...
EXTRACT EXTRPT01 starting

GGSCI (dg) 3> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     DPRPT01     00:00:00      667:04:13   
EXTRACT     RUNNING     EXTRPT01    00:00:00      667:04:21   

隔1分钟后

GGSCI (dg) 4> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     DPRPT01     00:00:00      667:05:10   
EXTRACT     ABENDED     EXTRPT01    00:00:00      667:05:17   

启动失败,再次查看错误日志DPRPT01.rpt,错误信息如下:

2018-05-03 11:36:52  ERROR   OGG-00446  Could not find archived log for sequence 282927 thread 1 under default destinations SQL <SELECT  name    FROM v$archived_log   WHERE sequence# = :ora_seq_no AND         thread# = :ora_thread AND         resetlogs_id = :ora_resetlog_id AND         archived = 'YES' AND         deleted = 'NO' >, error retrieving redo file name for sequence 282927, archived = 1, use_alternate = 0Not able to establish initial position for sequence 282927, rba 790067728.

2018-05-03 11:36:52  ERROR   OGG-01668  PROCESS ABENDING.

这里可以看到抽取进程读取源库的归档日志的时候无法找到相应归档日志(估计已被清理)

col name for a55;
set line 200;
set pagesize 20000;

select sequence#,name,COMPLETION_TIME,STATUS from v$archived_log  where sequence#>=282926  and rownum<=30;

经过确认,发现确实自282927以后到5.2日前的归档日志已经被删除,至此可以确认问题导致的原因和现状情况。

错误原因是:磁盘空间不足导致抽取进程挂起,然后隔了好久没有恢复OGG数据同步,数据源的归档日志又被清理掉,所以无法通过启动抽取进程完成恢复OGG数据同步。

三、解决方案

1、可以通过从备份恢复归档日志,完成ogg数据同步直接。(鉴于每天归档日志大约80G左右,一个月的归档数据恢复较大量以及数据同步依旧需要较大数据量,所以不采用此方式)

2、通过重新部署OGG主从同步进程,完成OGG数据同步,经过检查发现需要同步的表有11张,数据量最大的也就6千万左右数据,同步速度比较快。

select count(1) from   testuser.t_t1; --      1163
select count(1) from   testuser.t_t2;  --   3794574
select count(1) from   testuser.t_t3; --14461070
select count(1) from   testuser.t_t4; --    135962
select count(1) from   testuser.t_t5; --3331344
select count(1) from   testuser.t_t6;  --   5961455
select count(1) from   testuser.t_t7;  --131280
select count(1) from   testuser.t_t8; --7459898
select count(1) from   testuser.t_t9  --8698
select count(1) from   testuser.t_t10;  --62504749
select count(1) from   testuser.t_t11; --11581710

3、完成数据同步恢复后,需要完善数据库状态监控,包含不仅限于DG主备装填、OGG进程状态、实例状态等

4、重新部署过程略。(会重新写一篇ogg数据同步详解的文章)

猜你喜欢

转载自www.cnblogs.com/rangle/p/8985543.html