在Oracle DB中从OGG Trail file到redo log进行transaction追踪的方法

适用于:
Oracle GoldenGate - Version 10.4.0.0 to 11.1.1.1.0 [Release 10.4.0 to 11.1.1.1]
Information in this document applies to any platform.

目标:
为了调查一些data 不匹配/丢失问题,经常会需要从OGG Trail file到redo log进行事务的追踪。
本文演示这个追踪过程。

解决方案
1.在OGG extract进程参数文件中添加token,以便scn(Oracle transaction id)可以体现在OGG Trail file中

TABLE abc.*, tokens (tk-scn = @getenv('ORATRANSACTION', 'SCN'));

如果你使用的是小于12.x的OGG版本,请使用双引号代替上面的单引号
举例:

TABLE abc.*, tokens (tk-scn = @getenv("ORATRANSACTION", "SCN"));

请注意:从OGG 11.1版本开始,extract进程自动包括Oracle SCN(作为OGG Token LOGCSN),logdump工具的显示如下:

......
TokenID x4c 'L' LOGCSN           Info x00  Length    7
 3439 3533 3438 35                                 | 4953485  
.....etc.

因此,如果你的OGG版本是V11及其更高版本,本步骤请忽略。

2.使用logdump工具open一个trail file,并获得SCN号

Logdump 130 >open ./dirdat/lo000002
Current LogTrail is <GGHOME>\dirdat\lo000002
Logdump 132 >ghdr on
Logdump 133 >detail on
Logdump 134 >detail data
Logdump 135 >usertoken on
Logdump 138 >n
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 27 (x001b) IO Time : 2011/09/02 14:27:45.000.000
IOType : 15 (x0f) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 141 AuditPos : 16840208
Continued : N (x00) RecCount : 1 (x01)

2011/09/02 14:27:45.000.000 FieldComp Len 27 RBA 995
Name: <SCHEMA NAME>.<TABLE NAME>
After Image: Partition 4 GU s
0000 0008 0000 0004 4a41 4e45 0002 000b 0000 0007 | ................
4261 6f64 696e 67 | Baoding
Column 0 (x0000), Len 8 (x0008)
0000 0004 4a41 4e45 | ....
Column 2 (x0002), Len 11 (x000b)
0000 0007 4261 6f64 696e 67 | ....Baoding

User tokens: 15 bytes
746b 2d73 636e 0031 3530 3537 3836 00 | tk-scn.1505786.<====此处是SCN号


3.根据此SCN,使用Oracle logminer去分析redo log

SQL> exec dbms_logmnr.add_logfile('<ORACLE_HOME>\REDO01.LOG');
PL/SQL procedure successfully completed.

SQL> exec dbms_logmnr.start_logmnr(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQL procedure successfully completed.

SQL> SELECT XIDUSN, XIDSLT, XIDSQN FROM v$logmnr_contents WHERE SCN='1505786';
XIDUSN XIDSLT XIDSQN
-----------------------
1       27     1127

SQL>select scn, USERNAME, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, sql_redo from v$logmnr_contents where xidusn='1' and xidslt='27' and xidsqn='1127'and operation='UPDATE';

4.
从上一步中的sql_redo字段中,实际的sql语句可以从redo log中被看到。
可能需要改变上述select语句的过滤条件"operation='UPDATE",比如insert语句的情况。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值