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:59ERROROGG-00528Oracle 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进程,进程
2015-06-03 15:10:54ERROROGG-00199Oracle GoldenGate
Delivery for Oracle, FUZHI.prm:Table
GGS.GGS_SETUP does not exist in target database.
2015-06-03 15:10:54ERROROGG-01668Oracle 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.中的所有服务并退出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