OGG同步Linux下环境搭建详细步骤
1.准备系统
准备好两套已经装好Oracle db和Oracle GoldenGate for Oracle的环境。
source db:
ip:192.168.43.54
db type:Oracle db 11.2.1.0.4
target db:
ip:192.168.43.55
db type:Oracle db 11.2.1.0.4
GoldenGate:
ogg type:GoldenGate for Oracle 12.2.0.1
2.安装GoldenGate
2.1 源端、目标端目录设置
实验分别在每一台机器上的/u01/app/product/ogg_src目录下安装源端,/u01/app/product/ogg_trg目录下安装目标端为例;
[[email protected] ~]$ mkdir -p /u01/app/product/ogg_src
[[email protected] ~]$ mkdir -p /u01/app/product/ogg_trg
2.2 环境变量配置
切换到 ~ 目录编辑配置ORACLE_SID、ORACLE_HOME和LD_LIBRARY_PATH;(源端、目标端)
vi ~/.bash_profile
ORACLE_BASE=/exapp/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
ORACLE_SID=ORBDB
export ORACLE_BASE ORACLE_HOME ORACLE_SID
export GGATE=$ORACLE_BASE/ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$ORACLE_HOME/bin:$GGATE
export PATH
#alias ggsci='rlwrap ggsci' --alias定义命令别名
#alias sqlplus='rlwrap sqlplus' --rlwrap支持上下翻
注意:数操作系统版本、据库版本和Oracle GoldenGate版本bit type要一致,要么全是32bit要么全是64bit;
2.3 安装源端GoldenGate(目标端也需要安装)
[[email protected] ~]$ unzip 121210_fbo_ggs_Linux_x64_shiphome.zip -d /tmp
[[email protected] ~]$ /tmp/fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller
根据数据库版本选择对应的GoldenGate选项;
更改GoldenGate Software 安装位置,将其安装到/u01/app/product/ogg_src目录下,检查数据库安装位置是否正确,并配置端口;
检查安装信息,确认无误后开始安装;
这样源端的安装就完成了。
2.4 使用ggsci工具创建目录
GGSCI (redhat6) 1> create subdirs
以上配置须SOURCE和TARGET端都进行
3. 配置GoldenGate DLL同步环境
3.1 配置source db参数
source db的配置主要是归档模式修改、附加日志的添加、强制日志和ddl语句的支持。
查看source db归档、附加日志和强制日志:
select log_mode,supplemental_log_data_min,force_logging from v$database;
3.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;
3.1.2 强制日志变更
alter database force logging;
3.1.3 添加附加日志
alter database add supplemental log data;
3.1.4 修改GoldenGate参数
alter system set enable_goldengate_replication = true scope = both;
3.1.5禁用RecycleBin(oracle10g ogg需要禁用,oracle11g ogg不要求)
SQL> alter system set recyclebin=off scope=spfile;
System altered.
SQL> shutdown immediate
3.1.6 配置DDL语句支持
创建存放ddl信息的GoldenGate用户:
create tablespace TBS_OGG datafile '/exapp/oracle/oradata/res/gguser.dbf' size 1000M autoextend on;
create user ggate identified by ggate default tablespace TBS_OGG temporary tablespace temp;授权GoldeGate用户 :
grant dba to ggate ;
进入GoldenGate目录,调用SQL脚本:
cd $GGATE
sqlplus / as sysdba
SQL> @marker_setup.sql;
#输入准备好的用户ggate
SQL> @ddl_setup.sql;
#输入准备好的用户ggate
SQL> @role_setup.sql;
#输入准备好的用户ggate
#根据上面执行结果的提示授权角色给ggate用户
SQL> grant GGS_GGSUSER_ROLE to ggate;
SQL> @ddl_enable.sql;
安装性能优化工具 (可选项)
要提高DDL触发器的性能,可以通过ddl_pin脚本,该脚本会将触发器使用的包加载到内存,以此提高效率。该脚本执行时需要引用dbms_shared_pool系统包,因此在使用ddl_pin脚本前需要确保dbms_shared_pool可用。
SQL>@?/rdbms/admin/dbmspool.sql
SQL> @ddl_pin.sql ggate;
注: 执行ddl_pin.sql通过dbms_shared_pool.keep存储过程将DDLReplication相关对象keep在共享池中,以保证这些对象不要RELOAD,提升性能。
至此,ddl语句的支持配置完成。
3.1.7 分别在SOURCE DB和TARGET DB上创建用户
SOURCE DB:
SQL> create user source identified by oracle default tablespace users temporary tablespace temp;
User created.
SQL> grant connect,resource,dba to source;
Grant succeeded.
TARGET DB:
SQL> create user targer identified by oracle default tablespace tbs_hjj temporary tablespace temp;
User created.
SQL> grant connect,resource,dba to targer;
Grant succeeded.
3.1.8 配置source db manager进程
GGSCI (redhat6) 2> edit params mgr
PORT 7809
dynamicportlist 7800-8000
AUTORESTART ER *,RETRIES 5,WAITMINUTES 2,RESETMINUTES 5
3.1.9 添加表级附加日志(源端)
登陆数据库
dblogin userid ggate,password ggate
add trandata source.*
注意:如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。删除表级日志:delete trandata source.*
3.1.10 配置SOURCE DB的复制队列
连接到数据库,测试连接:
GGSCI (redhat6) 5> dblogin userid ggate,password ggate
Successfully logged into database.
增加一个抽取extract:
GGSCI (redhat6) 6> add extract ext1,tranlog,begin now
EXTRACT added.
GGSCI (redhat6) 7> add exttrail ./dirdat/lt,extract ext1
EXTTRAIL added.(此处需按dirdate真实路径填写)
GGSCI (redhat6) 8> edit params ext1
extract ext1
userid ggate,password ggate
EXTTRAIL ./dirdat/lt
ddl include all objname source.*
table source.*;
3.1.11 配置source db pump进程
添加一个pump进程(本质上也是extract进程),并指定本地trail文件:
GGSCI (redhat6) 8> add extract pmpa,exttrailsource ./dirdat/lt
EXTRACT added.
GGSCI (redhat6) 8> add rmttrail ./dirdat/lt, ext pmpa, MEGABYTES 100 -- 指定远程trail文件
GGSCI (redhat6) 8> edit params pmpa --- 编辑pmpa配置文件
extract pmpa
setenv(NLS_LANG = " AMERICAN_AMERICA.AL32UTF8")
rmthost 192.168.43.55, mgrport 7809, compress
rmttrail ./dirdat/lt
dynamicresolution
table source.*;
3.1.12 启动源端进程
新开一个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 pmpa detail
如果发现错误和异常,根据OGG_ERROR_CODE排查问题。
3.2 配置target db参数
3.2.1 创建GoldenGate用户
创建GoldenGate用户:
create tablespace TBS_OGG datafile '/exapp/oracle/oradata/res/gguser.dbf' size 1000M autoextend on;
create user ggate identified by ggate default tablespace TBS_OGG temporary tablespace temp;
授权GoldeGate用户 :
grant dba to ggate ;
3.2.2 添加checkpoint表
GGSCI (dbserver) 21> edit params ./GLOBALS
#添加以下内容
ggschema ggate
checkpointtable ggate.checkpoint
#登陆target db添加checkpoint表
GGSCI (dbserver) 1> dblogin userid ggate, password ggate
Successfully logged into database.
GGSCI (dbserver as [email protected]) 2> add checkpointtable ggate.checkpoint
Successfully created checkpoint table ogg.checkpoint.
3.2.3 配置target db manager进程
编辑manager参数文件:
GGSCI (dbserver as [email protected]) 4> edit params mgr
PORT 7809
DYNAMICPORTLIST 7910-7930
autorestart er *, retries 5, waitminutes 3
3.2.4 配置target db replicat进程
添加一个replicat进程 :
GGSCI (redhat6) 1> add replicat rep1,exttrail ./dirdat/lt,checkpointtable ggate.checkpoint
REPLICAT added.
编辑replicat参数文件:
GGSCI (redhat6) 5> edit params rep1
replicat rep1
ASSUMETARGETDEFS
userid ggate,password ggate
discardfile ./dirrpt/rep1_discard.txt,append, megabytes 10
ddl include all
map source.*, target targer.*;
3.1.11 启动目标端进程
切回前面配置窗口,检查各项配置,然后启动进程:
cd $GGATE
./ggsci
GGSCI (oracledb1) 2> start mgr
GGSCI (oracledb1) 2> start rep1
GGSCI (oracledb1) 2> info mgr detail
GGSCI (oracledb1) 2> info rep1 detail
如果发现错误和异常,根据OGG_ERROR_CODE排查问题。
3.3 测试数据
3.3.1 在Source DB 上创建一张测试表:
SQL> conn source/oracle;
Connected.
SQL> create table anqing as select *from sys.all_users;
Table created.
3.3.2 到Target DB上验证:
SQL> select count(1) from anqing;
COUNT(1)
----------
33
DDL 同步验证成功。
4. 配置文件参数说明
4.1 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分钟将写入警告日志
4.2 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目录设置虚拟内存
4.3 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(废弃)
4.4 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做一次文件过期设定
5.日常维护命令
/exapp/oracle/ogg/ggsci 进入命令模式
GGSCI>info all --查看GG整体运行情况
GGSCI>info <进程名> --查看某个进程运行情况
比如抽取进程正在读取哪个归档日志或者联机重做日志,传输进程正在传送哪一个队列文件,复制进程正在使用哪一个队列文件
GGSCI>info <进程名> showch --查看某个进程运行的详细信息
GGSCI>view report <进程名> --查看进程报告
GGSCI>start mgr --启动源端管理进程
GGSCI>stop mgr --停止源端管理进程
GGSCI>start er * --启动所有进程
GGSCI>stop er * --停止所有进程
GGSCI>view params <进程名> --查看进程参数设置,该命令同样支持通配符*
GGSCI> lag <进程名称> --查看详细的延时信息
GGSCI> stats <进程名称>,<时间频度>,table --查看进程处理的记录数
GGSCI> stats edr, total 列出自进程启动以来处理的所有记录数。
GGSCI> stats edr, daily, table gg.test 列出当天以来处理的有关gg.test表的所有记录数
GGSCI> edit param mgr --编辑管理进程参数
GGSCI (11g) 6> delete exta --删掉除 mgr 外的进程
GGSCI (11g) 6> dblogin userid ggate,password ggate --用户登录
6.故障处理
待更新...