转 OGG add trandata 到底做了什么
有的时候我们做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
其中的含义不在给出,可以看看官方手册。
2.
Q: SQL>alter database add supplemental log data; 将数据库附加日志打开后还需要对每张表执行 add trandata 吗?
谁知道啊?
A:需要!  如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。不开启表级的最小附加日志,update的redo信息不记录没有进行更新的字段信息,如主键不更新的话主键不记录在redo中,所以会导致同步失败。
 亲自实践过,不信你也可以试试。
SQL> alter session set events '10046 trace name context forever,level 12';
Session altered.
SQL> /
Session altered.
SQL> alter session set events '10046 trace name context off';
Session altered.
SQL>select * from v$diag_info;
案例可以参考 http://blog.mchz.com.cn/?p=4047
->
alter session set statistics_level=all;
select /*+ gathe_plan_statistics */ * from ts.ts_record t where system_name='人员小车闸口' order by pass_datetime desc;
select sql_text,sql_id from v$sql where sql_text like 'select%*%人员小车闸口%';
spool D:\dba\tmp\sql_dev.log
select * from table(dbms_xplan.display_cursor('36tvbv2uth9j9',0,'runstats_last'));
spool off
set pages 100 heading off pause on
select * from table(dbms_xplan.display_cursor(null,0,'allstats last'));
select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
-->
SET LONG 1000000 SET FEEDBACK OFF
spool monitor_sql.html
SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id =>'20wfgydukawbw',type=> 'HTML') AS report FROM dual;
spool off
->
SQL> alter session set events '10046 trace name context forever,level 12';
Session altered.
SQL> /
Session altered.
SQL> alter session set events '10046 trace name context off';
Session altered.
SQL>select * from v$diag_info;
转 OGG add trandata 到底做了什么的更多相关文章
- AFNetworking到底做了什么?(二)
		
接着上一篇的内容往下讲,如果没看过上一篇内容可以点这: AFNetworking到底做了什么? 之前我们讲到NSUrlSession代理这一块: 代理8: /* task完成之后的回调,成功和失败 ...
 - AFNetworking到底做了什么
		
写在开头: 作为一个iOS开发,也许你不知道NSUrlRequest.不知道NSUrlConnection.也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定 ...
 - CSS-animations和transitions性能:浏览器到底做了什么?
		
CSS animations 和 transitions 的性能:浏览器到底做了什么?(译) 原文地址:http://blogs.adobe.com/webplatform/2014/03/18/cs ...
 - malloc 函数到底做了什么?
		
请看下面的代码. 猜测结果是什么?编译通过吗? #include <stdio.h> #include <stdlib.h> int main() { ; char *ptr ...
 - new到底做了什么?
		
下面是一个实例化自定义的对象,我们将要对他进行分析 //定义构造函数 function A(){ this.b = 1 //在这个对象里增加一个属性 //不可以拥有返回对象的return语句 } va ...
 - 转Rollback后undo到底做了些什么?
		
转自:http://biancheng.dnbcw.info/oracle/309191.html Rollback后undo到底做了些什么? 从概念上讲,undo正好与redo相对.当你对数据执行修 ...
 - vue.js中,input和textarea上的v-model指令到底做了什么?
		
v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能: 对,它本质上只是一个语法糖,但到底是一 ...
 - volatile关键字到底做了什么?
		
话不多说,直接贴代码 class Singleton { private static volatile Singleton instance; private Singleton(){} //双重判 ...
 - MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?
		
原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...
 
随机推荐
- 二、oracle sql*plus常用命令
			
一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...
 - 一个有用的shell脚本
			
#!/bin/bash #if [ $1 -eq null ]; then # echo "please input params1!" # exit #fi #if [ $2 - ...
 - VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)
			
'=========================================================================='' VBScript Source File - ...
 - hdu_4823_Energy Conversion
			
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4823 题意:中文题,很清楚,要注意的是乘起来会爆int 题解: #include<cstdio& ...
 - 使用AOP 使C#代码更清晰
			
简介 如果你很熟悉面向方面编程(AOP),你就会知道给代码增加"切面"可以使代码更清晰并且具有可维护性.但是AOP通常都依赖于第三方类库或者硬编码的.net特性来工作.虽然这些实现 ...
 - Windows下的ls的命令
			
习惯了linux下的ls命令,windows的dir用的很不习惯,又不想装cygwin, bash,就想把dir重命名为ls,发现dos下有个命令doskey可以完成该功能.在命令提示符下敲: > ...
 - build path contains duplicate entry:'src' for project 'XXX'
			
解决了,原因是编译器配置不正确,原工程使用adk8/android2.3,我用的是最新的4.0,改了下编译环境就好了.
 - bfs   UESTC 381 Knight and Rook
			
http://acm.uestc.edu.cn/#/problem/show/381 题目大意:给你两个棋子:车.马,再给你一个n*m的网格,从s出发到t,你可以选择车或者选择马开始走,图中有一些障碍 ...
 - RichTextEditor 文本编辑
			
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
 - octet-stream
			
firefox突然变成了用gedit打开pdf文件, Where the link to http://download.jw.org/files/media_m...E_20150201.pdf c ...