oracle golden gate使用配置
我们采用oracle 11g数据库对应的golden gate传统模式配置:
oracle golden gate的逻辑架构:
oracle golden gate实现live standby database架构图:
系统版本
rh linux6.3
oracle database 11.2.0.4.0
oracle golden gate for oracle 11g
Golden Gate源目标端DDL和DML复制配置详细过程
环境信息
主机 | ip | 数据库名 | 用户信息 | ogg软件安装目录 |
---|---|---|---|---|
源端 | 192.168.10.1 | DOG | ogg/ogg | /ogg/product |
目标端 | 192.168.10.2 | OGGSBY | oggsby/oggsby | /ogg/product |
源数据库配置
关闭回收站:
alter system set recyclebin=off deferred;
shutdown immediate;
startup
show parameter recyclebin
配置用户和表空间:
create tablespace oggtbs datafile '/app/oracle/oradata/DOG/oggtbs01.dbf' size 100M ;
create user ogg identidied by ogg default tablespace oggtbs;
grant connect to ogg;
grant dba to ogg;
# 因为我们是测试环境 ,所以为了测试方面,我们直接授权dba权限,而在实际的生产环境中,需要使用最小化权限管理
# 根据ogg用户需要的权限进行相应的配置
注:ogg用户可能需要的权限配置:
create user ogg identified by ogg;
grant connect,resource to ogg;
alter user ogg default tablesp ace oggtbs;
grant unlimited tablespace to ogg;
grant connect, resource, dba to ogg;
grant create session, alter session to ogg;
grant alter system to ogg;
grant select any dictionary to ogg;
grant flashback any table to ogg;
grant select any table, insert any table, update any table, delete any table, drop any table to ogg;
grant create table, create sequence to ogg;
grant select on dba_clusters to ogg;
grant select on v_$database to ogg;
grant select on sys.logmnr_buildlog to ogg;
grant select any transaction to ogg;
grant lock any table to ogg;
grant execute on dbms_flashback to ogg;
grant execute on dbms_logmnr_d to ogg;
grant execute on dbms_capture_adm to ogg;
grant execute on dbms_streams to ogg;
grant execute on utl_file to ogg;
exec dbms_streams_auth.grant_admin_privilege('ogg');
源库开户附加日志和force logging:
alter database force logging;
alter database add supplemental log data;
目标端数据库配置
目标端数据库配置:
alter system set recyclebin=off deferred;
shutdown immediate;
startup
show parameter recyclebin
用户和表空间:
create tablespace oggtbs datafile '/app/oracle/OGGSBY/oradata/oggtbs1.dbf' size 100M;
create user oggsby identified by oggsby default tablespace oggtbs;
grant connct,resource to oggsby;
grant dba to oggsby;
alter user oggsby quota unlimited on oggtbs;
源和目标端开启DDL复制配置
开启DDL复制配置,当源端执行DDL语句 ,如create table ,alter table等操作时,配置extract进程和replicat进程的配置,就可以实现源库和目标库的DDL复制了
#源库配置DDL复制所执行的SQL脚本 :
grant create table ,create sequence to ogg;
grant ggs_ggsuser_role to ogg;
@marker_setup.sql
@ddl_setup.sql
@role_setup.sql
@ddl_enable.sql
@?/rdbms/admin/dbmspool.sql
@ddl_pin.sql ogg #指定对应的用户
目标端开启DDL:
grant create table ,create sequence to oggsby;
grant ggs_ggsuser_role to oggsby;
@marker_setup.sql
@ddl_setup.sql
@role_setup.sql
grant ggs_ggsuser_role to oggsby;
@ddl_enable.sql
@?/rdbms/admin/dbmspool.sql
@ddl_pin.sql oggsby#指定对应的用户 这个目标端的承载用户
源端配置mgr、extract抽取、extract datapump进程
配置mgr进程
ggsci
info mgr
edit params mgr --编辑mgr进程参数
--具体内容:
PORT 7809
DYNAMICPORTLIST 7840-7939 --mgr进程使用7809,当7809不可用时,可使用7840至7939浮动端口
AUTOSTART EXTRACT * --自动启动所有的extract进程
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2 --extract进程出问题,则每2min尝试重启,尝试次数5次
PURGEOLDEXTRACTS /ogg/product/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 5 --定期清理dirdat目录下的trail文件,最少保留时间5天
LAGREPORTHOURS 1 --每隔一小时检查各进程延时情况,并记录到goldengate report文件。
LAGINFOMINUTES 30 --进程复制延时超过30分钟,向日志文件记录一条错误日志
LAGCRITICALMINUTES 45 --传输延时超过45分钟将写入警告日志
配置extract ext1抽取进程
ggsci
dblogin userid ogg,password ogg --使用此用户,登录到源数据为操作。 进行数据的extract
add extract ext1,tranlog,begin now --增加进程
add exttrail ./dirdat/sr,extract ext1 --为ext1进程增加trail文件,存放到$OGG_HOME/dirdat/sr文件中。 1、第一步,添加队列文件(进程文件)
edit params ext1 --2、第二步,编辑队列文件,也就是进得文件
--具体的参数内容
extract ext1
SETENV(ORACLE_SID="DOG")
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ogg, password ogg
REPORTCOUNT EVERY 30 MINUTES, RATE --每隔30min报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
DISCARDFILE /ogg/product/dirrpt/extsr.desc, APPEND, MEGABYTES 1024 --执行失败记录保存在discardfile中,文件大小设置最大为1024M.使用APPEND追加模式写文件
DISCARDROLLOVER AT 3:00 --没3:00做一次文件清理
EXTTRAIL /ogg/product/dirdat/sr --此处使用绝对路径存放。 和add exttrail命令对应的文件需要相同。 trail文件的存放路径
DYNAMICRESOLUTION --有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
DBOPTIONS ALLOWUNUSEDCOLUMN --用于阻止抽取进程抽取数据时由于表含有unused列而导致进程异常终止(abend)。使用该参数,抽取进程抽取到unused列时也会向日志文件记录一条警告信息。 数据表的unused列操作配置
FETCHOPTIONS NOUSESNAPSHOT --默认值为 usesnapshot,表示利用数据库闪回读取数据。Nousesnapshot表示直接从原表读取相关数据。
FETCHOPTIONS FETCHPKUPDATECOLS --当使用了HANDLECOLLISIONS时,请使用该参数。复制进程出现丢失update记录(missing update)并且更新的是主键,update将转换成insert。由于插入的记录可能不是完整的行,若要保证完整需要加入此参数
table ogg.*; --需要复制的表
配置datapump进程
datapump进程本质上是extract进程
如果不使用datapump进程,则extract进程则抽取和发送trail文件到目标端,需要完成的此两项功能。
如果配置了datapump进程,则extract进程抽取和捕获数据写入到trail文件,而datapump进得负责发送trail文件到目标端,发送过程通过网络传输。加强源、目标端进程的可用性。相对松耦合的架构 。
注意:创建并指定源数据库trail文件位置,必须包含两个字符,这个路径和主抽取进程(Primary Extract)中指定的trail目录和trail文件命名必须相同,因为Data Pump进程要从此读取主抽取进程生成的trail文件; 我们在第一次测试时,就是这个路径写的不一致,而导致同步失败了。
# 配置datadump dpump1进程
ggsci
dblogin userid ogg,password ogg
add extract dpump1, exttrailsource /ogg/product/dirdat/sr --增加进程 dpump1
add rmttrail /ogg/product/dirdat/tr,extract dpump1 --dpump1进程,传输至远程目标端的trail文件目录。 注意:这个文件参数要和edit params pdump1参数配置项相同 。 1、第一步、添加队列文件
edit params dpump1 --2、第二步,编辑队列文件
--dpump1参数配置内容
extract dpump1
SETENV(ORACLE_SID="DOG")
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
RMTHOST 192.168.10.2, mgrport 7839, COMPRESS --远端数据mgr进程和端口号,compress使用压缩文件传输
PASSTHRU --输进程直接跟抽取进程交互,而不再和数据库进行交互,减少数据库资源的利用。passthru表示本进程是一个传输进程data pump,无需跟数据库交互,只需要搬运数据即可;
因为data pump要传输数据到目标,所以需要配置rmthost和rmttrail指定目标主机和队列信息
RMTTRAIL /ogg/product/dirdat/tr --传递到target端,trail文件存放目录
--DYNAMICRESOLUTION
table ogg.*;
注意:
源端可以配置多个主抽取进程,也可以配置多个Data Pump进程,但必须为每个要同步的目标端配置一个Data Pump进程;
在dpump1增加远端trail文件配置
add rmttrail /ogg/product/dirdat/tr, extract dpump1
目标端配置replicat复制进程
关于checkpoint说明:
Checkpoint存储从文件读取和写入的检测点位置,用于还原和恢复数据,Checkpoint确保发生变化并提交(commit)的数据被extract抽取捕获和被replicat进程应用到目标端;保证在系统、网络或者GoldenGate需要重启进程时发生的错误不会导致数据丢失;在复杂的同步配置中checkpoints启用多个extract和replicat进程从同一个trail集中读取数据。
Checkpoint table有两种类型:主表和辅助表。主表根据用户定义名称来来创建,辅助表会自动创建。辅助表就是transaction table。名称是checkpoint table名上加_LOX。
目标端增加checkpoing表:
add checkpointtable oggsby.checkpoint;
edit params ./GLOBALS
GGSCHEMA oggsby
CHECKPOINTTABLE obbsby.checkpoint
目标端配置复制进程:
add replicat rep1, exttrail /ogg/product/dirdat/tr, checkpointtable oggsby.checkpoint
edit params rep1
REPLICAT rep1
SETENV(ORACLE_SID="OGGSBY")
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID oggsby, PASSWORD oggsby
ddl include all --配置ddl复制
ddlerror default ignore retryop maxretries 3 retrydelay 5 --出错时,每5min尝试一次,尝试次数3
REPORT AT 06:00 --6:00生成report
REPORTCOUNT EVERY 30 MINUTES, RATE
REPORTROLLOVER AT 02:00 --每天2:00清理report文件
REPERROR DEFAULT, ABEND --除了特殊指定的REPERROR语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。遇到不能处理的错误就自动abend,启动需要人工干预处理。
ALLOWNOOPUPDATES --当源表有排除列情况或者有目标表不存在的列时,当更新这列goldengate默认报错。应用该参数后,即可让goldengate生成一条警告信息而不是报错。
ASSUMETARGETDEFS --使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
HANDLECOLLISIONS --用于goldengate自动过滤不能出来的冲突记录,为了严格保证数据一致性
DISCARDFILE /ogg/product/dirrpt/repsa.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 02:00
MAP ogg.*, target oggsby.*;
创建测试表和同步测试
创建测试表
#src:
create table ogg.togg(id primary key, name, type, CREATED, update_date) as select object_id, object_name, object_type, CREATED, sysdate from dba_objects where rownum < 101;
在目标端初始化测试表的数据同步:
create public database link oggsrc connect to ogg identified by ogg using '192.168.10.1:1521/DOG';
create table oggsby.togg(id primary key, name, type, CREATED, update_date) as select object_id, object_name, object_type, CREATED, sysdate from dba_objects where rownum < 1;
insert into oggsby.togg select * from ogg.togg@oggsrc;
commit;
src插入一条数据进行测试
# src:
insert into ogg.togg select object_id, object_name, object_type, CREATED, sysdate from dba_objects where object_id =200 ;
commit;
select count(*) from ogg.togg;
#在目标端进行查看:
select count(*) from oggsby.togg;
测试DDL操作:
# src源端:
create table ogg.test1 as select * from dba_users;
# 在target查看
select count(*) from oggsby.test1; --进行相应的验证
Golden Gate组件说明
MGR进程
MRG也就是oracle manager进程,是ogg的管理进程,管理ogg的启动、分配端口、管理trail文件、创建事件、记录错误日志等,需要首先启动的进程,在extract和replicat进程前启动
oracle官方说明:
● Start Oracle GoldenGate processes
● Start dynamic processes
● Start the Collector process
● Manage the port numbers for processes
● Perform trail management
● Create event, error, and threshold reports
查看
ggsci
info mgr
edit params mgr #编辑mgr参数配置项
extract进程
extract进程主要在源端配置
extract进程运行在源端,它可以配置初始化数据直接从源端加载(直接从数据源加载静态数据)和在某个时间点后源端与服务端变更数据同步((从在线日志或归档日志抽取捕获变更的数据),它也可以在支持DDL变更的系统中抽取捕获DDL;
You can configure Extract in one of the following ways:
● Initial loads: For initial data loads, Extract extracts (captures) a current, static set of data directly from their source objects. --从源端抽取初始化静态数据,并加载
● Change synchronization: To keep source data synchronized with another set of data, Extract captures DML and DDL operations after the initial synchronization has taken place. --操持数据变更同步。
当配置为数据同步时,extract进程抽取捕获extract配置文件里配置的对象的任何DML和DDL(需要额外配置)的操作,extract进程记录这些操作,直到用户提交或回滚事务;
当收到回滚(rollback)时,extract撤销这些记录;
当收到(commit)操作后,extract进程记录保存这些操作到一个或多个trail文件里并以队列的形式发送到目标端,以确保数据传输速度和数据的一致性。
extract进程抽取源系统数据变更并将这此数据保存到trail文件中,所以需要为源extract进程配置trail文件目录和trail文件名的两个字符名。
extract使用下面三个方面来抽取数据:
1、Source tables, if the run is an initial load.
通过source table
2、The <font color="red> database recovery logs or transaction logs (such as the Oracle redo logs or SQL/MX audit trails). The actual method of capturing from the logs varies depending on the database type.
3、A third-party capture module. This method provides a communication layer tha tpasses data and metadata from an external API to the Extract API(通过第三方的api获取 ).The database vendor or a third-party vendor provides the components that extract the data operations and pass them to Extract.
datapump 文件传递进程
datapump是一种secondary Extract group进程,在source端进行配置的。
如果不使用datapump进程,则在source端,数据的抽取和投递都是需要基于primary extract进程写入trail文件,并传递到远端target数据库。
使用datadump进程,则在source端,extract进程负责抽取数据并写入trail文件,datapump进程读取trail文件并通过网络将其传入到远端target database。增加了系统的健壮性和存储的可用性。
使用datapump配置的原因和好处:
1、Protection against network and target failures. 对网络和target端失败的保护
2、You are implementing several phases of data filtering or transformation. --数据的过滤和传输分阶段执行,增加系统的稳定性和可用性
3、Consolidating data from many sources to a central target. 可实现多源到单目标的数据抽取
4、Synchronizing one source with multiple targets. 可实现同源至多目标数据的同步。
replicat 复制进程
replicat进程运行在target database端,replicat进程读取传输而来的trail文件,并重构DML和DDL语句,然后在target database上应用语句。
replicat进程通过如下种方式复制数据:
1、initial loads. 对于初始化数据,replicat进程可在target端直接应用传输面来的静态数据
2、change synchronization. 数据变更同步,应用传递而来的数据变更操作。
初始化数据
DML操作包括INSERT、UPDATE、DELETE、SELECT操作,而在这些操作中UPDATE、DELETE操作Redo只记录了变更的数据列以及行ID(ROWID),GoldenGate抽取数据后将其转换为自己的格式发送都目标端。在同步开始前目标端没有初始化数据(目标端为空数据),那么事物产生的UPDATE、DELETE DML操作发送到目标端,目标端GoldenGate Replicat进程会因为找不到数据而报错从而导致Replicat进程崩溃停止(ABENDED),所以这就需要我们在同步前初始化数据,初始化完后再同步,这样大大降低错误率。同步数据的方式可以通过DBLINK、EXP/IMP、SQLLDR或者表空间迁移等方式同步。
管理命令和一些配置说明
查看mgr进程
ggsci
view param mgr
info mgr
status mgr 查看mgr进程状态
stats mgr 查看mgr进程的详细信息
info all 查看所有进程信息
因为我们manager进程使用的是7809端口,在linux系统查看
netstat -ano|grep 7809
lsof -i:7809
根据产生的进程ID,可以看到进程的信息
ps -ef|grep 30392
oracle 30392 1 0 16:50 ? 00:00:00 ./mgr PARAMFILE /ogg/product/dirprm/mgr.prm REPORTFILE /ogg/product/dirrpt/MGR.rpt PROCESSID MGR
目标端需要权限
grant insert any table to oggsby;
grant delete any table to oggsby;
grant update any table to oggsby;
# 如果权限不敏感,可以直接授予dba权限
ggsci命令
ggsci
info all
start ext* ext开头的
start ext1 开始这个ext1进程
#联合使用
add extract ext1,tranlog,begin now --增加进程ext1
add exttrail ./dirdat/sr,extract ext1 --为增加队列文件
#
add extract dpump1, exttrailsource /ogg/product/dirdat/sr --增加进程 dpump1
add rmttrail /ogg/product/dirdat/tr,extract dpump1 --增加远程队列文件,用于远程传输
#复制进程
add replicat rep1, exttrail /ogg/product/dirdat/tr, checkpointtable oggsby.checkpoint
delete ext1 删除进程
delete exttrail ./dirdat/sr 删除trail文件
view report REP1 # 查看report
help # 使用帮助命令
#错误日志做准备:
$OGG_HOME/ggserr.log
#查看参数
view params *
view params ext1
edit params ext1
info exttrail *
view report *
info credentialstore #12c新特性,查看用户的配置信息,用户名、密码
add credentialstore # 增加
delete credentialstore
add extract e*, tranlog, begin now:
add extract p*,exttrailsource ./dirdat/xx* #创建推送进程—>配置相应的配置文件
add exttrail ./dirdat/xx*,extract e_gessdb,megabytes 100:配置进程
增加附加日志:(用户级)
ggsci
add trandata ogg.* 使用通配符实现用户级
add trandata ogg.test01 表级
delete trandata ODS.OGG_LCCONT 删除表级日志
数据库补充日志:
select supplemental_log_data_min from v$database; --YES表示已经启用数据库级补充日志
select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI from v$database;
alter database add supplemental log data;
alter database force logging;
关于数据为recyclebin说明
参数类型deferred,对当前session无效,对修改生新创建session有效
当修改系统级时,需要重启数据库。
select name,isses_modifiable,issys_modifiable from v$parameter wherename=‘recyclebin’; --查看参数类型
配置mgr将多余文件删除
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 1 --此行是新添加的内容,表示超过一小时且超过读检查点的数据自动删除
关于DDL复制
GoldenGate的DDL同步只支持两边一致的数据库,限制条件较多(如不能进行字段映射、转换等),具体可以参考官方文档。DDL的抓取不是通过日志抓取来捕获的,而是通过触发器来实现,所以对源数据库的性能影响要比单纯的数据抓取要大很多,可谓屏弃了GoldenGate的优势。尽量不要使用GoldenGate的DDL复制功能,在大多数业务系统中,实际上不会有频繁的数据库结构变动,完全可以通过手工的方式进行维护。确实有大量DDL操作的环境,如果可以,还是推荐物理DG之类的替换方案;确实要使用GoldenGate的DDL复制,那么请详细参考官方文档的限制和说明。
开启DDL复制的基本配置步骤为:
(1)关闭ORACLE的回收站功能。
(2)选择一个数据库schema存放支持DDL的GoldenGate对象,运行相应创建脚本。
(3)编辑globals参数文件。
(4)修改extl和repl的配置文件
参引:https://www.cnblogs.com/junnor/p/4307228.html
参考说明
本文配置学习了https://www.cnblogs.com/VoiceOfDreams/p/8576973.html所述,结合自己实验操作。