ogg oracle到oracle支持DDL复制配置

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容