美文网首页数据仓库DWDBA修炼之道我爱编程
ogg oracle到oracle支持DDL复制配置

ogg oracle到oracle支持DDL复制配置

作者: monotseng | 来源:发表于2016-11-11 12:33 被阅读907次

    1. 目的说明

    本文提供Oracle GoldenGate在Oracle db到Oracle db的数据复制安装配置指导,适用于入门练习使用,生产环境配置,在关键步骤和重要参数设置需要小心对待。

    2. 参考文档

    《叱咤风云GoldenGate企业级运维实战》
    《Expert Oracle GoldenGate》
    Oracle GoldenGate Document
    戴明明博客
    惜分飞博客

    3. 准备系统

    准备好两套已经装好Oracle db和Oracle GoldenGate for Oracle的环境。

    source db:
    ip:192.168.5.191
    db type:Oracle db 11.2.1.0.4
    
    target db:
    ip:192.168.5.191
    db type:Oracle db 11.2.1.0.4
    
    GoldenGate:
    ogg type:GoldenGate for Oracle 12.2.0.1
    

    4. 配置source db

    4.1 配置source db参数

    source db的配置主要是归档模式修改、附加日志的添加、强制日志和ddl语句的支持。

    查看source db归档、附加日志和强制日志:

    select log_mode,supplemental_log_data_min,force_logging from v$database;
    

    4.1.1 修改归档模式

    创建归档目录,archivelog目录用sid区别

    mkdir -p /u02/archivelog/orcl
    

    修改归档日志存储目录

    alter system set log_archive_dest_1 = 'location=/u02/archivelog/orcl' scope = both;
    

    修改归档日志格式

    alter system set log_archive_format = 'arc_%t_%s_%r.arc' scope = spfile;
    

    重启数据库,修改归档模式

    shutdown immediate; 
    startup mount; 
    alter database archivelog; 
    alter database open;
    

    4.1.2 强制日志变更

    alter database force logging;
    

    4.1.3 添加附加日志

    alter database add supplemental log data;
    

    4.1.4 修改GoldenGate参数

    alter system set enable_goldengate_replication = true scope = both;
    

    4.1.4 配置DDL语句支持

    创建存放ddl信息的GoldenGate用户:

    create tablespace tbs_ogg datafile '/u02/oradata/orcl/tbs_ogg_dat01.dbf' size 10M autoextend on next 8M maxsize 32000M;
    create user ogg identified by ogg default tablespace tbs_ogg;
    

    授权GoldeGate用户 :

    grant dba to ogg ;
    

    进入GoldenGate目录,调用SQL脚本:

    cd $GGATE
    sqlplus / as sysdba
    
    SQL> @marker_setup.sql;
    #输入准备好的用户ogg
    
    SQL> @ddl_setup.sql;
    #输入准备好的用户ogg 
    
    SQL> @role_setup.sql;
    #输入准备好的用户ogg
    
    #根据上面执行结果的提示授权角色给ogg用户
    SQL> grant GGS_GGSUSER_ROLE to ogg;
    
    SQL> @ddl_enable.sql;
    
    SQL> @ddl_pin ogg
    

    至此,ddl语句的支持配置完成。

    4.2 配置source db manager进程

    进入GoldenGate目录,创建工作区目录:

    cd $GGATE
    ./ggsci
    
    GGSCI (dbserver) 1> create subdirs
    
    Creating subdirectories under current directory /u01/ogg/12.2.0/oggcore_1
    
    Parameter files                /u01/ogg/12.2.0/oggcore_1/dirprm: created
    Report files                   /u01/ogg/12.2.0/oggcore_1/dirrpt: created
    Checkpoint files               /u01/ogg/12.2.0/oggcore_1/dirchk: created
    Process status files           /u01/ogg/12.2.0/oggcore_1/dirpcs: created
    SQL script files               /u01/ogg/12.2.0/oggcore_1/dirsql: created
    Database definitions files     /u01/ogg/12.2.0/oggcore_1/dirdef: created
    Extract data files             /u01/ogg/12.2.0/oggcore_1/dirdat: created
    Temporary files                /u01/ogg/12.2.0/oggcore_1/dirtmp: created
    Credential store files         /u01/ogg/12.2.0/oggcore_1/dircrd: created
    Masterkey wallet files         /u01/ogg/12.2.0/oggcore_1/dirwlt: created
    Dump files                     /u01/ogg/12.2.0/oggcore_1/dirdmp: created
    

    编辑配置manager参数文件 :

    #确认下进程
    GGSCI (dbserver) 2> info all
    
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    
    MANAGER     STOPPED
    
    #编辑manager参数文件
    GGSCI (dbserver) 4> edit params mgr
    
    #添加以下内容
    port 7809
    accessrule, prog *, ipaddr 192.168.5.192, allow
    dynamicportlist  7800-7900
    accessrule, prog server, allow
    autorestart extract *, retries 5, waitminutes 7
    purgeoldextracts /u01/ogg/12.2.0/oggcore_1/dirdat/*, usecheckpoints, minkeepdays 10
    lagreporthours 1
    laginfominutes 30
    lagcriticalminutes 45
    

    manager参数文件解释:

    port 7809
    通信端口7809,source db和target db需要保持一致。
    
    dynamicportlist  7800-7900
    动态端口列表的范围从7800到7900。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
    
    autorestart extract *, retries 5, waitminutes 7
    当提取进程中断后尝试自动重启,每隔7分钟尝试启动一次,尝试5次。OGG运维人员通常会注释掉这条配置,更喜欢用手工重启的方式来控制。
    
    purgeoldextracts ./dirdat/*, usecheckpoints, minkeepdays 10
    定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。
    
    lagreporthours 1
    每隔一小时检查一次传输延迟情况
    
    laginfominutes 30
    传输延时超过30分钟将写入错误日志
    
    lagcriticalminutes 45
    传输延时超过45分钟将写入警告日志
    

    对需要的表添加trandata

    cd $GGATE
    
    ./ggsci
    
    GGSCI (oracledb1 as ogg@orcl) 3> dblogin userid ogg password ogg
    Successfully logged into database.
    
    #对需要的表添加trandata
    GGSCI (oracledb1 as ogg@orcl) 4> add trandata scott.emp
    
    Logging of supplemental redo log data is already enabled for table SCOTT.EMP.
    
    TRANDATA for instantiation CSN has been added on table 'SCOTT.EMP'.
    

    4.3 配置source db extract进程

    添加一个extract进程 :

    GGSCI (dbserver) 11> add extract exta,tranlog,begin now
    EXTRACT added.
    

    编辑extract参数文件:

    GGSCI (dbserver) 13> edit params exta
    #添加以下内容
    extract exta
    setenv (nls_lang="american_america.utf8")
    userid ogg, password ogg
    reportcount every 30 minutes, rate
    discardfile /u01/ogg/12.2.0/oggcore_1/dirrpt/ea.dsc, append, megabytes 1024
    discardrollover at 3:00
    warnlongtrans 2h, checkinterval 300
    exttrail /u01/ogg/12.2.0/oggcore_1/dirdat/ea
    --dynamicresolution
    dboptions allowunusedcolumn
    fetchoptions nousesnapshot
    fetchoptions fetchpkupdatecols
    --cachemgr cachesize 8000mb, cachedirectory  /u01/ogg/12.2.0/oggcore_1/temp
    
    ddl &
    include mapped objname scott.emp     &
    include mapped objname scott.dept      ;
    
    table scott.emp;
    table scott.dept;
    

    extract参数文件说明:

    setenv (NLS_LANG="american_america.utf8")
    设置字符集环境变量为UTF8
    如果系统中存在多个数据库有时候会用参数SETENV设置ORACLE_HOME、ORACLE_SID等,例如:
    setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
    setenv (ORACLE_SID = "orcl")
    
    reportcount every 30 minutes, rate
    每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
    
    discardfile /u01/ogg/12.2.0/oggcore_1/dirrpt/exta.dsc, append, megabytes 1024
    将执行失败的记录保存在discard file中,
    该文件位于/u01/ogg/12.2.0/oggcore_1/dirrpt/exta.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。 
    
    discardrollover at 3:00
    为了防止discard file被写满,每天3:00做一次文件过期设定
    
    warnlongtrans 2h, checkinterval 300
    每隔300s检查一下大事务,超过2小时还没结束的进行报告
    
    exttrail /u01/ogg/12.2.0/oggcore_1/dirdat/ea
    队列文件路径
    
    dynamicresolution
    有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
    
    dboptions  allowunusedcolumn
    当抽取进程遇到一个没有使用的字段时只生成一个警告,进程会继续执行而不会被异常终止(abend)
    
    fetchoptions nousesnapshot
    不会从闪回日志中获取数据
    
    fetchoptions fetchpkupdatecols
    当使用了HANDLECOLLISIONS时,请使用该参数。
    复制进程出现丢失update记录(missing update)并且更新的是主键,update将转换成insert。由于插入的记录可能不是完整的行,若要保证完整需要加入此参数
    
    cachemgr cachesize 8000mb, cachedirectory /u01/ogg/12.2.0/oggcore_1/temp
    在/u01/ogg/12.2.0/oggcore_1/temp目录设置虚拟内存
    

    创建本地trail文件 :

    GGSCI (dbserver) 13> add exttrail /u01/ogg/12.2.0/oggcore_1/dirdat/ea,extract exta
    EXTTRAIL added.
    

    4.4 配置source db pump进程

    添加一个pump进程(本质上也是extract进程),并指定本地trail文件:

    GGSCI (dbserver) 14> add extract pumpa,exttrailsource /u01/ogg/12.2.0/oggcore_1/dirdat/ea
    EXTRACT added.
    

    编辑pump参数文件:

    GGSCI (dbserver) 16> edit params pumpa
    #添加以下内容
    extract pumpa
    rmthost 192.168.5.192, mgrport 7809, compress
    passthru
    numfiles 5000
    rmttrail /u01/ogg/12.2.0/oggcore_1/dirdat/pa
    --dynamicresolution
    ddl
    
    table scott.emp;
    table scott.dept;
    

    pump参数文件说明:

    rmthost 10.10.10.1, mgrport 7839, compress
    target db主机ip,管理进程端口号,投递前压缩队列文件
    
    numfiles 5000
    最多处理5000张表
    
    rmttrail /u01/ogg/12.2.0/oggcore_1/dirdat/pt
    target db保存队列文件的目录
    
    passthru
    采用pass-through模式处理表
    
    dynamicresolution
    动态解析表名,此参数在12.2中start进程时会提示已经deprecated(废弃)
    

    指定远程trail文件:

    GGSCI (dbserver) 19> add rmttrail /u01/ogg/12.2.0/oggcore_1/dirdat/pa,extract pumpa
    RMTTRAIL added.
    

    指定本地trail文件:

    GGSCI (dbserver1 20> add exttrail /u01/ogg/12.2.0/oggcore_1/dirdat/pa, extract pumpa
    EXTTRAIL added.
    

    4.5 启动source进程

    新开一个ssh窗口,打开ggserr.log日志,实时等待查看启动日志:

    cd $GGATE
    tail -f 50 ggserr.log
    

    切回前面配置窗口,检查各项配置,然后启动进程:

    cd $GGATE
    ./ggsci
    
    #查看extrac进程,启动进程后注意查看ggserr.log的日志信息,确认无警告错误,启动pump进程需先启动target db的mgr进程,否则会报错无法启动:
    GGSCI (oracledb1) 2> start mgr
    GGSCI (oracledb1) 2> start exta
    GGSCI (oracledb1) 2> start pumpa
    GGSCI (oracledb1) 2> info mgr detail
    GGSCI (oracledb1) 2> info exta detail
    GGSCI (oracledb1) 2> info pumpa detail
    

    如果发现错误和异常,根据OGG_ERROR_CODE排查问题。

    5. 配置target db

    5.1 配置target db参数

    5.1.1 创建GoldenGate用户

    创建GoldenGate用户:

    create tablespace tbs_ogg datafile '/u02/oradata/orcl/tbs_ogg_dat01.dbf' size 10M autoextend on next 8M maxsize 32000M;
    create user ogg identified by ogg default tablespace tbs_ogg;
    

    授权GoldeGate用户 :

    grant dba to ogg;
    

    5.1.2 添加checkpoint表

    GGSCI (dbserver) 21> edit params ./GLOBALS
    #添加以下内容
    ggschema ogg
    checkpointtable ogg.checkpoint
    
    #登陆target db添加checkpoint表
    GGSCI (dbserver) 1> dblogin userid ogg, password ogg
    Successfully logged into database.
    
    GGSCI (dbserver as ogg@orcl) 2> add checkpointtable ogg.checkpoint
    
    Successfully created checkpoint table ogg.checkpoint.
    

    5.1 配置target db manager进程

    编辑manager参数文件:

    GGSCI (dbserver as ogg@orcl) 4> edit params mgr
    
    #添加以下内容
    port 7809
    userid ogg, password ogg
    accessrule, prog *, ipaddr 192.168.5.192, allow
    accessrule, prog server, allow
    dynamicportlist 7840-7914
    autorestart extract *,retries 5,waitminutes 3
    purgeoldextracts /u01/ogg/12.2.0/oggcore_1/dirdat/*,usecheckpoints, minkeepdays 5
    --purgeddlhistory minkeepdays 7, maxkeepdays 10
    lagreporthours 1
    laginfominutes 30
    lagcriticalminutes 45
    

    manager参数文件说明:

    port 7839
    通信端口7839。 生产端和灾备端需要保持一致。
    
    dynamicportlist  7840-7914
    动态端口列表的范围从7840到7914。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
    
    autorestart extract *,retries 5,waitminutes 3
    当提取进程中断后尝试自动重启,每隔7分钟尝试启动一次,尝试5次。ogg运维人员通常会注释掉这条配置,更喜欢用手工重启的方式来控制。
    
    purgeoldextracts /u01/ogg/12.2.0/oggcore_1/dirdat/*, usecheckpoints, minkeepdays 5
    定期清理dirdat路径下的远程队列(remote trail)。保留期限5天,过期后自动删除。从而控制队列文件的目录不会增长过大。
    
    purgeddlhistory minkeepdays 7, maxkeepdays 10
    删除ddl历史表,最小保存7天,最大保存10天。由于此项目没有开启ddl,所以该参数被注释。
    
    purgemarkerhistory minkeepdays 7, maxkeepdays 10
    删除marker历史表,最小保存7天,最大保存10天。此项目没有使用该参数,所以该参数被注释。
    
    lagreporthours 1
    每隔一小时检查一次传输延迟情况
    
    laginfominutes 30
    传输延时超过30分钟将写入错误日志
    
    lagcriticalminutes 45
    传输延时超过45分钟将写入警告日志
    

    5.2 配置target db replicat进程

    添加一个replicat进程 :

    GGSCI (dbserver as ogg@orcl) 4> add replicat repa,exttrail /u01/ogg/12.2.0/oggcore_1/dirdat/pa
    

    编辑replicat参数文件:

    GGSCI (dbserver as ogg@orcl) 6> edit params repa
    
    #添加以下内容
    replicat repa
    
    setenv (nls_lang = "american_america.utf8")
    setenv (oracle_sid = "xxxx" )
    userid ogg, password ogg
    --sqlexec "alter session set constraints=deferred"
    
    dboptions deferrefconst
    gettruncates
    report at 06:00
    reportcount every 30 minutes, rate
    reportrollover at 02:00
    reperror default, abend
    --handlecollisions
    --dynamicresolution
    allownoopupdates
    --assumetargetdefs
    discardfile /u01/ogg/12.2.0/oggcore_1/dirrpt/repa.dsc, append, megabytes 1024
    discardrollover at 02:00
    ddl
    
    map scott.emp, target scott.emp;
    map scott.dept, target scott.dept;
    

    replicat参数文件说明:

    setenv (NLS_LANG="american_america.utf8")
    设置字符集环境变量为utf8
    如果系统中存在多个数据库有时候会用参数setenv设置oracle_home、oracle_sid等,例如:
    setenv (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
    setenv (ORACLE_SID = "orcl")
    
    dboptions deferrefconst
    约束延迟设置,在复制进程的事物被提交之前,延迟级联删除、级联更新时的校验和实施。
    
    gettruncates
    不捕获source db truncate table的操作 
    
    report at 06:00
    每天早上6点报告
    
    reportcount every 30 minutes, rate
    每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
    
    reportrollover at 02:00
    为了防止report file被写满,每天2:00做一次文件过期设定
    
    reperror default, abend
    除了特殊指定的reperror语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。
    
    handlecollisions
    当target db已经存在数据的情况下,解决复制过程中出现的冲突。如果要重新做初始化,可以删除drop target db后再rman恢复,这样做的话就不需要该参数
    
    allownoopupdates
    当source db有某些列但是目标表却没有,或者复制进程中配置了colsexcept 参数 在这些情况下,当生产端对那些列进行更新,目标表将不发生任何变化
    
    assumetargetdefs
    使用assumetargetdefs参数时,用map语句中指定的source db源表和target db目标表具有相同的列结构。它指示的oracle goldengate不在source db查找源表的结构定义
    
    discardfile /u01/ogg/12.2.0/oggcore_1/dirrpt/rep1.dsc, append, megabytes 1024m
    将执行失败的记录保存在discard file中,该文件位于/u01/ogg/12.2.0/oggcore_1/dirrpt/ext1.dsc,大小为1024mb。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录
    
    discardrollover at 02:00
    为了防止discard file被写满,每天2:00做一次文件过期设定
    

    6. 故障排查trouble shooting

    相关文章

      网友评论

        本文标题:ogg oracle到oracle支持DDL复制配置

        本文链接:https://www.haomeiwen.com/subject/pgkfpttx.html