GOLDENGATE安装
1. 下载与数据库对应版本的goldengate安装介质。
2. 创建goldengate系统用户,设置用户环境变量,如果是oracle,建议直接使用oracle作为用户安装。
3. 创建goldengate数据库用户,并授予足够权限,该用户至少应该有connect、resource、select any dictionary、select any table的权限。当然授予dba权限的话,那么就涵盖了所需的所有权限。
在此处使用的oracle数据库用户为 ggs 密码也是ggs。 提醒一天,ggs尽量使用自己的表空间。这样可以有效的进行维护。
建议脚本
SQL> grant connect, resource,unlimited tablespace,select any dictionary, select any table,insert any table,update any table,delete any table,alter any table,flashback any table
to ggs;
SQL>grant execute on dbms_flashback to ggs;
SQL>grant execute on utl_file to ggs;
4. 将源端数据库设置为归档模式。
SQL>alter database archivelog;
SQL>archive log list;
注意 归档是需要重启的。所以请妥善管理好时间。
5. 将源端数据库的附加日志打开
SQL>select supplemental_log_data_min from v$database;
如果没有打开,则使用以下sql命令打开附加日志
SQL>alter database add supplemental log data;
6. 打开force logging
SQL>alter database force logging;
7. 将goldengate安装介质上传到服务器,解压缩包。
8. 在解压缩包后的根目录,也就是goldengate工作目录,运行 ./ggsci命令进入ggsci命令提示符界面,运行create subdirs:等待命令结束,goldengate安装完成。
可能遭遇的错误以及该如何处理的过程:
scp ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip oracle@172.25.0.10:/oracle/
mkdir -p /oracle/insogg/
unzip /oracle/ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip -d /oracle/insogg/
mkdir -p /oracle/ogg/
tar -xvf /oracle/insogg/fbo_ggs_Linux_x64_ora11g_64bit.tar -C /oracle/ogg
修环境变量
vi .bash_profile
export PATH=$PATH:$ORACLE_HOME/bin:/home/oracle/ggs
export LD_LIBRARY_PATH=/home/oracle/ggs:$ORACLE_HOME/lib
9. 打开DDL支持(可选)
SQL>@marker_setup.sql
SQL>@ddl_setup.sql
SQL>@role_setup.sql
SQL>@Grant the role to all GoldenGate Extract users
SQL>@ddl_enable.sql
SQL>@marker_setup.sql
SQL>@ddl_setup.sql
SQL>@role_setup.sql
SQL> Grant the role to all GoldenGate Extract users
SQL>@ddl_enable.sql
10. 在目标库上面完成7-9步骤
GOLDENGATE配置
1、首先需要在源端和目标端都配置一个管理进程,也就是goldengate实例。
运行ggsci,然后输入 edit params mgr
此时会弹出一个编辑器,在新创建的文件中工加入端口定义,比如port 7809。
保存退出后,运行start mgr则能启动管理进程。
GGSCI>dblogin userid <username>,password <password>
增加需要同步表列表
GGSCI>add trandata <schema_name>.<table_name>
参考实例
./ggsci
GGSCI (install0.example.com) 1> create subdirs
GGSCI (install0.example.com) 1> dblogin userid ggs,password ggs
GGSCI (install0.example.com) 1> edit params mgr
port 7809
dynamicportlist 7800-8000
checkminutes 10
purgeoldextracts /oracle/ggtrail/lt*,usecheckpoints,minkeepdays 3,maxkeepdays 10
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7, FrequencyMinutes 120
PurgeMarkerHistory MinKeepDays 3, MaxKeepDays 7, FrequencyMinutes 120
autostart ER *
autorestart ER *,waitminutes 2,resetminutes 5
laginfominutes 0
lagreportminutes 10
在源添加checkpoint表:
GGSCI (oracle0.example.com) 1>
CHECKPOINT TABLE ggate.checkpoint
--------------------------------
GGSCI (oracle0.example.com) 1> dblogin userid ggs, password ggs
GGSCI (oracle0.example.com) 2> add checkpointtable ggs.checkpoint
#################################################################
在源端增加同步的表
GGSCI (install0.example.com) 1> add trandata vip_system.CIM_MAPEXCHANGECODE
add trandata vip_system.CIM_PERSONMAIN
add trandata vip_system.CIM_SUBSCRIBE
2、在源端配置数据捕获进程和数据传输进程。
数据捕获进程负责将数据从数据库日志抓取出来,存放到一个队列文件中,数据传输进程负责将队列文件按照指定的业务逻辑传输到目标数据库。
添加extract进程命令: add extract <extract_name>,tranlog,<开始时间或者SCN或者RBA>
修改配置参数: edit params <extract_name>
GGSCI>delete extract demo
Deleted EXTRACT DEMO.
配置抽取进程
GGSCI> add extract demo,tranlog,begin now
EXTRACT added.
GGSCI>add extract demo,tranlog,EXTSEQNO 849039
GGSCI>edit params demo
extract demo
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID="orcl") userid ggs,password oracle
REPORT AT 01:59
reportrollover at 02:00
GETTRUNCATES
WARNLONGTRANS 2h,CHECKINTERVAL 3m
TRANLOGOPTIONS convertucs2clobs
FETCHOPTIONS NOUSESNAPSHOT
exttrail /home/oracle/ggs/dirdat/mm
discardfile /home/oracle/ggs/dirrpt/mm, append , megabytes 100
dynamicresolution
table sh.one;
指定从某一时刻开始
GGSCI>add extract demo,tranlog,begin 2012-1-2 11:23:10
配置参数说明
Extract <extract_name>:指定刚才加入的extract的名字
SETENV():指定该extract启动时oracle相关的环境变量.
Userid <oracle_user>, password <oracle_password>:连接到源数据库的用户,既我们在第一步建立的源端数据库用户。
Report:指定每天在日志中产生报告的时间
Reportrollover:指定每天汇报队列文件切换报告的时间
Gettruncates:告诉extract对truncate操作也要捕获
Warnlongtrans:超过<n>个小时的交易为长交易,要在goldengate日志中进行记录,检查时间为指定的checkinterval。
Tranlogoptions:针对源数据库的一些配置选项,如数据库归档的位置等等,本例子中的值是指当源和目标数据库字符集不一致,而且传输包含clob字段时,需要对clob中的字符集进行转换。
Fetchoptions:指定当从源数据库抓取数据时的一些选项,本例指不从undo tablespace取数据,而是从表里直接抽取。
Exttrail:本地队列文件,extract将数据从数据库日志抓取后存放在该队列文件。
Discardfile:指定丢弃数据的存放位置。
Dynamicresolution:指定当extract从日志抓取变化数据时,根据当前的需要,动态解析表名,从而加快抓取进程的启动速度。
Table <schema>.<table_name>:指定要从源系统抓取那些表的数据,这里schema不能用通配符,table_name可以用通配符。
配置传输进程
GGSCI>add extract pump1,exttrailsource ./dirdat/lt
EXTRACT added
GGSCI>add rmttrail ./dirdat/lt,extract pump1
指定传输起始点
GGSCI> alter extract pump1 extseqno <seq>, extrba <ba>
GGSCI>alter extract pump1 begin 2012-1-2 11:23:10
参考样例
抽取配置
GGSCI (centerdb-prod) 2> edit params ext1
extract ext1
setenv (NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK)
setenv (ORACLE_SID="orcl")
userid ggs,password ggs
REPORT AT 01:59
reportrollover at 02:00
WARNLONGTRANS 2h,CHECKINTERVAL 3m
TRANLOGOPTIONS convertucs2clobs
FETCHOPTIONS NOUSESNAPSHOT
DBOPTIONS ALLOWNOLOGGING
ignorereplicates
tranlogoptions excludeuser ggate
exttrail /oracle/ogg/dirdat/ea
discardfile /oracle/ogg/dirrpt/dt,append,megabytes 100
dynamicresolution
TABLE vip_system.CIM_MAPEXCHANGECODE;
TABLE vip_system.CIM_PERSONMAIN;
TABLE vip_system.CIM_SUBSCRIBE;
TABLE vip_system.CUSTOMER_BASICINFO;
TABLE vip_system.CUSTOMER_SERVICE;
TABLE vip_system.CUS_GROUP;
GGSCI (oracle0.example.com) 2> add extract ext1, tranlog, begin now
添加抽取进程的生成文件
GGSCI (oracle0.example.com) 3> add exttrail /oracle/ogg/dirdat/ea,extract ext1
增加投递功能
GGSCI (centerdb-prod) 2>edit params pump1
extract pump1
userid ggs,password ggs
rmthost 172.19.16.45,mgrport 7809
rmttrail /home/oracle/ogg/dirdat/lt
passthru
table vip_system.*;
table gbox.*;
table weixin.*;
table tzzh.*;
----------------------------------------------
在源端增加投递进程
GGSCI (oracle0.example.com) 4> add extract pump1,exttrailsource /oracle/ogg/dirdat/ea , begin now
增加投递到远程的文件
GGSCI (oracle0.example.com) 5> add rmttrail /home/oracle/ogg/dirdat/lt ,extract pump1
3、配置目标端的应用进程
设置检查点
GGSCI>edit params GLOBAL
CHECKPOINT TABLE ggate.checkpoint
GGSCI>dblogin userid <userid>,password <password>
GGSCI>add checkpointtable
增加复制进程组
GGSCI>add replicat rep1,exttral ./dirdat/lt
GGSCI>edit param rep1
replicat rep1
userid ggate, password ggate50
assumetargetdefs
reperror default, discard
dynamicresolution
discardfile /oracle/goldengate/dirdat/rep1_discard.txt, append, megabytes 10
DDL
map center_admin.*, target center_admin.*;
指定应用进程起始点
GGSCI> alter extract rep1 extseqno <seq>, extrba <ba>
GGSCI>alter extract rep1 begin 2012-1-2 11:23:10
参考样例
GGSCI (localhost.localdomain) 58> edit params mgr
port 7809
dynamicportlist 7800-8000
autorestart er *
autorestart extract *,waitminutes 2,retries 5
purgeoldextracts /home/oracle/ogg/dirdat/lt*,usecheckpoints,minkeepdays 1,maxkeepdays 2
在源和目标都要端添加checkpoint表:
配置全局参数文件
vi /home/oracle/ogg/GLOBALS
--------------------------------
checkpointtable ggs.checkpoint
--------------------------------
GGSCI (oracle0.example.com) 1> dblogin userid ggs, password ggs
GGSCI (oracle0.example.com) 2> add checkpointtable ggs.checkpoint
#################################################################
GGSCI (localhost.localdomain) 59> edit params rep1
replicat rep1
SETENV(NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
userid ggs, password ggs
assumetargetdefs
reperror default, discard
discardfile /home/oracle/ogg/dirdat/rep1_discard.txt, purge, megabytes 1000
dynamicresolution
DDL INCLUDE MAPPED &
EXCLUDE MAPPED OBJTYPE 'TRIGGER' &
EXCLUDE MAPPED OBJTYPE 'JOB' &
EXCLUDE MAPPED OPTYPE TRUNCATE
DDLERROR DEFAULT IGNORE RETRYOP
map vip_system.*, target vip_system.*;
map gbox.*, target gbox.*;
map weixin.*, target weixin.*;
map tzzh.*, target tzzh.*;
增加复制进程
GGSCI (install0.example.com) 2> add replicat rep1,exttrail /home/oracle/ogg/dirdat/lt , nodbcheckpoint