在Windows中 基于Oracle GoldenGate (OGG)进行Oracle->Oracle数据库同步配置(超详细)

Oracle GoldenGate Windows平台oracle->oracle单向数据同步,试验环境:
试验环境 源端软件版本 目标端软件版本
操作系统 Windows 10 64位 Windows 10 64位
IP地址 192.168.2.100 192.168.2.200
数据库 Oracle 11.2.0.3.0 64bit Oracle 11.2.0.3.0 64bit
数据库账号 ggs ggs
数据库表 demo demo
GoldenGate Oracle GoldenGate 12.2.0.2.3 for Oracle on Windows (64 bit) (327 MB) Oracle GoldenGate 12.2.0.2.3 for Oracle on Windows (64 bit) (327 MB)
dirdat目录 D:\app\win10\OGG122\install\dirdat\et E:\app\win10\OGG122\install\dirdat\et

一、Oracle环境安装

参考: https://www.cnblogs.com/sunseine/p/5630213.html

注意:因开启归档日志每天产生的日志会很大,所有需要做一个定时任务,定期进行清理归档日志。否则将空间占满,引起数据库报错:ORA-00257。相关资料:

windows:https://blog.csdn.net/anzhen0429/article/details/78637603
linux:https://www.jianshu.com/p/d098e48b02e2

(1)、设置Oracle的日志模式为:归档模式源端目标端都要修改):
image.png
  • cmd 中以sysdba身份连接数据库
> sqlplus "/as sysdba"
  • 查看数据库当前归档模式
SQL> select log_mode from v$database;
image.png
  • archive log list;查看自动归档状态和归档进程,shutdown immediate;关闭数据库,startup mount;启动到mount状态,alter database archivelog;修改数据库为归档模式,alter database open;打开数据库
SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

设置完成结果查询:


image.png
(2)、在源端库中打开force logging
SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES
(3)、在源端库中打开supplemental log
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL> alter database add supplemental log data;
Database altered.
(4)、在源端库切换日志,使更改生效
SQL> alter system switch logfile;
System altered.
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
(5)、在源端库中关闭回收站
SQL> show parameter recyclebin
NAME TYPE VALUE
------------- ----------- ------------------------------
recyclebin string on
SQL> alter system set recyclebin=off;
System altered.
# ----------- 如果不成功,执行以下命令 -------------
SQL> alter system set recyclebin=off deferred;
(6)、创建goldengate管理用户
  • 源端创建ggs用户
SQL> create user ggs identified by 123456 default tablespace users temporary tablespace temp;
SQL> grant connect ,resource,unlimited tablespace to ggs;
SQL> grant execute on utl_file to ggs;
SQL> grant select any dictionary,select any table to ggs;
SQL> grant alter any table to ggs;
SQL> grant flashback any table to ggs;
SQL> grant execute on dbms_flashback to ggs;
  • 源端目标端创建测试表:demo
SQL> create table ggs.demo(id number primary key,ename varchar2(10));
  • 目标端创建ggs用户
SQL> create user ggs identified by ggs default tablespace users temporary tablespace temp;
SQL> grant dba to ggs;

二、Oracle GoldenGate介绍

参考: https://www.cnblogs.com/qiumingcheng/p/5435907.html
文档: https://docs.oracle.com/goldengate/c1230/gg-winux/index.html

三、Oracle GoldenGate安装(源端和目标端)

安装条件:
1、以administrator身份登录系统进行安装,只要安装者属于系统的administrator组就行。
2、安装Microsoft Visual C ++ 2005 SP1 Redistributable Package,这个是必须的。

安装方法很简单,只需要把压缩包解压后,把文件放到指定文件夹即可,如c:/gg目录。

(1)、点击下载 Oracle GoldenGate

在使用12.3.0.1版本遇到WARNING OGG-01988 Could not find schematrandata function in source database: failed to find function.错误,需要安装修复补丁。

建议下载版本:12.2.0.2

image.png
(2)、解压122023_ggs_Windows_x64_shiphome.zip
点击setup.exe开始安装

选择数据库版本

选择安装位置及数据库位置

选择安装目录为刚才创建的安装目录其他都默认,接下来都步骤都默认直至安装完成。

  • 安装错误:ggsci.exe 已停止工作。

关键错误内容详情:问题事件名称: APPCRASH,故障模块名称:ntdll.dll,异常代码:c000007b

错误截图
  • 错误情况电脑环境


    错误情况电脑环境

解决方案:安装 Microsoft Visual C++ 2010 可再发行组件包 (x64) 即可
下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=14632

(3)、安装好了之后,设置环境变量,先查看services.msc的Oracle服务如图:
image

然后设置系统的环境变量:

ORACLE_HOME=D:\oracle\product\11.2.0\dbhome_1
ORACLE_SID=ORCL
  • ORACLE_HOME oracle安装路径地址
  • ORACLE_SID 上图oracle服务名

如图:

image

注意:源端与目标端都需要进行安装Oracle GoldenGate

四、Oracle GoldenGate配置

====== 以下为Source(同步的数据源)Oracle GoldenGate配置 ======

1、Oracle GoldenGate(源端)

(1)、在源端服务器安装的OGG根目录按住SHift+右键cmd进入OGG根目录的命令面板
(2)、执行ggsci.exe

c:\gg>ggsci.exe
Oracle GoldenGate Command Interpreter for Oracle
Version 12.2.0.2.3 OGGCORE_12.2.0.2.0_PLATFORMS_170727.1430
Windows x64 (optimized), Oracle 11g on Jul 27 2017 16:38:50
Operating system character set identified as GBK.

Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.

GGSCI (Win10) 1>
  • 添加manager进行到windows服务,使之可以随windows开机自行启动
    手动指定服务名GGMGR(默认就是GGMGR)。用edit params ./GLOBALS命令(注意./GLOBALS为大写),进入编辑文件,输入下面内容:

MGRSERVNAME GGMGR

保存退出后,用install addservice命令添加服务

c:\gg>install addservice
Service 'GGMGR' created.
Install program terminated normally.

(3)、输入create subdirs自动创建需要用到的文件夹

GGSCI (Win10) 1> create subdirs

主要目录介绍:
dirchk:存放检查点(Checkpoint)文件
dirdat:存放Trail与Extract文件,以后详述
dirdef:通过DEFGEN工具生成的源或目标的数据定义文件
dirpcs:存放进程状态文件
dirprm:存放参数文件
dirrpt:存放进程报告文件
dirsql:存放SQL脚本文件
dirtmp:当事务所需要的内存超过已分配内存时,缺省存储于此。

(4)、登录ggs账号,输入dblogin userid ggs,password 123456

GGSCI (Win10) 1> dblogin userid ggs,password 123456
Successfully logged into database.

(5)、添加表级的trandata,输入add trandata ggs.demo

GGSCI (Win10) 1> add trandata ggs.demo 
Logging of supplemental redo data enabled for table GGS.DEMO.
TRANDATA for scheduling columns has been added on table 'GGS.DEMO'.
TRANDATA for instantiation CSN has been added on table 'GGS.DEMO'.

注:表名可以使用通配符,如add trandata ggs.*
(5)、配置mgr管理进程,输入edit params mgr将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params mgr

以下是添加内容:

port 7500
dynamicportlist 7501-7505
autorestart extract *,waitminutes 2,retries 5

(6)、启动mgr进程,输入start mgr

GGSCI (Win10) 1> start mgr

(7)、配置extract抽取进程,输入edit params eora将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params eora

以下是添加内容:

extract eora
userid ggs,password 123456
exttrail D:\app\win10\OGG122\install\dirdat\et
table ggs.demo;

注:表名可以使用通配符,如table ggs.*
exttrailD:\app\win10\OGG122\install\dirdat\et为源端服务器的目录(自定义)地址。
保存后,添加并启动eora进程,输入add extract eora,tranlog,begin nowadd exttrail D:\app\win10\OGG122\install\dirdat\et,extract eorastart eora

GGSCI (Win10) 1> add extract eora,tranlog,begin now
GGSCI (Win10) 1> add exttrail D:\app\win10\OGG122\install\dirdat\et,extract eora
GGSCI (Win10) 1> start eora

add extract eora,tranlog,begin now //从当前时间开始同步
add extract eora, tranlog,begin 2019-02-11 13:00:00 //指定时间点开始同步

(8)、配置pump_so进程,输入edit params pump_so将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params pump_so

以下是添加内容:

extract Pump_so
Userid ggs,password 123456
rmthost 192.168.88.58, mgrport 7500
rmttrail E:\app\win10\ogg\install\dirdat\et
Table ggs.demo;

注:表名可以使用通配符,如Table ggs.*
特别注意rmttrailE:\app\win10\ogg\install\dirdat\et为目标端的缓存目录地址。
保存成功后,添加pump_so进程,输入(先不启动pump_so)add extract pump_so,exttrailsource D:\app\win10\OGG122\install\dirdat\etadd rmttrail E:\app\win10\ogg\install\dirdat\et,extract pump_so

GGSCI (Win10) 1> add extract pump_so,exttrailsource D:\app\win10\OGG122\install\dirdat\et -- 注意`exttrailsource`的地址为`源端`服务器的目录
GGSCI (Win10) 1> add rmttrail E:\app\win10\ogg\install\dirdat\et,extract pump_so  -- 注意`rmttrail`的地址为`目标端`服务器的目录

(8)、注意等待目标端安装完成后,启动start pump_so

  • 源端所需要启动的服务有3
> start mgr
> start eora
> start pump_so
> stop .. //停止服务

<< 到此源端的配置就结束了 >>
====== End Source(同步的数据源)Oracle GoldenGate配置 ======

====== 以下为Target(同步的目标数据库)Oracle GoldenGate配置 ======

2、Oracle GoldenGate(目标端)

(1)、在目标端服务器安装的OGG根目录按住SHift+右键cmd进入OGG根目录的命令面板

(2)、执行ggsci.exe

c:\gg>ggsci.exe

Oracle GoldenGate Command Interpreter for Oracle
Version 12.2.0.2.3 OGGCORE_12.2.0.2.0_PLATFORMS_170727.1430
Windows x64 (optimized), Oracle 11g on Jul 27 2017 16:38:50
Operating system character set identified as GBK.

Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.

GGSCI (Win10) 1>
  • 添加manager进行到windows服务,使之可以随windows开机自行启动
    手动指定服务名GGMGR(默认就是GGMGR)。用edit params ./GLOBALS命令(注意./GLOBALS为大写),进入编辑文件,输入下面内容:

MGRSERVNAME GGMGR

保存退出后,用install addservice命令添加服务

c:\gg>install addservice
Service 'GGMGR' created.
Install program terminated normally.

(3)、输入create subdirs自动创建需要用到的文件夹

GGSCI (Win10) 1> create subdirs

(4)、登录ggs账号,输入dblogin userid ggs,password 123456

GGSCI (Win10) 1> dblogin userid ggs,password 123456
Successfully logged into database.

(5)、添加表级的trandata,输入add trandata ggs.demo

GGSCI (Win10) 1> add trandata ggs.demo 
Logging of supplemental redo data enabled for table GGS.DEMO.
TRANDATA for scheduling columns has been added on table 'GGS.DEMO'.
TRANDATA for instantiation CSN has been added on table 'GGS.DEMO'.

注:表名可以使用通配符,如add trandata ggs.*
(6)、编辑GLOBAL文件,输入edit params ./GLOBALS将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params ./GLOBALS

以下是添加内容:

checkpointtable ggs.checkpoint
ALLOWOUTPUTDIR E:\app\win10\ogg\install\dirdat

(7)、登陆,输入dblogin userid ggs,password 123456

GGSCI (Win10) 1> dblogin userid ggs,password 123456

(8)、添加checkpoint,输入add checkpointtable ggs.checkpoint

GGSCI (Win10) 1> add checkpointtable ggs.checkpoint

(9)、配置mgr管理进程,输入edit params mgr将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params mgr

以下是添加内容:

port 7500
dynamicportlist 7501-7505
autostart er *
autorestart extract *,waitminutes 2,retries 5
lagreporthours 1
laginfominutes 3
lagcriticalminutes 5
purgeoldextracts E:\app\win10\ogg\install\dirdat\et
,usecheckpoints,minkeepdays 3

保存成功后,启动mgr管理进程start mgr

GGSCI (Win10) 1> start mgr

(10)、配置的复制进程,输入edit params repl将会弹出文本编辑器并写入:

GGSCI (Win10) 1> edit params repl

以下是添加内容:

replicat repl
userid ggs,password 123456
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/repl.dsc,append,megabytes 50
MAP ggs.demo, target ggs.demo;

注:表名可以使用通配符,如MAP ggs.*, target ggs.*
保存成功后,添加并且启动复制进程,输入add replicat repl,exttrail E:\app\win10\OGG122\install\dirdat\et,checkpointtable ggs.checkpointstart repl

GGSCI (Win10) 1> add replicat repl,exttrail E:\app\win10\ogg\install\dirdat\et,checkpointtable ggs.checkpoint
GGSCI (Win10) 1> start repl

(11)、打开目标端的7500-7505的端口,如图:


image.png
  • 目标端所需要启动的服务有2个
> start mgr
> start repl

<< 到此目标端的配置就结束了 >>
====== End target(同步的目标数据库)Oracle GoldenGate配置 ======

四、GoldenGate 测试

(1)、启动源端start pump_so

GGSCI (Win10) 1> start pump_so

目标端显示了这个info,如图:

image.png

源端的sqlplus.exe输入:

SQL> INSERT INTO "GGS"."DEMO"("ID", "ENAME") VALUES ('1', '测试1');
 已创建 1 行。
SQL> INSERT INTO "GGS"."DEMO"("ID", "ENAME") VALUES ('2', '测试2');
 已创建 1 行。
SQL> commit;

然后再去目标端看看效果如何,如图(我插入了2条):


image.png

注:可以到安装ogg的根目录中找到ggserr.log文件,查看错误日志。

五、GoldenGate 错误解决方案

1、 问题:ERROR OGG-01031 Oracle GoldenGate Capture for Oracle, PUMP_SO.prm: There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Reply received is Failed resolving output file D:\app\win10\OGG122\dirdat\et000000 (error: 3, 系统找不到指定的路径。)).

原因:配置抽取进程的rmttrail路径错误(配成了源端的地址,应该是目标端的地址),执行:

GGSCI (Win10 as ggs@orcl) 30> edit params pump_so

在弹出的文本编辑器中添加以下配置:

extract Pump_so
 
Userid ggs,password 123456
rmthost 目标端IP, mgrport 目标端端口
 
rmttrail 目标端存放文件地址
Table ggs.demo;

2、问题:ERROR OGG-01044 Oracle GoldenGate Capture for Oracle, PUMP_SO.prm: The trail 'D:\app\win10\ogg\install\dirdat\et' is not assigned to extract 'PUMP_SO'. Assign the trail to the extract with the command "ADD EXTTRAIL/RMTTRAIL D:\app\win10\ogg\install\dirdat\et, EXTRACT PUMP_SO".

原因:修改了rmttrail 目标端存放文件地址未更新,在GGSCI命令控制器中执行:

GGSCI (Win10 as ggs@orcl) 30> ADD EXTTRAIL/RMTTRAIL D:\app\win10\ogg\install\dirdat\et, EXTRACT PUMP_SO

3、ERROR OGG-01031 Oracle GoldenGate Capture for Oracle, PUMP_SO.prm: There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Reply received is Output file D:\app\win10\ogg\install\dirdat\et000000 is not in any allowed output directories.).

image.png

原因:从ogg12.2之后,如果远端队列文件默认不是在dirdat目录下,则需要在远端(目标服务器)OGG的 GLOBALS 文件中添加如下参数:

allowOutputDir D:\app\win10\ogg\install\dirdat

重启远端mgr进程之后,再启动本地传输进程,此时,可以正常进行数据投递,问题解决。
4、ERROR OGG-01224 Oracle GoldenGate Capture for Oracle, PUMP_SO.prm: TCP/IP error 10061 (由于目标计算机积极拒绝,无法连接。), endpoint:192.168.2.85:7500.
重启目标端mgr服务或问题3引发的
5、ggsci执行错误

[oracle@doudou-NAS ~]$ ggsci

ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory

解决方法:export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/opt/ogg