因sequence导致的replicat卡顿,显示正常运行但没有真写数据

1、问题症状

  1. replicat进程正常运行
  2. ggserr.log无错误输出,卡在启动阶段
    日志一直停在这里
2020-06-02 01:48:50  INFO    OGG-01815  Oracle GoldenGate Delivery for Oracle, rept01.prm:  Virtual Memory Facilities for: COM
    anon alloc: mmap(MAP_ANON)  anon free: munmap
    file alloc: mmap(MAP_SHARED)  file free: munmap
    target directories:
    /home/oracle/ggate/dirtmp.
  1. send rept01,status 无响应
    我的replicat进程叫rept01

2、先说问题结论

因为应用用了oracle的sequence作为主键,但OGG没有配置sequence同步。

3、排查过程

1."天启"阶段:重启

因为,ggserr.log没有日志输出;replicat.dsc也没有输出,基本没有思路。
以为是OGG的bug,因为特定的事务触发了,尝试n次重启,问题照旧。

2.跳过当前事务

还是考虑特定事务有关,想着跳过这个特殊事务就好了。
方法1:跳过当前事务
start replicat rept01 skiptransaction
我都案例中,这个方法无效。启动后,直接还是有问题的样子。
方法2:按事务号跳过
查询当前事务号
info rept01
通过logdump工具查看下一事务号

ALTER REPLICAT rept01, EXTRBA 0
方法点作用,会正常running一会,很快问题重现。

3.探查导致卡住的事务

在第2阶段时,就有端倪,当时卡住的事务,不是普通的insert、update、delete,是sequence,看不出具体内容。

Logdump 7 >n

2020/06/01 01:54:16.229.190 Sequence OP          Len    61 RBA 21026675
Name: TRAN.SEQ_TRANMATERIAL
After  Image:                                             Partition 4   G  s
 0000 0008 0000 0004 5452 414e 0001 0014 0000 0010 | ........TRAN........
 5345 515f 5452 414e 4d41 5445 5249 414c 0002 000c | SEQ_TRANMATERIAL....
 0000 0008 3338 3137 3436 3932 0003 0005 0000 0001 | ....38174692........
 30                                                | 0

跳过卡顿事务后,再次卡住后,查看事务,依然是sequence有关。
这个时候,线索指向比较明显了,可能与sequence有关。

4、解决方法

1.解决方法

先在备机

  1. 执行OGG的工具包
    用sqlplus执行sequence.sql,该文件在OGG根目录下
    期间,需要输入OGG软件使用的schema

  2. OGG全局文件增加GGSCHEMA
    GGSCI 25> view param ./GLOBALS
    checkpointtable ggate.ckpt
    GGSCHEMA GGATE

  3. OGG执行flush sequence
    GGSCI > dblogin userid ggate password ggate
    GGSCI > FLUSH SEQUENCE scott.seq*
    注意:这个只是OGG同步需要,不会充值oracle的序列的值。

  4. 在主机同样执行

  5. 重启全部进程。

2.问题覆盘

OGG支持sequence同步,但需要单独设置和额外工具包支持。一开始的环境是不具备的。
跳过卡顿事务,正常运行一段时间,可能期间刚好是delete、update操作,所以不卡顿。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章