• Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步。


    Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步。

    ogg要实现的功能:

    同步可以细化到单个表,满足特定的where条件rows同步,称号column同步。

    ogg 竞争对手:ibm cdc。dell shareplex;dsg。dds等等

    环境描写叙述:
    源头:windows 2003x64bit。 oracle db 11.2.0.3 x64bit
    目的端:suse linux 。oracle db 11.2.0.3

    预先准备:
    1.Microsoft Visual C ++ 2005 SP1 Redistributable Package
      注意点:第一:该c++的package 区分bit数,而且一定要下载sp1版本号的package。


              第二:仅仅要是在windows上使用ogg,这个c++的package就一定得装,
               无论db是不是oracle ,sqlserver,无论ogg用于源头数据库还是用于目的端数据库。

    2.ogg for windows x64bit 下的 oracle db 11.2.0.3 x64bit介质。--p18794252_1121023_MSWIN-x86-64.zip
    3.ogg for linux  x64bit 下的 oracle db 11.2.0.3 x64bit介质。--p18794252_1121023_Linux-x86-64.zip

      注意点:
      第一:ogg介质,除了基础版(比方说11.2.1.0.1。最后的这个.1就是基础版本号)能够从www.oracle.com下载。
     ogg的兴许补丁仅仅能从mos上下载。
      第二:ogg的介质区分os类型。db类型,db 版本号,db bit数。


     可是对于例如以下的情况是同一个ogg介质:oracle db 11.2.0.3 x64bit 安装在suse11下和安装在suse 10下。

    实施过程:
    1.上传介质到源头和目的端。


    2.在源头的实施过程:
    2.1 创建goldengate系统用户并授权
      Sql> create tablespace GGTBS datafile 'd:相关路径ggtbs01.dbf'size 1024M auextend on;
      Sql> Create user Goldengate default tablespace ggtbs identified by oracle;(目标数据库也创建这一个goldengate用户)
      Sql> grant dba to goldengate;
    2.2 将数据库设置为归档模式--一般的生产库都处于归档模式。
    2.3 打开源端数据库的附加日志
       Sql>alter databse add supplemental log data;
        切换日志使附加日志生效:
       Sql>alter system archive log current;
    2.4 检查源端数据库的附加日志
       Sql>select supplemental_log_data_min from v$database;
       --返回yes表示附加日志已经打开。
    2.5 打开源头数据库的force logging:
       sql> alter database force logging;
    2.6 对 主库 运行检查脚本,确认例如以下情况是否存在:找出唯一索引的索引列的列定义同意为null的

    select dic.table_owner, dic.table_name, dic.index_name, di.uniqueness,dic.column_name
    from dba_ind_columns  dic , dba_indexes di,dba_tab_columns dtc
    where dic.table_owner=’自行加入用户’and dtc.OWNER='自行加入用户’
    AND dic.table_owner=di.table_owner and dic.TABLE_NAME=di.table_name
    and dic.index_name=di.index_name
    and di.uniqueness='UNIQUE'     and dtc.owner=di.table_owner 
    and dtc.TABLE_NAME=di.table_name and dic.column_name=dtc.COLUMN_NAME  and dtc.nullable='Y'
    and dic.TABLE_NAME=dtc.TABLE_NAME

    --->自行加入用户请用须要同步的user来取代。
    对于查询出来的表和唯一索引名,请改动:要么变为非唯一索引,要么在保留唯一索引的情况下,将列的定义置为not null。

    2.7 如果将ogg软件放在d:ggs文件夹下,cmd界面下进入d:ggs
        ggsci>create subdirs   -->该命令的作用是在d:ggs下建立dirprm、dirdat、dirrpt等下级文件夹。
    2.8 ggsci>edit params ./GLOBALS
        加入例如以下的字符,之后保存退出
        MGRSERVNAME GGSSERVICE
    2.9 建立ogg的 windows service
       D:ggs>install addservice autostart


    2.10 为表加入补充日志
        ggsci>dblogin userid goldengate password oracle
        ggsci> add trandata USER1.*    --->注意:*后别加分号。
        ggsci> add trandata USER2.*    --->注意:*后别加分号。
        ggsci> add trandata USER3.*    --->注意:*后别加分号。   

        确认表的补充日志是否已经加入:
        select table_name from all_tables
        where owner='USER1' and table_name not in (select distinct table_name from dba_log_groups where owner='USER1');

    2.11 配置DDL复制
    SQL> GRANT EXECUTE ON UTL_FILE TO goldengate;
    ggsci>edit params ./GLOBALS  加入例如以下的字符,之后保存退出
    GGSCHEMA goldengate

    cmd下 cd 到d:ggs文件夹
    退出全部的oracle session
    sqlplus / as sysdba
    SQL> @marker_setup.sql
    SQL> @ddl_setup.sql
    SQL> @role_setup.sql
    SQL> grant ggs_ggsuser_role to goldengate;
    SQL> @ddl_enable.sql

    2.12 配置sequence的同步(若是备库是报表查询需求。请忽略此步)
    cmd下 cd 到d:ggs文件夹
    sqlplus / as sysdba
    SQL> @sequence.sql
    --->源头运行:SQL> GRANT EXECUTE on goldengate.updateSequence TO goldengate;
    --->目的端运行:SQL> GRANT EXECUTE on goldengate.replicateSequence TO goldengate;
    2.13 源端配置參数文件
    ggsci > edit params mgr
    加入例如以下參数,之后保存退出。


    port 7809
    autostart extract *
    autorestart extract *, waitminutes 1, retries 60, RESETMINUTES 60
    PURGEOLDEXTRACTS d:ggsdirdatst*, USECHECKPOINTS, MINKEEPHOURS 2


    ggsci> add  extract  extfull, tranlog, Threads 2, begin now
    --->以上命令是针对主库是rac2个节点的情况,若是单机,请忽略Threads 2

    ggsci >edit  params  extfull
    加入例如以下參数,之后保存退出
    extract extfull
    setenv ( NLS_LANG = " AMERICAN_AMERICA.ZHS16GBK " )
    --TRANLOGOPTIONS ASMUSER SYS@ASM1, ASMPASSWORD oracle
    --THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 80000 IOLATENCY 160000

    DBOPTIONS ALLOWUNUSEDCOLUMN
    userid goldengate, password oracle

    ddl include mapped

    ddloptions addtrandata RETRYOP MAXRETRIES 1000 RETRYDELAY 10, REPORT

    WARNLONGTRANS 1h, CHECKINTERVAL 5m

    exttrail d:ggsdirdatst
    gettruncates
    dynamicresolution

    tableexclude 'USER.cncdata';
    tableexclude 'USER.sb_czm_pyDD';

    table USER1.*;
    table USER2.*;
    table USER3.*;

    sequence USER1.*;
    sequence USER2.*;
    sequence USER3.*;

    2.14 加入trail文件,文件名称为d:ggsdirdatst,是由extfull抽取进程来写这个trail文件,每一个trail文件的最大大小为50M
    ggsci> add exttrail  d:ggsdirdatst, extract extfull, MEGABYTES 50
    --->注意:
    注意:源头的trail文件名称一定要与目的端的trail文件名称用不同的名称,比方:
    源头的trail文件名称/u02/ggs/dirdat/sd
    目的端的trail文件名称/u02/ggs/dirdat/td
    原因是:ogg trail文件的删除机制(检查点机制)是以一整套复制环境(源头和目的端)为标准推断的:
    这样就有可能造成这么一个后果:源头的trail文件号到了1000,目的端trail文件号到了100。而且源头和目的端trail文件名称同名,因为存在

    100,所以,源头能删除的trail文件号是<100的。

    这样会导致源头trail 不能及时删除,进而造成源头$GG_HOME的文件系统使用率100%。进而造

    成ext进程抽取形成的trail文件无处存放而导致ext进程 abend。

    2.15 在源端加入传输进程dpfull,此传输进程传输的是源端形成的d:ggsdirdatst这个trail文件
    ggsci> add extract dpfull exttrailsource d:ggsdirdatst

    2.16 创建远程队列文件(文件名称为/u02/ggs/dirdat/tt)并将其指定给传输进程。相同能够指定大小为50M
    ggsci> add rmttrail /u02/ggs/dirdat/tt, extract dpfull, MEGABYTES 50

    2.17 编辑dpfull进程的參数:
    ggsci> edit params dpfull
    加入例如以下參数,之后保存退出
    extract dpfull
    passthru
    rmthost 目的端IP, mgrport 7809
    rmttrail /u02/ggs/dirdat/tt
    gettruncates
    table USER1.*;
    table USER2.*;
    table USER3.*;

    sequence USER1.*;
    sequence USER2.*;
    sequence USER3.*;


    2.18 源端数据库查询出一个scn号:
    select current_scn from v$database;
    --12754579013479

    请牢记这个scn号,在目的端第一次启动rep进程时。会用到这个scn号

    源端開始依照此scn号開始导出数据
    expdp  sys/****** directory=exp dumpfile=trff_app%U.dmp logfile=trff_app_exp.log schemas=trff_app  parallel=4

    flashback_scn=12754579013479

    3.在目的端的实施过程:
    3.1 配置环境变量信息:
    备库是Linux os时:
    vi .bash_profile
    export PATH=$PATH:$ORACLE_HOME/bin:/u02/ggs
    export LD_LIBRARY_PATH=/u02/ggs:$ORACLE_HOME/lib

    3.2 创建goldengate系统用户并授权
      Sql> create tablespace GGTBS datafile '/u02/相关路径/ggtbs01.dbf'size 1024M auextend on;
      Sql> Create user Goldengate default tablespace ggtbs identified by oracle;(目标数据库也创建这一个goldengate用户)
      Sql> grant dba to goldengate;
    3.3配置mgr參数文件:
    ggsci > edit params mgr
    port 7809
    --autostart replicat *
    --autorestart replicat *, waitminutes 1, retries 60, RESETMINUTES 60
    --PURGEOLDEXTRACTS /u02/ggs/dirdat/tt*, USECHECKPOINTS, MINKEEPHOURS 2

    3.4 在目的端加入checkpointtable
    ggsci> dblogin  userid goldengate, password oracleoracle
    ggsci> ADD CHECKPOINTTABLE goldengate.ckptfull
    ggsci> add replicat repfull, exttrail /u02/ggs/dirdat/tt, CHECKPOINTTABLE goldengate.ckptfull
    ggsci> edit params repfull
    replicat repfull
    setenv ( NLS_LANG =  " AMERICAN_AMERICA.ZHS16GBK " )

    assumetargetdefs

    userid goldengate, password oracle

    DBOPTIONS DEFERREFCONST, SUPPRESSTRIGGERS
    gettruncates
    ALLOWNOOPUPDATES
    ddl include mapped

    discardfile ./dirrpt/repfull.dsc, append, megabytes 5000

    map USER1.*, target USER1.*;
    map USER2.*, target USER2.*;
    map USER3.*, target USER3.*;

    配置完成:

    注意:以上repfull进程请不要启动。repfull进程在impdp导入完数据之后再启动。

    在目的库运行impdp运行数据导入,完毕导入后,再运行以下的步骤。
    启动目的端rep进程之前, 请务必确认例如以下的事项已经完毕:

    第一, 在rep參数文件里有參数DEFERREFCONST禁用级联删除

    第二, 在rep參数文件里有參数SUPPRESSTRIGGERS 在rep进程执行时抑制目的端数据库的触发器生效。
    注意:SUPPRESSTRIGGERS此參数只对10.2.0.5 及以后。11.2.0.2及以后的oracle 数据库版本号才有效。所以,若是目的端数据库是10.2.0.4,还须要在目的端数据库中手工禁用触发器(用plsql dev就能够禁用)

    第三。 Impdp已经导入完毕,这是必须的,这一点我不用再多解释了。

    第一次启动repfull进程时。请使用例如以下的命令来启动:
    start repfull, aftercsn 12754579013479


    參考资料:
    docs.oracle.com
    support.oracle.com

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    百度MIP(百度版的google AMP)了解一下?
    温故而知新 forEach 无法中断(break)的问题
    温故而知新 微信公众号调试和开发套路指南
    winform中键盘和鼠标事件的捕捉和重写
    大批量导入数据的SqlBulkCopy类
    IE6-IE9兼容性问题列表及解决办法:锁表头的JQuery方案和非JQuery方案(不支持IE6,7,8)
    不同版本的SQL Server之间数据导出导入的方法及性能比较
    C# 创建windows 服务
    Asp.Net 如何获取所有控件&如何获取指定类型的所有控件
    用SQL语句将远程SQL Server数据库中表数据导入到本地数据库相应的表中
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4915272.html
Copyright © 2020-2023  润新知