暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

OGG能够复制迁移包含CLOB字段的table?

原创 杨磊 2019-11-18
7716

THEME:OGG能够复制迁移包含CLOB字段的table?
howtousegoogleoptimizetorunabtests.jpg

本文阅读约10分钟。

【前言】
朋友今天下午问到一个问题:使用OGG做迁移,OGG支不支持CLOB?因自己没有使用过OGG做迁移,但知道OGG属于逻辑迁移方式,可跨平台、跨库版本迁移数据;按照之前的OGG简单了解,貌似OGG不支持大字段的迁移;鉴于此,在Oracle的metalink上搜索了下,本文记录如下讲解之。

Oracle的官方文档“Can GoldenGate Replicate An Oracle Table That Contains Only CLOB Column(s)? (文档 ID 971833.1)”,给出了解释:OGG不支持仅包含CLOB字段表的同步,对于同时有常规字段和CLOB字段表的同步是支持的。详见如下:

APPLIES TO:
Oracle GoldenGate - Version 4.0.0 and later
Information in this document applies to any platform.
Question
Can GoldenGate replicate an Oracle table that contains only CLOB columns?
Answer
To ensure Data Integrity when performing Update and Delete operations, GoldenGate requires each Source and Target Table to have a Unique Identifier. This Unique Identifier can be:
            * a Primary Key
            * a Unique Index
            * one or more columns that contain unique values and are specified with a GoldenGate KEYCOLS clause.
To make those columns available to GoldenGate, they must be logged to the Redo Log by Oracle’s Supplemental Logging feature.  Oracle does not support Supplemental Logging for CLOB columns; therefore Updates and Deletes on those columns cannot be replicated by GoldenGate.

据上,简单翻译之:
Oracle为确保执行更新和删除操作时的数据完整性,GoldenGate要求源和目标表具有唯一的标识符。这个唯一标识符可以是:主键、唯一索引、包含唯一值的一个或多个列,并使用GoldenGate KEYCOLS子句指定。要使这些列对GoldenGate可用,必须通过Oracle的补充日志功能将它们记录到Redo日志中。Oracle不支持为CLOB列添加日志记录;故,GoldenGate也就无法复制这些列上的更新和删除。

那么数据库中如果存在仅包含CLOB字段的表,使用OGG在做迁移时,如何进行操作呐?
答案:对于仅包含CLOB字段的表使用oracle export方式,使用OGG同步其他表。

步骤如下:

1.找出非仅包含CLOB字段的表,使用OGG先行同步数据
使用oracle系统视图all_tab_columns和PL/SQL在导出表的时候提供的Object selection功能快速查出非仅包含CLOB字段的表,命令如下:

SELECT DISTINCT ('TABLE "' || a.OWNER || '"."' || a.TABLE_NAME || '"') FROM sys.all_tab_columns a WHERE a.OWNER = 'CA_GROUP' AND a.TABLE_NAME NOT IN ( SELECT t.TABLE_NAME FROM sys.all_tab_columns t WHERE t.OWNER = 'CA_GROUP' AND t.DATA_TYPE IN ('CLOB', 'BLOB') minus SELECT t.TABLE_NAME FROM sys.all_tab_columns t WHERE t.OWNER = 'CA_GROUP' AND t.DATA_TYPE not IN ('CLOB', 'BLOB') );
复制

以上命令,会找出非仅包含CLOB字段的表,使用OGG先行同步数据;

2.变更日,进行停库,使用expdp命令进行补数,将仅包含CLOB或BLOB的表进行单独迁移

SELECT DISTINCT ('TABLE "' || a.OWNER || '"."' || a.TABLE_NAME || '"') FROM sys.all_tab_columns a WHERE a.OWNER = 'CA_GROUP' AND a.TABLE_NAME IN ( SELECT t.TABLE_NAME FROM sys.all_tab_columns t WHERE t.OWNER = 'CA_GROUP' AND t.DATA_TYPE IN ('CLOB', 'BLOB') minus SELECT t.TABLE_NAME FROM sys.all_tab_columns t WHERE t.OWNER = 'CA_GROUP' AND t.DATA_TYPE not IN ('CLOB', 'BLOB') );
复制

文章至此。

欢迎关注个人公众号:“一森咖记”(ID:Ethan_Timely),本公众号有技术文章定期持续推进。

最后修改时间:2019-11-20 19:42:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论