Oracle GoldenGate 在Windows平台实现oracle<-->oracle双向数据同步,两台互为源端和目标端,实现环境:
环境 | 节点1软件 | 节点2软件 |
操作系统 | Windows server 2012 | Windows server 2012 |
IP地址 | 192.168.38.41 | 192.168.38.42 |
数据库 | Oracle 11g 11.2.0.1.0 - 64bit | Oracle 11g 11.2.0.1.0 - 64bit |
数据库账号 | ggs | ggs |
数据库表 | t_student,t_teacher | t_student,t_teacher |
GoldenGate | GoldenGate on Oracle v12.1.2.1 | GoldenGate on Oracle v12.1.2.1 |
dirdat源端目录 | D:\app\ogg_data\sources\dirdat\et | D:\app\ogg_data\sources\dirdat\et |
dirdat目标端目录 | D:\app\ogg_data\target\dirdat\et | D:\app\ogg_data\target\dirdat\et |
一,检查ORACLE环境配置
此处省略ORACLE的安装过程,如果不会安装的请移步学习安装教程,这里就默认已经安装好了然后配置ORACLE相关信息。
1.cmd下
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 6月 1 14:12:29 2021
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
1.将ORACLE设置为归档模式(源端和目标端都要修改)
1.1查询是否为归档模式:
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG --非归档模式
1.2以下步骤修改为归档模式
SQL> shutdown immediate;--关闭
SQL> startup mount;--启动到mount模式
SQL> alter database archivelog;--修改数据库到归档模式
SQL> alter database open;--打开数据库
1.3查询数据库是否为归档模式
SQL> select log_mode from v$database;--查询是否为归档模式
LOG_MODE
------------
ARCHIVELOG --归档模式
2.在源端打开force logging配置,因为本案例是互为源端,所以两端都要打开该配置
SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
数据库已更改。
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;
数据库已更改。
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
4.在源端修改 recyclebin=on 为 off 配置,因为本案例是互为源端,所以两端都要修改该配置
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ------
recyclebin string on
SQL> alter system set recyclebin=off deferred;
系统已更改。
二.新建表空间和用户ggs,以及对用户授权(两端都要建)
1.创建表空间:TS_GGS
SQL> create tablespace TS_GGS datafile 'd:/app/ts_space/TS_GGS.dbf' size 50M aut
oextend on next 10M;
表空间已创建。
2.创建用户ggs,密码123,及给用户ggs授权
SQL> create user ggs identified by 123 default tablespace TS_GGS temporary table
space 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;
授权成功。
SQL> grant dba to ggs;
授权成功。
3.创建表,创建的表一定要设置主键或者唯一建的列,不然会出现麻烦事情
SQL> create table ggs.t_student(
2 uuid VARCHAR2(32) default sys_guid() not null,
3 name VARCHAR2(32),
4 age NUMBER,
5 gender VARCHAR2(2),
6 create_time DATE
7 );
表已创建。
SQL> create table ggs.t_teacher(
2 uuid VARCHAR2(32) default sys_guid() not null,
3 name VARCHAR2(32),
4 grade VARCHAR2(32),
5 create_time DATE
6 );
表已创建。
设置系统环境变量,设置ORACLE_SID,ORACLE_HOME
至此,ORACLE配置完毕,如果是已经安装好在使用的数据库,那么请参考配置,已有的信息就不用再配置。下面开始ogg安装!
三、OGG 安装(源端和目标端都要安装)和配置
1.本人用的是Oracle GoldenGate on Oracle v12.1.2.1版本,下载之后解压安装下面图中的步骤一步一步就可以完成,不再文字叙述。软件我已放在网盘,可自行下载,
链接:https://pan.baidu.com/s/1fU3o3-UC7igYcQ48ROp8rQ
提取码:9shz
2.安装完成之后,进入cmd,切换到d:\app\ogg_home目录下,执行ggsci程序,开始配置ogg,
Windows server 2012 启动会出现提示缺少 msvcr100.dll msvcp100.dll 这两个文件,在其他电脑上找找,拷贝来放到C:\Windows\System32下面即可,没提示就不用此步骤!
D:\app\ogg_home>ggsci.exe
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140920.0203
Windows x64 (optimized), Oracle 11g on Sep 20 2014 07:17:50
Operating system character set identified as GBK.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
3.下面开始源端的配置
3.1 把ogg的管理进程添加到服务中去,可以开机启动,输入edit params ./GLOBALS会新建一个文件
GGSCI (dbtestm) 1> edit params ./GLOBALS
输入内容:MGRSERVNAME GGMGR
3.2 保存并关闭文件。从新在d:\app\ogg_home目录下面打开一个cmd窗口输入: install addservice 命令添加服务。
D:\app\ogg_home>install addservice
Service 'GGMGR' created.
Install program terminated normally.
3.3 返回到ogg 配置命令窗口 输入 create subdirs 创建需要用到的文件目录
GGSCI (dbtestm) 2> create subdirs
Creating subdirectories under current directory D:\app\ogg_home
Parameter files D:\app\ogg_home\dirprm: already exists
Report files D:\app\ogg_home\dirrpt: created
Checkpoint files D:\app\ogg_home\dirchk: created
Process status files D:\app\ogg_home\dirpcs: created
SQL script files D:\app\ogg_home\dirsql: created
Database definitions files D:\app\ogg_home\dirdef: created
Extract data files D:\app\ogg_home\dirdat: created
Temporary files D:\app\ogg_home\dirtmp: created
Credential store files D:\app\ogg_home\dircrd: created
Masterkey wallet files D:\app\ogg_home\dirwlt: created
Dump files D:\app\ogg_home\dirdmp: created
3.4用之前创建的ORACLE用户名和密码在ogg配置窗口登录:dblogin userid ggs,password 123
GGSCI (dbtestm) 3> dblogin userid ggs,password 123
Successfully logged into database.
3.5为数据库中的表添加trandata 配置(*注意,这个操作之前一定要给表添加主键或者是唯一建的列),输入 add trandata ggs.T_STUDENT ,add trandata ggs.T_TEACHER ,表名要大写注意。如果想删除重新添加,如: delete trandata ggs.T_STUDENT,只需把add换成delete即可!
GGSCI (dbtestm as ggs@orcl) 7> add trandata ggs.T_STUDENT
Logging of supplemental redo data enabled for table GGS.T_STUDENT.
TRANDATA for scheduling columns has been added on table 'GGS.T_STUDENT'.
GGSCI (dbtestm as ggs@orcl) 8> add trandata ggs.T_TEACHER
Logging of supplemental redo data enabled for table GGS.T_TEACHER.
TRANDATA for scheduling columns has been added on table 'GGS.T_TEACHER'.
PS:此步骤中如果表比较多,或者全库都要同步的话,可以使用:add trandata ggs.* ,*表示ggs下面的所有表。
3.6配置mgr管理进程,输入edit params mgr 新建一个文件
GGSCI (dbtestm as ggs@orcl) 9> edit params mgr
文件中添加以下内容
port 7500
dynamicportlist 7501-7505
autorestart extract *,waitminutes 2,retries 5
保存关闭文件。
3.7启动mgr进程,使用 start mgr
GGSCI (dbtestm as ggs@orcl) 10> start mgr
Starting Manager as service ('GGMGR')...
Service started.
3.8配置extract抽取进程,输入edit params eora 新建文件
GGSCI (dbtestm as ggs@orcl) 11> edit params eora
输入以下内容
extract eora
userid ggs,password 123
exttrail D:\app\ogg_data\sources\dirdat\et
table ggs.t_student;
table ggs.t_teacher;
PS:表名也可以使用*号代替;如:table ggs.* 表示抽取ggs下的所有表。
exttrail D:\app\ogg_data\sources\dirdat\et 表示抽取进程抽取的文件保存在这个目录下。保存后配置以下命令:
add extract eora,tranlog,begin now 从现在开始抽取,也可以指定具体时间,比如把now换成:2021-07-02 13:00:00 时间开始
add exttrail D:\app\ogg_data\sources\dirdat\et,extract eora
start eora 启动抽取进程eora。
GGSCI (dbtestm as ggs@orcl) 12> add extract eora,tranlog,begin now
EXTRACT added.
GGSCI (dbtestm as ggs@orcl) 13> add exttrail D:\app\ogg_data\sources\dirdat\et,e
xtract eora
EXTTRAIL added.
GGSCI (dbtestm as ggs@orcl) 14> start eora
Sending START request to MANAGER ('GGMGR') ...
EXTRACT EORA starting
start eora 启动抽取进程eora之后即可看到D:\app\ogg_data\sources\dirdat\et下面有了日志文件
3.9配置投递进程,前面是eora抽取进程生成日志文件,现在是需要投递进程把文件投递到目标端指定的文件夹下面,配置如下:输入 edit params pump_so 生成投递进程配置文件
GGSCI (dbtestm as ggs@orcl) 19> edit params pump_so
配置文件中添加以下内容
extract Pump_so
Userid ggs,password 123
rmthost 192.168.38.42, mgrport 7500
rmttrail D:\app\ogg_data\target\dirdat\et
table ggs.t_student;
table ggs.t_teacher;
PS:同上一样,表名也可以使用*号代替;如:table ggs.* 表示。这里的rmttrail 配置项表示投递目标端的所在文件夹D:\app\ogg_data\target\dirdat\et。
输入命令配置投递进程:注意下面第一句的目录和第二句的目录对应,别搞错了,分别对应上面的抽取进程的目录和投递进程的目录噢,千万别错了噶!
add extract pump_so,exttrailsource D:\app\ogg_data\sources\dirdat\et
add rmttrail D:\app\ogg_data\target\dirdat\et,extract pump_so
GGSCI (dbtestm as ggs@orcl) 23> add extract pump_so,exttrailsource D:\app\ogg_da
ta\sources\dirdat\et
EXTRACT added.
GGSCI (dbtestm as ggs@orcl) 24> add rmttrail D:\app\ogg_data\target\dirdat\et,ex
tract pump_so
RMTTRAIL added.
投递进程已经配置完毕。暂时不启动投递进程,因为目标端还没有配置。现在输入 info all 可以看到3个进程及运行状态:
GGSCI (dbtestm as ggs@orcl) 25> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA 00:00:00 00:00:04
EXTRACT STOPPED PUMP_SO 00:00:00 00:02:41
到此,源端配置结束。另外一台也是相同配置,照步骤来即可,下面开始目标端的复制进程配置。
四 、ogg目标端的配置
同样进入安装目录下面打开CMD命令窗口输入 ggsci回车:
D:\app\ogg_home>ggsci.exe
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0 OGGCORE_12.1.2.1.0_PLATFORMS_140920.0203
Windows x64 (optimized), Oracle 11g on Sep 20 2014 07:17:50
Operating system character set identified as GBK.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
4.1配置参考3.1到3.5一模一样的配置。此处不在重复。把3.1到3.5配置完成一遍,开始下面额配置
4.2打开edit params ./GLOBALS 文件,追加以下内容
checkpointtable ggs.checkpoint
4.2登录账号:dblogin userid ggs,password 123
GGSCI (dbtestmb as ggs@orcl) 13> dblogin userid ggs,password 123
Successfully logged into database.
4.3登录checkpoint,输入以下add checkpointtable ggs.checkpoint
:
GGSCI (dbtestmb as ggs@orcl) 14> add checkpointtable ggs.checkpoint
Successfully created checkpoint table ggs.checkpoint.
4.4配置mgr管理进程,输入edit params mgr新建文件写入以下文件:
GGSCI (dbtestmb as ggs@orcl) 16> edit params mgr
添加以下文件内容保存关闭。
port 7500
dynamicportlist 7501-7505
autostart er *
autorestart extract *,waitminutes 2,retries 5
lagreporthours 1
laginfominutes 3
lagcriticalminutes 5
purgeoldextracts D:\app\ogg_data\target\dirdat\et,usecheckpoints,minkeepdays 3
4.5配置复制进程repl,输入edit params repl新建配置文件输入以下内容保存关闭。
replicat repl
userid ggs,password 123
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/repl.dsc,append,megabytes 50
MAP ggs.t_student, target ggs.t_student;
MAP ggs.t_teacher, target ggs.t_teacher;
PS:此处的表名也可以换成*号。即简化为一句配置:MAP ggs.*, target ggs.*; target前面一定要有空格才行。
输入以下命令创建复制进程:
add replicat repl,exttrail D:\app\ogg_data\target\dirdat\et,checkpointtable ggs.checkpoint
GGSCI (dbtestmb as ggs@orcl) 20> add replicat repl,exttrail D:\app\ogg_data\targ
et\dirdat\et,checkpointtable ggs.checkpoint
REPLICAT added.
到此目标端就配置完毕。输入 info all即可看到进程状态:
GGSCI (dbtestmb as ggs@orcl) 22> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
REPLICAT STOPPED REPL 00:00:00 00:02:17
启动mgr进程和,repl进程,
start mgr
start repl
GGSCI (dbtestmb as ggs@orcl) 23> start mgr
Starting Manager as service ('GGMGR')...
Service started.
GGSCI (dbtestmb as ggs@orcl) 26> start repl
Sending START request to MANAGER ('GGMGR') ...
REPLICAT REPL starting
GGSCI (dbtestmb as ggs@orcl) 27> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REPL 00:00:00 00:00:02
2个进程已启动,到此目标端配置完毕!
4.6 打开源端的pump_so 进程,测试数据是否能从41到42数据库。
GGSCI (dbtestm) 3> start pump_so
Sending START request to MANAGER ('GGMGR') ...
EXTRACT PUMP_SO starting
GGSCI (dbtestm) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA 01:03:20 00:00:07
EXTRACT RUNNING PUMP_SO 00:00:00 01:26:49
在41数据库的t_student表插入10w条数据,看看42数据库是否能够实现同步,
由上图可知,数据以及过来了!至此实现了单向同步,接下来,需要实现双向同步,很简单,在原来的源端41添加复制进程,在原来的目标端42添加抽取进程eora和投递进程pump_so进程即可实现双向同步,过程请回看源端和目标端的步骤,一步一步来,相信会实现的。
如果遇到进场起不来在ogg的安装目录下面有个日志文件:D:\app\ogg_home\ggserr.log,抱错的信息一般都在这里,然后根据实际异常信息解决问题即可。另外D:\app\ogg_home\dirrpt下面有个repl.dsc文件里面执行错误的记录都在这里,打开查找即可。
不过,过程中可能会遇到各种问题,尤其是第一次做的朋友,我这篇写的很详细,花了近一天的时间写的,如果您觉得可以,请点赞收藏,欢迎一起交流!如果有不懂的问题,可以在下面回复评论。或者加我的QQ:975585039 备注好事由谢谢。关于ogg的使用和维护,以及遇到的一些问题或者中断恢复等问题,下一篇博客再详细写下来!