实现含有blob字段的表的瘦身

最近在实现一个业务功能:

一个table(含有blob列)的瘦身,从a库搬家搬到b库,原理就是a库上delete一行记录,在b库上插入此条记录。
用笨方法实现:a库上导出想要delete的row,在b库上导入,在b库上导入成功之后,再从a库上删除此条记录。


其实这个瘦身的需求可以使用OGG 12c (OGG version 12.1.2.1.0)来完成。

前提:
SQL> ALTER TABLE user.blob_table  ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

核心参数
源头抽取进程:
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS

目的端复制进程:
INSERTDELETES


额外说一句:由于OGG 12c不支持Oracle database 10g,因此,该需求不适用于Oracle database 10g


下面来分析一下实现原理:
1.ALTER TABLE user.blob_table  ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 这个语句无法把blob字段值带到redo log中

2.而经过用如上核心参数测试,确实能达到如下效果:在a库上删除的记录能在b库上insert成功(包括blob值也能带到b库上),
  经过查询OGG 12c文档,http://docs.oracle.com/goldengate/1212/gg-winux/GIORA/setup.htm#GIORA374
  发现OGG用的是flashback query来获取的blob的字段值。于是做如下实验:
 2.1 停止OGG抽取进程
 2.2 源头(a库)上delete该表一条记录,并commit
 2.3 切换undo tablespace ,本步骤参考:IF: How to Switch to a New Undo Tablespace (文档 ID 1951695.1)
 2.4 启动OGG抽取进程
 2.5 此时OGG的复制进程是启动的,使用PLSQL-developer工具,查询备库(b库)上的那条记录,发现blob字段值是空的,其他值都复制过来了。
 2.6 于是确认:OGG 12c 的此功能是借助flashback query获取的blob的字段值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值