oracle ogg 列名转换,关于gg的列名映射问题 - OGG-Oracle GoldenGate - Oracle数据库数据恢复、性能优化来问问AskMaclean - ParnassusDa...

这个很好解释的,如果你使用过logminer的话,你就能理解,对日志进行挖掘的时候,需要从数据库里去查询对象的名称。因为日志文件里只含有对象id而无名称。同样的道理,goldengate抽取出来的队列文件里是不包含字段名称的,只包含字段的id.如下所示:Logdump 28 >n

___________________________________________________________________

Hdr-Ind    :     E  (x45)     Partition  :     .  (x04)

UndoFlag   :     .  (x00)     BeforeAfter:     A  (x41)

RecLength  :    27  (x001b)   IO Time    : 2012/01/05 17:36:13.000.000

IOType     :     5  (x05)     OrigNode   :   255  (xff)

TransInd   :     .  (x02)     FormatType :     R  (x52)

SyskeyLen  :     0  (x00)     Incomplete :     .  (x00)

AuditRBA   :          5       AuditPos   : 21343248

Continued  :     N  (x00)     RecCount   :     1  (x01)

2012/01/05 17:36:13.000.000 Insert               Len    27 RBA 1339

Name: MYTESTSRC.TEST3

After  Image:                                             Partition 4   G  e

0000 0005 0000 0001 3600 0100 0e00 0000 0a30 352d | ........6........05-

31d4 c220 2d31 32                                 | 1.. -12

Column     0 (x0000), Len     5 (x0005)

0000 0001 36                                      | ....6

Column     1 (x0001), Len    14 (x000e)

0000 000a 3035 2d31 d4c2 202d 3132                | ....05-1.. -12

GGS tokens:

TokenID x52 'R' ORAROWID         Info x00  Length   20

4141 414d 314d 4141 4541 4141 4147 3441 4144 0001 | AAAM1MAAEAAAAG4AAD..

TokenID x4c 'L' LOGCSN           Info x00  Length    7

3132 3938 3633 30                                 | 1298630

TokenID x36 '6' TRANID           Info x00  Length    8

382e 3434 2e36 3036                               | 8.44.606

这个在源数据库里scn为1298630,事务号xid为8.44.606的insert操作:插入两个字段column 0 , column 1

当目标端复制进程进行复制时,现在的问题就是复制进程将这个操作再次转换为sql语句,它需要知道这个insert mytestsrc.test3这个表的字段名称。

有两种方式一种是从数据库里取,一种是从def定义文件里取取。

对应你的情况就是,当你不生成def文件(实际上同构环境下也不需要生成def文件),从目标端数据库里取。

所以它不管你的字段名称是什么,只根据队列文件里的column id去得到这个字段名称,就会根据字段名称生成insert语句,然后在目标库上执行这个sql语句。

当你用def文件时,goldengate就从你的def文件里得到字段名称:

def文件内容如下:

Definition for table MYTEST.TEST11

Record length: 74

Syskey: 0

Columns: 2

ID     64     50        0  0  0 1 0     50     50     50 0 0 0 0 1    0 1 2

NAME   64     12       56  0  0 1 0     12     12      0 0 0 0 0 1    0 1 0

End of definition

所以当ogg从目标库获取字段名称生成sql语句时,表结构发生变化时而没开启ddl时, 删除或增加字段导致字段id变化时,字段名称一样,两端id序号不一样时,字段插入顺序也会混乱,把源端c字段插入目标端d字段。

如果你测试过goldengate ALO模式下的复制,你就能深入理解这个过程了。你可以从源数据库拷贝归档到其他主机上,在其他主机上建立一个object id 数据库(这个数据库只包含源system,undo,temp表空间),让goldengate工作于alo模式去从归档抽取数据,当你的表结构不发生变更时,你甚至可以让抽取进程在启动时一次性加载完所有的表然后直接关闭数据库,抽取进程也是可以正常工作的。这里我先前有错误,这里是加载的表的名称。

file:///C:\Users\lavender010\AppData\Roaming\Tencent\Users\275897695\QQ\WinTemp\RichOle\XSWFG5E%L78)B0FAD6E0_ER.jpg

[本帖最后由 newway 于 2012-7-23 15:49 编辑]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值