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目录下安装目标端为例;

[oracle@ogg01 ~]$ mkdir -p /u01/app/product/ogg_src

[oracle@ogg01 ~]$ 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(目标端也需要安装)

[oracle@ogg01 ~]$ unzip 121210_fbo_ggs_Linux_x64_shiphome.zip -d /tmp

[oracle@ogg01 ~]$ /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 ogg@orcl) 2> add checkpointtable ggate.checkpoint

Successfully created checkpoint table ogg.checkpoint.

3.2.3 配置target db manager进程

编辑manager参数文件:

GGSCI (dbserver as ogg@orcl) 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.故障处理

待更新...

猜你喜欢

转载自blog.csdn.net/shineboy123456/article/details/109098988