如何解决Oracle GoldenGate 没有主键的问题?



本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客

本文链接地址: 如何解决Oracle GoldenGate 没有主键的问题?

针对没有主键的情况,GoldenGate大概提供了3种方案,大致如下:

1、默认使用所有列当主键,通过keycols来实现,这种其实存在一定的问题,在这次的项目中直接否定。
2、通过在源端表中添加ogg_key_id列的方式来实现,这可能会影响应用,因此也直接否定。
3、通过在目标端的表中添加rowid类型的伪列,来实现。通过测试,发现这种相对靠谱,如下是我的测试过程.

我这里测试的ogg抽取9208 Dataguard standby,同步到10205的例子。另外,我们这里9i的环境和10g环境均在同一个主机.

1、源端

说明:这里我模拟的是9i环境超过32列的情况.

—创建测试表

SQL> conn roger/roger
Connected.
SQL> create table t_ALL_TABLES as select * from sys.ALL_TABLES where 1=2;Table created.

—源端OGG配置

GGSCI (killdb.com) 2> view param ext_stdextract ext_stduserid ggs@killdb,password ggstranlogoptions archivedlogonlytranlogoptions altarchivelogdest /home/ora9/arch_sexttrail /home/ora9/ggs/dirdat/radiscardfile ./dirrpt/exta.dsc,append, megabytes 500fetchoptions USEROWIDtable roger.t_all_tables, tokens (TKN-ROWID = @GETENV ("RECORD", "rowid")) keycols (owner) ;table roger.t_buffer;GGSCI (killdb.com) 3> view param dp1EXTRACT dp1
RMTHOST 192.168.109.12, MGRPORT 7809 TCPBUFSIZE 5000000
PASSTHRU
RMTTRAIL  ./dirdat/r1
NUMFILES 3000TABLE roger.*;GGSCI (killdb.com) 5> dblogin userid ggs@killdb,password ggs
Successfully logged into database.GGSCI (killdb.com) 6> add trandata roger.t_all_Tables cols(owner) nokey2014-12-17 01:49:59  WARNING OGG-00869  No unique key is defined for table T_ALL_TABLES. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.Logging of supplemental redo data enabled for table ROGER.T_ALL_TABLES.

2. 目标端

—创建测试表

www.killdb.com>create table t_all_tables as select * from sys.all_tables where 1=2;Table created.www.killdb.com>alter table t_all_Tables drop column STATUS ;Table altered.www.killdb.com>alter table t_all_Tables drop column DROPPED;Table altered.www.killdb.com>alter table t_all_tables add (row_id rowid);Table altered.www.killdb.com> alter table roger.t_all_Tables add constraint t_all_tables_pk unique (row_id) enable;Table altered.

—目标端OGG配置

GGSCI (killdb.com) 2> view param rep6replicat rep6
userid  ggs@Roger,password AADAAAAAAAAAAADAKHEJYIFGVAKDPFZBGDFJNEQBBJRISJAAOCHHZEWCEFTCRIRCJDSHUHAJZBFDZEWC,encryptkey kasaur_key
reperror default, discard
discardfile ./dirrpt/rep6.dsc, append, megabytes 50
handlecollisions
assumetargetdefs
----allownoopupdates
numfiles 3000map roger.t_buffer, target roger.t_buffer;
map roger.t_all_tables , target roger.t_all_tables colmap (usedefaults, row_id = @token ("TKN-ROWID")) keycols (row_id);

3. 启动进程

–源端

GGSCI (killdb.com) 5> info allProgram     Status      Group       Lag           Time Since ChkptMANAGER     RUNNING
EXTRACT     RUNNING     DP1         00:00:00      00:00:07
EXTRACT     RUNNING     EXT_STD     00:00:00      00:00:07

—目标端

GGSCI (killdb.com) 3> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING
JAGENT      STOPPED
EXTRACT     ABENDED     DP1         00:00:00      568:19:49
EXTRACT     ABENDED     EXT1        00:00:00      309:16:06
REPLICAT    STOPPED     REP5        00:00:00      596:25:54
REPLICAT    RUNNING     REP6        00:00:00      00:00:02

4. 源端插入测试数据

模拟insert:
–源端

SQL> insert into t_all_Tables select * from sys.all_Tables where rownum < 11;10 rows created.SQL> commit;Commit complete.SQL> alter system switch logfile;System altered.SQL>

—-目标端

www.killdb.com>select count(1) from t_all_Tables;COUNT(1)
----------10
www.killdb.com>select owner,table_name,row_id from t_all_Tables;OWNER                          TABLE_NAME                     ROW_ID
------------------------------ ------------------------------ ------------------
SYS                            SEG$                           AAAH3QAABAAAV0yAAA
SYS                            CLU$                           AAAH3QAABAAAV0yAAB
SYS                            OBJ$                           AAAH3QAABAAAV0yAAC
SYS                            FILE$                          AAAH3QAABAAAV0yAAD
SYS                            COL$                           AAAH3QAABAAAV0yAAE
SYS                            CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ10 rows selected.

模式delete

–源端

SQL> delete from t_all_tables where rownum < 5;4 rows deleted.SQL> commit;Commit complete.SQL> alter system switch logfile;System altered.SQL> select count(1) from t_all_tables;COUNT(1)
----------6SQL> select owner,table_name,rowid from t_all_tables;OWNER                          TABLE_NAME                     ROWID
------------------------------ ------------------------------ ------------------
SYS                            COL$                           AAAH3QAABAAAV0yAAE
SYS                            CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ6 rows selected.

—目标端:

www.killdb.com>select count(1) from t_all_Tables;COUNT(1)
----------6www.killdb.com>select owner,table_name,row_id from t_all_Tables;OWNER                          TABLE_NAME                     ROW_ID
------------------------------ ------------------------------ ------------------
SYS                            COL$                           AAAH3QAABAAAV0yAAE
SYS                            CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ6 rows selected.www.killdb.com>

模拟update

—源端:

SQL> select owner,table_name,rowid from t_all_tables;OWNER                          TABLE_NAME                     ROWID
------------------------------ ------------------------------ ------------------
SYS                            COL$                           AAAH3QAABAAAV0yAAE
SYS                            CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ6 rows selected.SQL> update t_all_tables set owner='killdb.com' where table_name='COL$';1 row updated.SQL> update t_all_tables set owner='killdb.com' where rowid='AAAH3QAABAAAV0yAAF';1 row updated.SQL> commit;Commit complete.SQL> alter system switch logfile;System altered.SQL> select owner,table_name,rowid from t_all_tables;OWNER                          TABLE_NAME                     ROWID
------------------------------ ------------------------------ ------------------
killdb.com                     COL$                           AAAH3QAABAAAV0yAAE
killdb.com                     CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ6 rows selected.

–目标端:

www.killdb.com> select owner,table_name,row_id from t_all_Tables;OWNER                          TABLE_NAME                     ROW_ID
------------------------------ ------------------------------ ------------------
killdb.com                     COL$                           AAAH3QAABAAAV0yAAE
killdb.com                     CON$                           AAAH3QAABAAAV0yAAF
SYS                            PROXY_DATA$                    AAAH3QAABAAAV0yAAG
SYS                            USER$                          AAAH3QAABAAAV0yAAH
SYS                            IND$                           AAAH3QAABAAAV0yAAI
SYS                            FET$                           AAAH3QAABAAAV0yAAJ6 rows selected.www.killdb.com>

我们可以看到ogg完全是可以支持利用构造rowid伪列的方式来解决没有主键的问题。 然而这种方法
也有一个很大的问题:迁移之后,新环境中的row_id 伪列需要进行drop,这个drop的动作是非常坑爹的。

例如我们客户这里的系统,均为2.5TB以上的,最大12TB的库,那么drop column就疯掉了。



About Me

...............................................................................................................................

● 本文转载自:http://www.killdb.com/2014/12/18/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3oracle-goldengate-%E6%B2%A1%E6%9C%89%E4%B8%BB%E9%94%AE%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9F.html

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2141852/,如需转载,请注明出处,否则将追究法律责任。

如何解决Oracle GoldenGate 没有主键的问题?相关推荐

  1. Oracle-No.04 Oracle视图加主键解决hibernate复合主键问题

    2019独角兽企业重金招聘Python工程师标准>>> Oracle视图默认是没有主键的,因此在用hibernate反向生成java类时,会自动采用复合主键,多生成一个类名+ID的类 ...

  2. Oracle与Mysql主键、索引及分页的区别小结

    Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...

  3. oracle主键增长方式,oracle 自增长主键

    oracle自增长主键 首先,你要有一张表!CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHO ...

  4. oracle联合主键怎么找,Oracle数据库联合主键

    1.定义: 主键:在Oracle中,主键指能唯一标识一条记录的单个数据表列或联合的数据表列(联合主键|复合主键).主键用到的数据                   表列数据不能包含空值.而且,一张表 ...

  5. Oracle数据库实现主键自增(利用sequence)和分页查询(利用rownum)

    一.Oracle数据库实现主键自增必须通过sequence来实现 注意:sequence在每次调用nextval就会自增1 create sequence seq_user; --创建一个user表的 ...

  6. 解决mybatisPlus插入数据主键突然很大

    解决mybatisPlus插入数据主键突然很大 1.在管理员窗口进入对应的数据库,然后输入下面的指令: alter table sys_user AUTO_INCREMENT=30; ​sys_use ...

  7. Oracle 如何删除主键新增主键

    Oracle 如何删除主键新增主键 ALTER TABLE 表名 drop CONSTRAINT 主键名; ALTER TABLE 表名 add CONSTRAINT 主键名 primary key ...

  8. oracle的Oem中设置联合主键,oracle添加联合主键,oracle联合主键

    oracle添加联合主键,oracle联合主键 alter table tablename add constraint unionkeyname primary key (column1,colum ...

  9. oracle列添加主键约束,Oracle如何添加主键约束

    工具/材料 SQL Developer 操作方法 01 首先打开SQL Developer软件,找一个没有主键约束的表,如下图所示 02 然后我们新建一个查询,在界面中输入如下的约束修改语句,如下图所 ...

最新文章

  1. 清华人工智能发展报告:过去十年中国AI专利申请量全球第一
  2. Java 文件及文件夹复制
  3. 西藏最大云计算数据中心明年投入试运营
  4. c语言知道坐标求线段长度,C语言编写程序:输入任意3线段的长度,判断组成三角形的种类...
  5. Python 面向对象编程(进阶部分)
  6. numpy中的方差、协方差、相关系数
  7. JavaScript原生Ajax
  8. 安卓app开发工具_手机APP开发会涉及到哪些知识点呢?
  9. UE4官方文档UI学习:3.UMG 创建暂停菜单
  10. 基于单片机的智能数字电子秤设计
  11. GIS应用技巧之植被制图
  12. 基于arm板linux的语音合成,基于ARM7和μCLinux的中文电子语音阅读系统的研究与应用...
  13. 编辑中的word变成只读_word只读模式怎么改 word保存文件提示此文件为只读无法保存修改方法...
  14. 长沙计算机学院欧阳登轶,我校学生在2020年湖南省第十六届“强智杯”大学生计算机程序设计竞赛中喜获一等奖...
  15. 迈微科讯 | 最新科技发展资讯
  16. 蓝桥杯:三升排序——————Python
  17. Android手机直播(一)总览
  18. 免费申报!5G网络Awards参评企业征集,欢迎参与!
  19. java_进阶:set 接口
  20. 微信小程序——API promise化,全局数据共享,MobX,将Stroe中的成员绑定到页面中,在页面上使用Strore中的成员

热门文章

  1. ROS:rosdep init 安装问题解决方案-转载
  2. Python高效实现滑块验证码自动操纵
  3. JAVA练习243-唯一摩尔斯密码词
  4. 【Node】Error: ENOENT: no such file or directory,解决方案
  5. 微信支付接口,提示:调用支付jsapi缺少参数: $key0$
  6. 传奇脚本显示服务器开区时间代码,GOM引擎活动页面脚本,传奇私服服务端添加开即时真假半兽人脚本...
  7. SAP整车订单下达接口的最佳实践
  8. 牛客网 - [牛客假日团队赛5]金币馅饼(dp)
  9. HFish 蜜罐安装及使用
  10. Android高工:细说 Android 多线程,211本硕如何通过字节跳动、百度、美团Android面试