2、XX2库分析

停止XX2库 Extract进程时正在处理的长事务为

select t.addr,t.XIDUSN,t.XIDSLOT,t.XIDSQN,t.START_DATE from  gv$transaction t;

ADDR                XIDUSN    XIDSLOT    XIDSQN START_DAT

---------------- ---------- ---------- ---------- ---------

0700000405B10488      173        30      6643 10-APR-13

截止目前该事务在数据库中仍在进行:

SQL> selectt.SID,t.SERIAL#,t.SCHEMA#,t.SCHEMANAME,t.OSUSER,t.MACHINE,t.PORT,t.TERMINAL,t.PROGRAMfrom gv$session t where taddr='0700000405B10488';

SID  SERIAL#    SCHEMA# SCHEMANAMEOSUSER    MACHINE                    PORT TERMINAL                      PROGRAM

---------- -------------------- ---------- ---------- -------------------- ---------------------------------------- ------------------------------

2520    19683        98 SJCK      Oracle    bjschxdbcx03                  0 UNKNOWN                        oracle@bjschxdbcx03(J000)

通过该事务正在进行的 sql以及上一个 sql语句推测,该事务可能由于 Oracle 自动刷新物化视图的内部job发起,不会带来业务数据变化。

SQL> selectt.PREV_SQL_ID,t.SQL_ID from gv$session t where taddr='0700000405B10488';

PREV_SQL_ID  SQL_ID

--------------------------

76cckj4yysvua6x5246x8jk7wj

SQL> select sql_textfrom gv$sqltext t where t.SQL_ID = '76cckj4yysvua' order by t.PIECE;

SQL_TEXT

----------------------------------------------------------------

select time_mp, scn,num_mappings, tim_scn_map from smon_scn_tim

select time_mp, scn,num_mappings, tim_scn_map from smon_scn_tim

select time_mp, scn,num_mappings, tim_scn_map from smon_scn_tim

select time_mp, scn,num_mappings, tim_scn_map from smon_scn_tim

e  where scn =    (select max(scn) from smon_scn_time wherescn

e  where scn =    (select max(scn) from smon_scn_time wherescn

e  where scn =    (select max(scn) from smon_scn_time wherescn

e  where scn =    (select max(scn) from smon_scn_time wherescn

<= :1)

<= :1)

<= :1)

SQL_TEXT

----------------------------------------------------------------

<= :1)

select sql_text fromgv$sqltext t where t.SQL_ID = '6x5246x8jk7wj' order by t.PIECE;

/* MV_REFRESH (MRG) */MERGE INTO "SJCK"."SE_GES_NSDSEWYYS2" "SN

A$" USING ( WITH"TMPDLT$_SE_GES_NSDSEWYYS1" AS ( SELECT /*+ RE

SULT_CACHE(LIFETIME=SESSION)*/ "MAS$"."RID$" "RID$" ,"MAS$"."N

SDEHJ","MAS$"."SDNF", "MAS$"."ZRRDZDAH",        DECODE("MAS$".

"OLD_NEW",′N′,′I′,′D′)"DML",        "MAS$"."OLD_NEW$$"

"OLD_NEW","MAS$"."TIME" "TIME","MAS$"."DMLTYPE" "DMLTY

PE"FROM(SELECT"MAS$".∗,MIN("MAS$"."SEQ") OVER(PARTIT

ION BY"MAS$"."RID$") "MINSEQ",MAX("MAS$"."SEQ") OVER(PA

RTITION BY"MAS$"."RID$") "MAXSEQ$$"  FROM (SELECT CHARTOROWID

("MAS$"."M_ROW$$")RID$  , "MAS$"."NSDEHJ", "MAS$"."SDNF","MAS

$"."ZRRDZDAH"  , DECODE("MAS$".OLD_NEW,′N′,′I′,′D′)DML,

"MAS$"."DMLTYPE""DMLTYPE", "MAS$"."SEQUENCE""SEQ","MA

S$"."OLD_NEW""OLDNEW", "MAS$"."SNAPTIME""TIME"  FROM

"SJCK"."MLOG$_SE_GES_NSDSEWYYS1""MAS$"  WHERE"MAS$".SNAPTIME$

恢复该数据库上的 Extract 进程需要用到归档日志 thread 3, seq 5862-6105,从 5862 开始的相当一部分归档日志已被删除,因此会报找不到归档。

Recovery Checkpoint (position of oldest unprocessed transaction in thedata source):

Thread #: 3

Sequence #: 5862

RBA: 18504720

Timestamp: 2013-04-10 01:00:18.000000

SCN: 3098.1717076309 (13307525759317)

Redo File: Not Available

Current Checkpoint (position of last recordread in the data source):

Thread #: 3

Sequence #: 6105

RBA: 39127568

Timestamp: 2013-04-14 11:58:38.000000

SCN: 3099.2202080974 (13312305731278)

Redo File: +DATA/bjschxcx/onlinelog/redo12b

问题原因总结:

目前生产环境所有数据库的 Extract 进程已经按照 Oracle 的建议统一关闭 Bounded Recovery 功能,关闭该功能的后果是,每当 Extract 进程强制停止时,如果进程正在处理既未提交也未回滚的长时间运行事务(无论事务长短),则重启 Extract 进程后,都必须进行 Normal Recovery,必须从这些既未提交也未回滚的事务中最早开始的事务在 Redo 或 Archived log 中的起点位置开始进行 Recovery。

如果未关闭Bounded Recovery,则 Extract 进程会对任何运行时间超过一个 BR 检查点间隔(默认4小时)的事务每隔一个 BR 间隔执行一个检查点,将事务相关的状态和数据写入 BR 检查点文件,这样当 Extract 进程强行终止重启后就会从上一个有效的 BR 检查点或上个 BR 间隔内最早的既未提交也未回滚的事务的起点在日志文件中开始进行 Recovery,通过该功能可以保证 Extract 进程恢复的时间永远不会超过 2 倍的 BR 间隔。

因此,导致本次问题的原因有:

1、GoldenGateExtract 的 Bounded Recovery 功能关闭,该功能官方的 Reference 推荐在未经Oracle Support 推荐情况下,不应对该功能做任何改动。

2、版本升级时在停止 Extract 进程时存在长事务,执行了 forcestop 操作

3、归档日志被删除

4、数据库中存在不正常的长事务

5、数据运维不规范

三、解决方案:

1、重新初始化,能够彻底解决问题,但是存在业务停机时间不可控风险。

2、恢复归档,能够彻底解决问题,存在一定的同步延迟等待。

3、按照抽取时间点跳过该事务,可能存在丢失事务的风险,概率很低但却是存在。

四、处理过程:

对于XX2库因找不到归档挂起的 Extract 进程,通过恢复归档日志,重启 Extract 进程,等待延迟解决。

对于XX1库因找不到归档挂起的 Extract 进程,经备份厂商核实不存在 Extract 进程执行恢复所需的归档的有效备份,无法恢复归档日志,采取重置Extract 进程按照对 Extract 进程执行 forcestop 操作的时间点重新开始抽取,跳过该长事务。

Forcestop 时间点:

2013-04-1411:59:55  INFO    OGG-00987 Oracle GoldenGate Command Interpreter for Oracle:  GGSCI command (oracle): send ESB_CX7forcestop.

2013-04-1411:59:56  INFO    OGG-01021 Oracle GoldenGate Capture for Oracle, esb_cx7.prm:  Command received from GGSCI: FORCESTOP.

2013-04-1411:59:30  INFO    OGG-00987 Oracle GoldenGate Command Interpreter for Oracle:  GGSCI command (oracle): send ESB_ZJ4forcestop.

2013-04-1411:59:30  INFO    OGG-01021 Oracle GoldenGate Capture for Oracle, esb_zj4.prm:  Command received from GGSCI: FORCESTOP.

重置时间点:

alterESB_ZJ4 ,begin 2013-04-14 11:59:30

startESB_ZJ4

alterESB_CX7 ,begin 2013-04-14 11:59:56

startESB_CX7

五、后续建议:

1、让 Oracle 确认 Bounded Recovery 功能的合理性

2、规范归档日志管理

3、规范数据运维

4、加强数据库长事务监控和优化

5、规范数据库版本升级流程,严格遵循 Oracle 推荐的 OGG 运维规范

extract进程 oracle,Oracle GoldenGate 系列:Extract 进程遇长事务执行 Forcestop 引发的惨案...相关推荐

  1. python线程与进程视频教程_[PYTHON系列教程]→进程 vs. 线程

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点.首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...

  2. Oracle GoldenGate 系列:深入理解 Oracle GoldenGate 检查点机制

    检查点将进程的当前读写位置存储在磁盘中用于恢复目的.检查点不仅可以真实地标记 Extract进程捕获的要进行同步的数据变化以及 Replicat进程应用到 target数据库的数据变化,防止进程进行冗 ...

  3. oracle 长事务 逻辑日志,goldengate中长事务引起的问题

    一.问题描述: 2013年4月14日中午12点左右生产环境执行数据库版本升级期间根据需要停止XX1库和XX2库OGG 同步抽取进程时遇长事务,无法用正常命令停止,执行 forcestop 后重启进程报 ...

  4. Oracle Golden Gate 系列十三 -- 配置GG进程检查点(checkpoint) 说明

    一.Checkpoints 理论说明 有关GG的Checkpoints 在系列一, GG的架构中以说明: OracleGolden Gate 系列一 --GG 架构 说明 http://blog.cs ...

  5. GoldenGate 配置extract,replicat进程自启动

    在GoldenGate中主进程是manager进程,使用start mgr启动.可以在mgr进程中添加一些参数用来在启动mgr进程的同时启动extract和replicat进程 GGSCI (gg01 ...

  6. teradata查看正在运行的进程_goldengate 进程在oracle数据库哪个视图

    展开全部 Oracle GoldenGate 用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的32313133353236313431303231363533e4b893e5b19e3 ...

  7. 万字详解Oracle架构、原理、进程,学会世间再无复杂架构

    学习是一个循序渐进的过程,从面到点.从宏观到微观,逐步渗透,各个击破,对于Oracle, 怎么样从宏观上来理解呢?先来看一个图,这个图取自于教材,这个图对于从整体上理解ORACLE 的体系结构组件,非 ...

  8. aioserve oracle,oracle进程关不掉的问题??新手问题

    刚刚的问题是因为oracle进程占用太多的内存导致宕机的原因.进入sqlplus用shutdown immediate关闭服务后,用topas查看发现oracle进程依然存在....奇怪...如图:N ...

  9. ORACLE查找并解除死锁进程

    ORACLE查找并解除死锁进程 1.查找死锁进程 select /*+RULE*/v$lock.sid, decode(v$lock.type,         'MR', 'Media Recove ...

最新文章

  1. Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout
  2. 如何删除windows上面的jdk文件
  3. eclipse运行时出现Unable to execute dex
  4. JZOJ 3789. 【NOI2015模拟8.20】编辑器
  5. server2005系统表知多少 之sysdatabases
  6. 校园课程 ·学习笔记 ·导航目录
  7. 【数据结构笔记27】树习题:完全二叉搜索树(Complete Binary Search Tree)
  8. k8s与caas--容器云caas平台的落地实践
  9. 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
  10. codeforces 690D2 D2. The Wall (medium)(组合数学)
  11. 《机器学习Python实践》第7章——数据可视化
  12. 【琐碎】element-wise multiplication
  13. 【论文随笔2】COALA: Co-Aligned Autoencoders for Learning Semantically Enriched Audio Representations
  14. smart 完成安装之前向导中断
  15. 对农行金e顺k令的一些猜测
  16. C盘清理-我的C盘莫名其妙就满了?
  17. 两性相吸的20个完美方案
  18. [Compose] 使用 Compose 在 Android 中的脚手架 Scaffold
  19. DOS命令操作大全和计算机运行命令(初次写请多多关照)
  20. OSPF中的SPF计算

热门文章

  1. Android四大组件之BroadcastReceiver详解
  2. linux下增加swap分区,LINUX新建和增加SWAP分区
  3. 地图常用工具-一个好用的地图工具网址
  4. centos7下安装php环境
  5. android 三星机型奔溃,Android应用程序崩溃在三星Galaxy S3(内存不足错误)
  6. linux下如何播放mp3文件,【linux下播放mp3】
  7. 优动漫PAINT-凌霄花画法
  8. 把时间当作朋友——现实
  9. 「精致店主理人」青年创业孵化营·首期顺德场圆满结束!
  10. 宏基因组数据处理 - Nanopore下机数据fast5格式