OGG能否复制迁移只包含CLOB列的表?

老杨的这篇文章《OGG能否复制迁移包含CLOB字段的table?》,介绍了使用OGG进行数据复制迁移时涉及到CLOB字段的表应该如何操作。

使用OGG做迁移,OGG支不支持CLOB?在Oracle的metalink上搜索了下,本文简记如下讲解之。

 

Oracle的官方文档“Can GoldenGate Replicate An Oracle Table That Contains Only CLOB Column(s)? (文档 ID 971833.1)”,给出了解释:OGG并不支持包含CLOB列的复制迁移(此处用的"only"),

APPLIES TO:
Oracle GoldenGate - Version 4.0.0 and laterInformation 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也就无法复制这些列上的更新和删除。

 

那么,针对这种情况,使用OGG在做迁移时,如何进行操作呐?

答案:这里给出一种方案,结合oracle export方式;

 

步骤如下:

1. 使用OGG同步没有clob和blob类型数据的表

使用系统视图all_tab_columns和PL/SQL在导出表的时候提供的Object selection功能快速导出不包含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 NOT IN 
(SELECT t.TABLE_NAME FROM sys.all_tab_columns t 
WHERE t.OWNER = 'CA_GROUP' AND t.DATA_TYPE IN ('CLOB', 'BLOB'));

以上命令,会找出不包含CLOB或BLOB的表,使用OGG先行同步数据。

 

2. 变更日,进行停库,使用expdp命令进行补数,将包含CLOB或BLOB的表进行单独迁移,为了加快导出速度,可加parallel并行度,

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'))

近期的热文:

《数据库到底能不能部署在docker容器中?》

《一道SQL问题,你来试试的?》

《FOF是什么?》

《如何捕获问题SQL解决过度CPU消耗的问题》

《了解一下ARM CPU架构》

《如何查看JVM运行的堆内存情况》

《Linux下如何快速删除大量碎小的文件?》

《打造国产技术产品的必要性》

《Oracle删除字段的方式和风险,你都了解么?》

《登录缓慢的诡异问题》

《Oracle相关提问的智慧技巧》

《PLSQL Developer几个可能的隐患》

《从70万字SRE神作提炼出的7千字精华文章》

《从数据误删到全量恢复的惊险记录》

《公众号600篇文章分类和索引》

你可能感兴趣的:(OGG能否复制迁移只包含CLOB列的表?)