OGG安装及进程理解

来源:互联网 发布:js 去除disabled 编辑:程序博客网 时间:2024/05/21 12:41

源数据库模式配置

源端数据库必须开启归档模式
Alter database archivelog;
开启最小附加日志最小附加日志是为logminer服务的。在这里不多说。
Alter database add supplemental log data;


配置操作系统环境变量(请确保环境变量配置了ORACLE_HOMEORACLE_SID,这个一般大家都会配置的

export LD_LIBRARY_PATH=/u01/app/ogg:$ORACLE_HOME/lib:$LD_LIBRARY_PATH

将压缩包解压到系统目录/u01/app/ogg (该路径可以根据需要自行选择)。这里需要两次。一次是unzip,一次是tar xvfz
进入/u01/app/ogg目录,运行./ggsci,进入ogg管理控制台
在ogg控制台输入命令: create subdirs,让ogg创建其需要用到的目录

源端数据库创建GoldenGate数据库用户并授权。虽然这个不是非常必须。但是建议创建单独的表空间。

create user ogg identified by Oracle default tablespace ogg;
grant connect,resource,unlimited tablespace to ogg;
grant execute on utl_file to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on DBMS_FLASHBACK to ogg;

这样的权限只能满足DML的配置。DDL还暂时不能满足。至于DDL所需要的配置,下次会更新。

添加表级transdata

GGSCI (NDSCDB1) 2>dblogin userid ogg,password ogg   这里需要在ogg里登陆数据库

Successfully logged intodatabase.

GGSCI(NDSCDB1) 3> add trandata wu.test

Logging of supplemental redo dataenabled for table WU.TEST.

为什么要添加这一步?前面不是已经开启了最小补充日志吗?前面已经说了最小附加日志是为logminer服务的,最小补充日志还不能保证update的唯一性。当然可以开启数据库级别的primary,unique,foreign key。但是我的理解是这么做动静太大了。可能你只是需要复制特定的几个表,没必要开启数据库级别的补充日志。所以就用add trandata wu.test来添加表级的补充日志。这个表级的补充日志就是primary,unique这种的补充日志,可以唯一的标示每一行。

配置源端进程组
GGSCI (NDSCDB1) 1> edit param mgr   这里写param 或者params都可以
(粘贴下面这段配置)
PORT 7809
DYNAMICPORTLIST 7800-7900
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

参数解释:

PORT指定服务监听端口;这里以7839为例,默认端口为7809

DYNAMICPORTLIST动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的CollectorReplicatGGSCI进程通信也会使用这些端口;

AUTOSTART指定在管理进程启动时自动启动哪些进程;

AUTORESTART自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;

PURGEOLDEXTRACTS定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。

LAGREPORTLAGINFOLAGCRITICAL

定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。

--:可以用--来添加注释行


配置抽取进程:
GGSCI (NDSCDB1) 12> add extract ext1,tranlog,begin now
EXTRACT added.
GGSCI (NDSCDB1) 14> add exttrail ./dirdat/t1,extract ext1,megabytes 100
EXTTRAIL added.

GGSCI (NDSCDB1) 15> edit params ext1
(粘贴下面这段配置)
extract ext1
userid ogg,password oracle
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle10g")
setenv (ORACLE_SID = ocp)
exttrail ./dirdat/t1
table wu.*;


添加传输进程,配置参数
GGSCI (NDSCDB1) 2> add extract ext2,exttrailsource ./dirdat/t1
EXTRACT added.
GGSCI (NDSCDB1) 3> add rmttrail /u01/app/ogg/dirdat/t2, EXTRACT ext2
RMTTRAIL added.

GGSCI (NDSCDB1) 4> edit params ext2
(粘贴下面这段配置)
extract ext2
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
userid ogg,password oracle
RMTHOST 192.168.1.12,mgrport 7809
RMTTRAIL /u01/app/ogg/dirdat/t2
table wu.*;

抽取进程和传输进程其实都是EXTRACT进程,也可以配置在一个进程完成这两个功能。

EXTRACT进程参数配置说明:

SETENV配置系统环境变量

USERID/ PASSWORD指定OGG连接数据库的用户名和密码,这里使用3.4部分中创建的数据库用户OGG;

TABLE定义需复制的表,后面需以;(分号)结尾

TABLEEXCLUDE定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉得表。

GETUPDATEAFTERS|IGNOREUPDATEAFTERS

是否在队列中写入后影像,缺省复制

GETUPDATEBEFORES| IGNOREUPDATEBEFORES

是否在队列中写入前影像,缺省不复制

GETUPDATES|IGNOREUPDATES

是否复制UPDATE操作,缺省复制

GETDELETES|IGNOREDELETES

是否复制DELETE操作,缺省复制

GETINSERTS|IGNOREINSERTS

是否复制INSERT操作,缺省复制

GETTRUNCATES|IGNORETRUNDATES

是否复制TRUNCATE操作,缺省不复制;

RMTHOST指定目标系统及其GoldengateManager进程的端口号,还用于定义是否使用压缩进行传输,本例中的compress为压缩传输;

RMTTRAIL指定写入到目标断的哪个队列;

EXTTRAIL指定写入到本地的哪个队列;

SQLEXECextract进程运行时首先运行一个SQL语句;

PASSTHRU禁止extract进程与数据库交互,适用于Data Pump传输进程;

REPORT定义自动定时报告;

STATOPTIONS定义每次使用stat时统计数字是否需要重置;

REPORTCOUNT报告已经处理的记录条数统计数字;

TLTRACE打开对于数据库日志的跟踪日志;

DISCARDFILE定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;

DBOPTIONS指定对于某种特定数据库所需要的特殊参数;

TRANLOGOPTIONS指定在解析数据库日志时所需要的特殊参数,例如:对于裸设备,可能需要加入以下参数 rawdeviceoggset 0

WARNLONGTRANS指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔3分钟检查一次场交易,对于超过2小时的进行警告;

这里用一个进程来抽取数据,一个进程来传递数据,是用了数据泵的方法。也可以配置这两个功能在一个进程里,即为不使用数据泵的方法。如下配置

GGSCI (NDSCDB1) 15> edit params ext1
(粘贴下面这段配置)
extract ext1
userid ogg,password oracle
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle10g")
setenv (ORACLE_SID = ocp)

RMTHOST 192.168.1.12,mgrport 7809
RMTTRAIL /u01/app/ogg/dirdat/t2

table wu.*;


配置目标数据库

将压缩包解压到系统目录/u01/app/ogg (该路径可以根据需要自行选择),然后配置环境变量
进入/oracle/ogg目录,运行./ggsci,进入ogg管理控制台
ogg控制台输入命令: create subdirs,让ogg创建其需要用到的目录
目标库创建GoldenGate数据库用户并授权:
create user ogg identified by oracle default tablespace ogg;
grant connect,resource,unlimited tablespace to ogg;
grant execute on utl_file to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on DBMS_FLASHBACK to ogg;
grant insert any table to ogg;
grant delete any table to ogg;
grant update any table to ogg;

添加checkpoint
GGSCI (standby) 4> edit param ./GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

然后创建checkpoint
GGSCI (standby) 5> dblogin userid ogg
Password: 
Successfully logged into database.

GGSCI (standby) 6> add checkpointtable ogg.checkpoint

配置目标端进程组
配置管理进程
GGSCI (standby) 8> edit param mgr

PORT 7809
DYNAMICPORTLIST 7800-7900
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45


配置复制进程

GGSCI (local) 4> ADD replicat repl1 EXTTRAIL /u01/app/ogg/dirdat/t2 ,checkpointtable ogg.checkpoint
GGSCI (standby) 9> edit param repl1
REPLICAT repl1
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
userid ogg,password oracle
ASSUMETARGETDEFS
discardfile /u01/app/ogg/discard.sql,append, megabytes 50
map wu.*, target junjun.*;

REPLICAT进程参数配置说明:

ASSUMETARGETDEFS假定两端数据结构一致使用此参数;

SOURCEDEFS假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。

MAP:用于指定源端与目标端表的映射关系;

MAPEXCLUDE用于使用在MAP中使用*匹配时排除掉指定的表;

REPERROR定义出错以后进程的响应,一般可以定义为两种:

ABEND,即一旦出现错误即停止复制,此为缺省配置;

DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。

DISCARDFILE定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;

SQLEXEC在进程运行时首先运行一个SQL语句;

GROUPTRANSOPS将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。

MAXTRANSOPS将大交易拆分,每XX条记录提交一次。


配置完成。但是这里并没有配置ogg支持DDL。因为时间不足。也没有配置初始加载数据。所以测试的方法是在源和目标库上建两个一样的表,在源库DML后再目标库select。结果数据可以同步。


ManagerGoldenGate的控制进程,运行在源端和目标端上。它主要作用是:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储空
间,发布阀值报告等。在目标端和源端有且只有一个manager进程.就像数据库的smon进程一样。

Extract:运行在数据库源端,负责从源端数据表或者日志中捕获数据。Extract的作用可以按照阶段来划分为:
初始时间装载阶段:在初始数据装载阶段,Extract进程直接从源端的数据表中抽取数据
同步变化捕获阶段:初始数据同步完成以后,Extract进程负责捕获源端数据的变化(DMLDDL)

pump:运行在数据库源端,其作用是将源端产生的本地trail文件,把trail以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在抽取完数据以后,直接投递到目标端,生成远程trail文件。

Collector
:​​ Pump进程对应的叫Server Collector进程,这个进程不需要引起我的关注,因为在实际操作过程中,无需我们对其进行任何配置,所以对我们来说它是透明的。它运行在目标端,其任务就是把Extract/Pump投递过来的数据重新组装成远程ttrail文件。

Replicat:运行在目标端,是数据传递的最后一站,负责读取目标端trail文件中的内容,并将其解析为DML DDL语句,然后应用到目标数据库中。


也可以配置为双向复制

本来的源端我暂时称为sou端,目标端暂时称为tar端。

这里有一点需要注意,源段是需要打开最小补充日志和归档的。目标端不需要。所以当我反过来做双向复制的时候,这里就出错了。因为我没忘记把现在的源端(即tar端)配置归档和打开补充日志了

配置归档和打开补充日志就继续。

在tar端上添加一个抽取进程,未使用数据泵

GGSCI (NDSCDB1) 12> add extract ext_tar,tranlog,begin now
EXTRACT added.
GGSCI (NDSCDB1) 14> add exttrail ./dirdat/ar,extract ext_tar,megabytes 100
EXTTRAIL added.

未使用数据泵是需要加一句命令

 add rmttrail ./dirdat/so,extract ext_tar,megabytes 100。我开始没加这个命令,也是错了好久啊

GGSCI (NDSCDB1) 15> edit params ext_tar
(粘贴下面这段配置)

extract ext_tar
userid ogg,password oracle
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_HOME = "/u01/app/oracle10g")
setenv (ORACLE_SID = oca)
tranlogoptions excludeuser ogg
rmthost 192.168.1.11,mgrport 7809
rmttrail /u01/app/ogg/dirdat/so
table junjun.*;

tar端配置完毕。到sou端配置replicated进程

添加checkpoint表

GGSCI (standby) 4> edit param ./GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

然后创建checkpoint
GGSCI (standby) 5> dblogin userid ogg
Password: 
Successfully logged into database.

GGSCI (standby) 6> add checkpointtable ogg.checkpoint

给之前的抽取进程加上tranlogoptions excludeuser ogg参数--避免双向复制

添加复制进程

GGSCI (local) 4> ADD replicat repl_sou EXTTRAIL /u01/app/ogg/dirdat/so ,checkpointtable ogg.checkpoint
GGSCI (standby) 9> edit param repl_sou
REPLICAT repl_sou
setenv (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
userid ogg,password oracle
ASSUMETARGETDEFS
discardfile /u01/app/ogg/discard.sql,append, megabytes 50
map junjun.*, target wu.*;

这里有两点需要注意:

1、是sou端本来是源段,tar是目标端,tar端的ogg用户并没有对wu用户下表的dml权限。这里要加上。不然配置会报错。我就在这里错了好久。

2、因为是双向复制,所以最好不要有冲突。我sou->tar复制的表是wu.*->junjun.*。tar->sou是junjun.*->wu.*这里也报错了。后来把表分开,不让他们重复就好了                                   

完成。