今天处理了个复制进程异常挂起的CASE,出错日志是:

2012-08-20 10:33:02  WARNING OGG-00869  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  No unique key is defined for table 'WL_PSINFO'. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.
2012-08-20 10:34:12  WARNING OGG-01431  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  Aborted grouped transaction on 'MBS7_INV.WL_PSINFO', Mapping error.
2012-08-20 10:34:12  WARNING OGG-01003  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  Repositioning to rba 124252822 in seqno 77.
2012-08-20 10:34:12  WARNING OGG-01151  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  Error mapping from MBS7_INV.WL_PSINFO to MBS7_INV.WL_PSINFO.
2012-08-20 10:34:12  WARNING OGG-01003  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  Repositioning to rba 124252822 in seqno 77.
2012-08-20 10:34:12  ERROR   OGG-01296  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  Error mapping from MBS7_INV.WL_PSINFO to MBS7_INV.WL_PSINFO.
2012-08-20 10:34:12  ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, r_inv1.prm:  PROCESS ABENDING.

从日志看是该表缺少主键,但OGG也是可以基于无主键的情况下同步的,进一步分析目标表和结合挂起的时间,本来该表是无主键的,在发生异常前刚在源端做了创建主键的操作,而此时目标表是存在重复记录的:

目标端:

select id,ordercode, consigncode from mbs7_inv.WL_PSINFO group by id,
                ordercode, consigncode having count(*) > 1

.....有1千多条重复记录,而与此同时在源端是不存在重复记录。

进一步查询发现该表的重复记录只有前几个字段相同,后面几个字段还是不一样的:

select *
  from mbs7_inv.WL_PSINFO
 where id in
       (select id
          from (
select id,ordercode, consigncode from mbs7_inv.WL_PSINFO group by id,
                ordercode, consigncode having count(*) > 1)) order by id

所以不能用传统删除重复记录的方法来处理。

为了OGG进程能正常运作,打算先在源端备份这些删除掉的真实记录,然后在目标端做删除处理后再导入,处理方法是:

1 先在源端备份这些记录:

create table system.WL_PSINFO_bak   as select * from 
mbs7_inv.WL_PSINFO a  where a.id in 
(select id
          from (
select id,ordercode, consigncode from mbs7_inv.WL_PSINFO@link_102 group by id,
                ordercode, consigncode having count(*) > 1))

2 在目标端删除这些记录:

delete from mbs7_inv.WL_PSINFO a  where id in 
(
select id 
          from (
select id,ordercode, consigncode from mbs7_inv.WL_PSINFO group by id,
                ordercode, consigncode having count(*) > 1))

commit;

3 重新把源端备份的数据导回来:

insert into mbs7_inv.WL_PSINFO select * from system.WL_PSINFO_bak@link_100;

4 启动复制进程即可:

ggsci>start r_inv1

总结:主要是要理解OGG的复制原理,它是读日志或DDL同步表进行同步处理的,如果源端进行得动作,在目标端执行不了,为了保证数据一致性,OGG会让复制进程挂起,所要要结合警告日志和两边表结构情况来分析。

OGG重复记录导致复制进程挂起相关推荐

  1. OGG复制进程延迟处理思路与方法

    可能问题分析: 1.源端E进程处于abend状态且长时间未解决,导致pump和Replicat进程均出现延迟 2.源端有大表做批量更新操作(比如对历史数据插入.更新.删除几千万上亿条数据) 3.表没有 ...

  2. Oracle查看ogg延时,OGG复制进程延迟不断增长

    集团某在线系统使用OGG做了同步复制用于二期业务生产使用.有同事过来说复制进程有点异常 -bash-3.2$ ogg Oracle GoldenGate Command Interpreter for ...

  3. netty 进程挂起_这可能是目前最透彻的Netty原理架构解析

    本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目方面提供参考. Netty 是一个异步事件驱动的网络应用程序 ...

  4. 参数详解 复制进程_如何优化PostgreSQL逻辑复制

    How to Optimize PostgreSQL Logical Replication 逻辑复制( Logical Replication )或 Pglogical 是表级别的复制.两者都是基于 ...

  5. 【Linux】复制进程、进程地址空间以及写实拷贝

    目录 复制进程fork()方法原型 父子进程 父子进程的pid 物理地址和逻辑地址 交换空间 写实拷贝 复制进程fork()方法原型 pid_t fork(void); pid_t是int类型代表进程 ...

  6. SQL Server 删除重复记录,只保留一条记录

    原文地址:http://blog.csdn.net/eriato/article/details/17417303 有张表格之前没有设计关键字段的唯一约束,导致有时候执行插入操作时不小心执行了多次就出 ...

  7. 面试官:哪些原因会导致JAVA进程退出?

    面试官:哪些原因会导致JAVA进程退出? 无外乎三种情况. linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) 引言 linux的OOM kil ...

  8. OGG学习笔记04-OGG复制部署快速参考

    OGG学习笔记04-OGG复制部署快速参考 源端:Oracle 10.2.0.5 RAC + ASM 节点1 Public IP地址:192.168.1.27 目标端:Oracle 10.2.0.5 ...

  9. oracle 输出重复记录,ORACLE 去除重复记录

    ORACLE 去除重复记录 delete from tbl_talbe where (col1,col2,col3) in (select col1,col2,col3 from tbl_table ...

最新文章

  1. LeetCode Merge Intervals
  2. 一文读懂JDK7,8,JD9的HashMap,HashTable,ConcurrentHashMap及他们的区别
  3. DataGridView 添加ComboBox
  4. 记录 centos samba 安装
  5. 解决,文件上传到 ftp 服务器,中文出现乱码问题
  6. 程序员的乐趣从哪来?编程能给我带来乐趣吗?
  7. 1247 排排站 USACO(查分+hash)
  8. 查看mysql是否归档的命令_查看oracle数据库是否为归档模式
  9. python导入自己写的py_卧槽,神操作!一句查询让Python帮忙自己写程序
  10. azure db 设置时区_使用Azure Cosmos DB开始您的旅程
  11. python 解析命令行
  12. iOS小技能:iOS15适配导航条主题: 背景颜色、标题颜色
  13. java winhex_winhex模版
  14. 广州“粤A000F1”车牌拍出74万天价(图)
  15. 【Unity开发小技巧】Unity打包IOS端APP
  16. 深入理解Andorid 卷I 第五章
  17. 麦克风声源定位原理_一种利用麦克风阵列进行声源定位的方法与流程
  18. 在 Vue3 成为默认版本后,盘点了 Vue3 与 Vue2 的区别
  19. Sublime text3143中文乱码只能输入繁体字
  20. 正则表达式操作字符串

热门文章

  1. 【原创】大叔经验分享(33)hive select count为0
  2. 测试教程网.unittest教程.2. 基本用法
  3. Filter在Vue,JS,JQ中的使用
  4. Aop和Filter区别
  5. Android 第三方库RxLifecycle使用
  6. chrome 不支持12px以下字体为题的解决
  7. FPGA开发经验谈-FPGA 设计的四种常用思想与技巧(二)
  8. 9.1 ps:查看进程
  9. drf6 权限和频率控制组件
  10. java web 柱状图_使用JFreeChart实现基于Web的柱状图