源数据库模式配置
源端数据库必须开启归档模式
Alter database archivelog;
开启最小附加日志。最小附加日志是为logminer服务的。在这里不多说。
Alter database add supplemental log data;
配置操作系统环境变量(请确保环境变量配置了ORACLE_HOME和ORACLE_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这种的补充日志,可以唯一的标示每一行。
参数解释:
PORT:指定服务监听端口;这里以7839为例,默认端口为7809
DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;
AUTOSTART:指定在管理进程启动时自动启动哪些进程;
AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;
PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定义数据延迟的预警机制:本处设置表示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:指定写入到本地的哪个队列;
SQLEXEC:在extract进程运行时首先运行一个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
REPLICAT进程参数配置说明:
ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;
SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。
MAP:用于指定源端与目标端表的映射关系;
MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;
REPERROR:定义出错以后进程的响应,一般可以定义为两种:
ABEND,即一旦出现错误即停止复制,此为缺省配置;
DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
SQLEXEC:在进程运行时首先运行一个SQL语句;
GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。
MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。
配置完成。但是这里并没有配置ogg支持DDL。因为时间不足。也没有配置初始加载数据。所以测试的方法是在源和目标库上建两个一样的表,在源库DML后再目标库select。结果数据可以同步。
Manager:GoldenGate的控制进程,运行在源端和目标端上。它主要作用是:启动、监控、重启Goldengate的其他进程,报告错误及事件,分配数据存储空
间,发布阀值报告等。在目标端和源端有且只有一个manager进程.就像数据库的smon进程一样。
Extract:运行在数据库源端,负责从源端数据表或者日志中捕获数据。Extract的作用可以按照阶段来划分为:
–初始时间装载阶段:在初始数据装载阶段,Extract进程直接从源端的数据表中抽取数据
–同步变化捕获阶段:初始数据同步完成以后,Extract进程负责捕获源端数据的变化(DML和DDL)
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
(粘贴下面这段配置)
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.*这里也报错了。后来把表分开,不让他们重复就好了
完成。