有的时候我们做OGG的时候add trandata会出现异常。

这里就剖析一下add trandata到底做了什么

GGSCI (yjfora81 as ggs_admin@testdb) 2> add trandata ppzhu1.test3

2016-03-08 11:47:36  WARNING OGG-00706  Failed to add supplemental log group on table PPZHU1.TEST3 due to ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired SQL ALTER TABLE "PPZHU1"."TEST3" ADD SUPPLEMENTAL LOG GROUP "GGS_87926" ("USER_ID") ALWAYS  /* GOLDENGATE_DDL_REPLICATION */.

然后一直hang住

使用OGG用户登陆我的用户GGS_ADMIN

GGSCI (yjfora81) 1> dblogin userid ggs_admin,password test;

Successfully logged into database.

SQL> select SID , SERIAL# ,PADDR  from v$session where USERNAME='GGS_ADMIN';

SID    SERIAL# PADDR

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

145         15 00000001BE185360

SQL> select pid,spid from v$process where addr='00000001BE185360';

PID SPID

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

37 40986

找到SPID和pid  OS PID是40986数据库的pid是37

我们用37 进行ORADEBUG

SQL> oradebug SETORAPID 37

Oracle pid: 37, Unix process pid: 40986, image: oracle@yjfora81 (TNS V1-V3)

SQL> oradebug tracefile_name

/home/oracle/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_40986.trc

10046事件可以设置以下四个级别:

1 - 启用标准的SQL_TRACE功能,等价于sql_trace

4 - Level 1 加上绑定值(bind values)

8 - Level 1 + 等待事件跟踪

12 - Level 1 + Level 4 + Level 8

找到语句使用LEVEL 1即可

SQL> oradebug event 10046 trace name context forever ,level 1;

Statement processed.

在ggsci中

GGSCI (yjfora81 as ggs_admin@testdb) 3> add trandata ppzhu1.test4

Logging of supplemental redo data enabled for table PPZHU1.TEST4.

TRANDATA for scheduling columns has been added on table 'PPZHU1.TEST4'.

TRANDATA for instantiation CSN has been added on table 'PPZHU1.TEST4'.

SQL> Oradebug event 10046 trace name context off;

Statement processed.

然后我们查看trace文件

LOCK TABLE "PPZHU1"."TEST6" IN SHARE MODE  NOWAIT

LOCK TABLE "PPZHU1"."TEST6" IN EXCLUSIVE MODE  NOWAIT

ALTER TABLE "PPZHU1"."TES

可以看到是要加锁的所以add trandata可能造成堵塞

由于ALTER TABLE 看不全,我做了审计发现如下:

ALTER TABLE "PPZHU1"."TEST8" ADD SUPPLEMENTAL LOG GROUP "GGS_87937" ("USER_ID") ALWAYS  /* GOLDENGATE_DDL_REPLICATION */

ALTER TABLE "PPZHU1"."TEST8" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS  /* GOLDENGATE_DDL_REPLICATION */

在结合我们的报错信息

GGSCI (yjfora81 as ggs_admin@testdb) 2> add trandata ppzhu1.test3

2016-03-08 11:47:36  WARNING OGG-00706  Failed to add supplemental log group on table PPZHU1.TEST3 due to ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired SQL ALTER TABLE "PPZHU1"."TEST3" ADD SUPPLEMENTAL LOG GROUP "GGS_87926" ("USER_ID") ALWAYS  /* GOLDENGATE_DDL_REPLICATION */.

2016-03-08 11:53:00  WARNING OGG-00706  Failed to add supplemental log group on table PPZHU1.TEST3 due to ORA-03113: end-of-file on communication channel

Process ID: 23575

Session ID: 80 Serial number: 2709 SQL BEGIN DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"PPZHU1"."TEST3"', supplemental_logging => 'none'); END;.

可以确定 add trandata 至少做了如下操作

1、ALTER TABLE "PPZHU1"."TEST8" ADD SUPPLEMENTAL LOG GROUP "GGS_87937" ("USER_ID") ALWAYS

2、ALTER TABLE "PPZHU1"."TEST8" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY) COLUMNS

3、DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"PPZHU1"."TEST3"', supplemental_logging => 'none'

其中这几部中第三步会加锁并且不是NOWAIT的方式,如果表上有事物正在运行,那么这个语句会等待,因为他需要一个MODE 4的锁在表级S锁

如下:

SQL> select * from v$lock;

ADDR             KADDR                   SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

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

00000001BD52BC80 00000001BD52BCF8         80 TX       655363       1685          6          0        122          0

00007F716C65A908 00007F716C65A968         80 TM        87926          0          0          4        122          0

而DML会在表级别上一个SX级别的3级锁,所以不兼容一直卡着,并且它还会影响随后的DML因为DML需要表级别的SX锁,这样对生产系统的影响

很大。解决方式就是KILL掉OGG登陆的会话。

而1,2两部都是NOWAIT方式,可以及时报错出来及ORA-00054: resource busy,不会堵塞

实际上1,2两部做完后,我们可以再ORACLE数据库中查看视图

dba_log_group_columns

dba_log_groups

其中的含义不在给出,可以看看官方手册。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2051248/,如需转载,请注明出处,否则将追究法律责任。

mysql add trandata_OGG add trandata 到底做了什么相关推荐

  1. 转 OGG add trandata 到底做了什么

    有的时候我们做OGG的时候add trandata会出现异常.这里就剖析一下add trandata到底做了什么 GGSCI (yjfora81 as ggs_admin@testdb) 2> ...

  2. MySQL实战 | 01 当执行一条 select 语句时,MySQL 到底做了啥?

    原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...

  3. Android Watchdog 狗子到底做了啥

    作者:流浪汉kylin  原文链接:https://juejin.cn/post/7215498393429983291 前言 有一定开发经验的或多或少有听过Watchdog,那什么是Watchdog ...

  4. 什么是spring框架?spring框架到底有什么用?spring框架到底做了些什么?

    什么是spring框架,spring框架究竟有什么用呢?我们可以用spring框架来做些什么呢?这是我今天要说的内容. 当然,百度spring框架会出现一大堆spring框架的介绍,以及IOC和AOP ...

  5. mysql explain 的using where 到底是什么意思?

    转自mysql explain 的using where 到底是什么意思? - SegmentFault 思否 https://segmentfault.com/q/1010000007000995 ...

  6. MySQL在RR级别下到底有没有修复幻读

    微信搜索"coder-home"或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源.扫描它,带走我 文章目录 背景 疑问点 分析 什么是快照读 开启事 ...

  7. volatile关键字到底做了什么?

    话不多说,直接贴代码 class Singleton {private static volatile Singleton instance;private Singleton(){}//双重判空pu ...

  8. 忠于职守 —— sysmon 线程到底做了什么?(九)

    在 runtime.main() 函数中,执行 runtime_init() 前,会启动一个 sysmon 的监控线程,执行后台监控任务: systemstack(func() { // 创建监控线程 ...

  9. http.ListenAndServe()到底做了什么?

    参考:https://studygolang.com/articles/25849?fr=sidebar ​ http://blog.csdn.net/gophers 实现一个最简短的hello wo ...

最新文章

  1. Java项目:抽奖点名神器(HTML+可自定义抽选)
  2. OpenCV图像处理——iOS端人脸检测
  3. 熟悉linux unix,熟悉这几个常用命令,你就是Linux/Unix的vi高手了。
  4. Power Network POJ - 1459(EK算法模板+详解)
  5. 禅道备份功能_更新禅道燃尽图及数据备份
  6. 好文!研究生高效阅读的五大原则
  7. 前端_网页编程 Form表单与模板引擎(下)
  8. 2021Q1美妆行业季度观察报告
  9. C++ 为什么要用覆盖(学习笔记)
  10. VMware vSAN 的内部版本号和版本 (2150753)
  11. HALCON 21.11:深度学习笔记---有监督训练(6)
  12. MySQL二十四:索引
  13. 【codeforces 534B】Covered Path
  14. 阿里云云计算 10 ECS的使用
  15. [开发笔记]-多线程
  16. Dropbox安装包官网下载失败的解决方法
  17. symbian塞班系统支持格式
  18. java 新浪短链接_新浪t.cn短链接如何生成?网址缩短api接口分享
  19. [024] 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)
  20. 初探TweenMax 动画

热门文章

  1. 【Html——自由小球球】(效果+代码)
  2. Lazarus进行Windows下服务和进程的管理
  3. Unity_塔防游戏(7)敌人炮塔之间的Collider碰撞优化
  4. 安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开
  5. java jframe案例_Java JFrame.setMinimumSize方法代码示例
  6. WebAPI接口对接
  7. 兼职收入过w后,我决定把我所有的接单途径告诉你
  8. 迷失中的自己,找一个安静的地方
  9. mc一连服务器就未响应,关于一些服务器常见BUG的分享,以及解决办法——1
  10. CSS IN JS —— CSS Moudules