首页 > 数据库 > Oracle > OGG_windows搭建实验
windows卸载Oracle GoldenGate产品的方法
1、进入源或目标GG配置目录,输入以下命令:
gg> stop *
gg> stop mgr
2、删除Oracle GoldenGate目录
3、运行windows命令,执行sc delete [服务名]
此服务器名就是./GLOBALS中的MGRSERVNAME
ggsci>install addservice其实就是调用OGG目录中的mgr.exe
标准搭建步骤
实验环境介绍
源和目标在同一台服务器上,因为服务器安装了DB客户端和DB server,所以ggsci默认找DB客户端的tns,为了不引起问题,在DB客户端和DB server的tns中都加入了luxus和luxus2项
源:win7+ORACLE_11GR1_win32(db_name是luxus)+OGG_11GR1_win32
目标:win7+ORACLE_11GR1_win32(db_name是luxus2)+OGG_11GR1_win32
1. 解压OGG_11GR1_win32至OGG源d:\gg\luxus和OGG目标d:\gg\luxus2
2. 源库luxus保证
alter database archivelog;
select force_logging from v$database; yes
开启方式:alter database force logging;
select supplemental_log_data_min from v$database; yes
开启方式:alter database add supplemental log data;
alter system set recyclebin=off scope=spfile
3. 源库luxus和目标库luxus2都执行如下
create user ggs identified by ggs default tablespace users temporary tablespace temp;
grant dba to ggs; //建立goldengate管理用户
conn ggs/ggs
create table demo(id number primary key,ename varchar2(10)); //创建测试表,生产环境不用这这样创建这样的测试表
4. OGG源端cd d:\gg\luxus执行ggsci后,执行create subdirs
5. OGG目标端cd d:\gg\luxus2执行ggsci后,执行create subdirs
6. OGG源端ggsci后edit params ./GLOBALS输入MGRSERVNAME ggsource
7. exit退出源ggsci后install addservice
8. 源ggsci后edit params mgr输入port 7809
9. 源ggsci后edit params eiextt输入
EXTRACT EIEXTT
USERID ggs@luxus, PASSWORD ggs
EXTTRAIL ./dirdat/tt
TABLE ggs.*;
TABLE schemaname.*;
做好了DDL的配置的情况下,以上红色两行只是相对于对源库和目标库对一个初始化,以后源库新增用户,新用户下新增的对象都会自动同步到目标库。
10.源ggsci执行add extract eiextt,tranlog,begin now
11.源ggsci执行add exttrail ./dirdat/tt,extract eiextt, megabytes 5
12.源ggsci执行edit params epmptt输入
EXTRACT EPMPTT
PASSTHRU
RMTHOST localhost,MGRPORT 7909
RMTTRAIL ./dirdat/tt
TABLE ggs.*;
TABLE schemaname.*;
做好了DDL的配置的情况下,以上红色两行只是相对于对源库和目标库对一个初始化,以后源库新增用户,新用户下新增的对象都会自动同步到目标库。
13.源ggsci执行add extract epmptt,exttrailsource ./dirdat/tt
14.源ggsci执行add rmttrail ./dirdat/tt,extract epmptt,megabytes 5
15.目标ggsci执行edit params ./GLOBALS输入
MGRSERVNAME ggtarget
CHECKPOINTTABLE ggs.ggschkpt
16.exit退出目标ggsci后install addservice
17.目标ggsci执行edit params mgr输入
port 7909
18.目标ggsci执行dblogin userid ggs@luxus2,password ggs
add checkpointtable ggs.ggschkpt
add replicat poratt,exttrail ./dirdat/tt,checkpointtable ggs.ggschkpt
19.目标ggsci执行edit param poratt输入
replicat poratt
userid ggs@luxus2, password ggs
assumetargetdefs
reperror default, discard
discardfile ./dirrpt/poratt.dsc, purge
map ggs.*, target ggs.*;
map schemaname.*, target schemaname.*;
做好了DDL的配置的情况下,以上红色两行只是相对于对源库和目标库对一个初始化,以后源库新增用户,新用户下新增的对象都会自动同步到目标库。
20.源库ggsci执行dblogin userid ggs@luxus,password ggs
add trandata ggs.*
add trandata schemaname.*
做好了DDL的配置的情况下,以上两行只是相对于对源库和目标库对一个初始化,以后源库新增用户,新用户下新增的对象都会自动同步到目标库。
21.源端ggsci执行start mgr和start *
检查是否正常启动的命令为ggsci>status mgr或ggsci>status *
22.目的端ggsci执行start mgr和start *
检查是否正常启动的命令为ggsci>status mgr或gsci>status *
上述配置只是配置了dml相关(只要commit后就会同步到目标库,不管目标库是否归档模式),如果源库增加一张表,压根不会同步到目标库
DDL的标准配置新增如下
1. 源实例luxus下执行SQL> GRANT EXECUTE ON utl_file TO ggs;
2. 源和目标都关闭所有进程和服务
ggsci>stop mgr
ggsci>stop *
3. 源ggsci下执行EDIT PARAMS ./GLOBALS新增如下
GGSCHEMA ggs
GGSCHEMA schemaname
4. 源实例luxus到d:\gg\luxus\下sqlplus / as sysdba执行如下
SQL> @marker_setup.sql
SQL> @ddl_setup.sql
SQL> @role_setup.sql
SQL> GRANT GGS_GGSUSER_ROLE to ggs;
SQL> @ddl_enable.sql
SQL> @marker_status.sql
SQL> exit
5. 目标实例luxus2到d:\gg\luxus2\下sqlplus / as sysdba执行如下
SQL> @marker_setup.sql
SQL> @ddl_setup.sql
6. 源ggsci下执行edit params eiextt新增如下(必须加,否则就不会捕获ddl的相关信息,只会捕获dml相关信息)
DDL INCLUDE ALL
7. 源和目标ggsci启动所有进程和服务
ggsci>start mgr
ggsci>start *
后面新增的表没有主键也可以正常同步到目标库,且新建用户后新用户的表会自动同步到目标库,不再需要重新对参数文件新增map schemaname.*, target schemaname.*;且新增用户及用户权限都会自动同步到目标库
源端的捕获进程对数据的存放路径,放在了源端

源端的传输进程对数据的存放路径,放到了目标端
源端配置文件信息
mgr进程配置文件./GLOBALS的配置
MGRSERVNAME ggsource
GGSCHEMA ggs
EXTRACT抽取进程名为Eiextt的配置
EXTRACT EIEXTT
USERID ggs@luxus, PASSWORD ggs
EXTTRAIL ./dirdat/tt
DDL INCLUDE ALL
TABLE ggs.demo;
TABLE ggs.*;
EXTRACT传输进程名为Epmptt的配置
EXTRACT EPMPTT
PASSTHRU
RMTHOST localhost,MGRPORT 7909
RMTTRAIL ./dirdat/tt
TABLE ggs.demo;
TABLE ggs.*;
目标端配置文件信息
mgr进程配置文件./GLOBALS的配置
MGRSERVNAME ggtarget
CHECKPOINTTABLE ggs.ggschkpt
replicat复制进程名为poratt的配置
replicat poratt
userid ggs@luxus2, password ggs
assumetargetdefs
reperror default, discard
discardfile ./dirrpt/poratt.dsc, purge
map ggs.demo, target ggs.demo;
map ggs.*, target ggs.*;
实验中遇到的故障及解决方法
1. 源端的传输进程中也加入了DDL INCLUDE ALL一段配置后,报错如下
解决方法:传输进程去掉DDL INCLUDE ALL这段配置后正常
2015-06-01 16:58:59 ERROR OGG-00528 Oracle GoldenGate Capture for Oracle, EPMPTT.prm: The DDL parameter is not supported for this data source. Please remove this parameter and all DDL operations will be propagated in pass-through (PASSTHRU) mode.
2. 在源中执行了ddl的sql语句后,源schema产生了一些表,但是目标schema没有表,导致replicat进程无法启动,报错如下
解决方法:把源中的数据expdp、impdp到目标库才能正常启动目标中的replicat进程,或在目标库执行@marker_setup.sql、@ddl_setup.sql两条语句才能启动目标库的replicat进程
2015-06-03 15:10:54 ERROR OGG-00199 Oracle GoldenGate Delivery for Oracle, FUZHI.prm: Table GGS.GGS_SETUP does not exist in target database.
2015-06-03 15:10:54 ERROR OGG-01668 Oracle GoldenGate Delivery for Oracle, FUZHI.prm: PROCESS ABENDING.
一些实验过程中遇到的问题的问答
1. A1、A2两表,源端和目标端的配置文件中只配置了schema.A1,A2更新后目标的A2会更新吗(增删改)
A2表不会更新,连新增都不会同步到目标的A2
2. A1、A2两表,源端和目标端的配置文件中配置了schema.*,A2更新后目标的A2会更新吗(增删改)
增删正常,改不行,如果想让改也正常,必须在源库中增加如下两句,此下语句执行之前的的改不会同步到目标库,执行之后产生的修改才会同步到目标库
dblogin userid ggs@luxus,password ggs
add trandata schema.*
3. A1、A2两表,源端和目标端的配置文件中先配置schema.*,抽取进程配置文件有有DDL INCLUDE ALL参数,复制进程配置文件没有DDL INCLUDE ALL参数,创建A3,并更新A3(增删改),看目标A3更新吗
正常更新
说明新增的表,不需要在源端重新执行一遍add trandata ggs.*即可正常改
4. A1、A2两表,源端和目标端的配置文件中先配置schema.A1,抽取进程配置文件有DDL INCLUDE ALL参数,复制进程配置文件没有DDL INCLUDE ALL参数,创建A4,看目标创建A4吗,并更新A4(增删改),看目标A4更新吗
建A4表成功
但是A4表新增都不成功,更不要说什么删改了
5. ddl配置好了的情况下,源的抽取进程去掉DDL INCLUDE ALL参数,源新增一个张A,会同步到目标库吗
不会同步过去
6. DDL INCLUDE ALL的配置放在配置文件什么位置没有什么影响,可以放最上面也可以放最下面,也可以放中间,并不需要考虑在什么适当位置增加下列内容:DDL INCLUDE ALL
7. DDL配置执行@ddl_setup.sql时需要关闭ggsci中的所有服务并退出ggsci,否则会报错有session连接服务器,yes or no进行选择继续还取消
8. SQL>alter database add supplemental log data;将数据库附加日志打开后还需要对每张表执行add trandata 吗?
需要!
如果不执行add trandata,insert同步没有问题(ORACLE数据库),但是在同步update或delete操作时,就会因为丢失主键报同步错误。不开启表级的最小附加日志,update的redo信息不记录没有进行更新的字段信息,如主键不更新的话主键不记录在redo中,所以会导致同步失败。表级补全日志需要在最小补全日志打开的情况下才起作用,只开启最小补全日志(alter database add supplemental log data;),redolog记录的信息还不够全面,必须再使用add trandata开启表级的补全日志以获得必要的信息。
9. 源端和目标表可以*.*如此模糊配置所有schema.objects吗
不行
否则抽取进程、传输进程、复制进程都启动不了,会报错OGG-00259 Schema name cannot be wildcarded
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2124153/ ,如需转载,请注明出处,否则将追究法律责任。