ITPub博客

首页 > 数据库 > Oracle > OGG_windows搭建实验

OGG_windows搭建实验

原创 Oracle 作者:lusklusklusk 时间:2016-08-29 16:29:27 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。 Oracle OCM、Mysql OCP, 10年DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    348
  • 访问量
    1174934