安装 Oracle

安装 Oracle11g 32位【Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误】 安装目录为 D:\oracle\product\11.1.0\db1 【这个目录要设置为 环境变量 ORACLE_HOME】

设置环境变量

JAVAHOME    C:\Program Files\Java\jdk1.8.0121

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

ORACLEHOME   D:\oracle\product\11.1.0\db1

ORACLE_SID   ORCL

如何查找环境变量

获取 ORACLESID  : 打开 SQLPlus,登录 SYS 账户,执行 select instancename from v$instance;

获取 ORACLEHOME : 查找 Oracle安装目录,这个目录有个特征:有一个子目录名叫 RDBMS。就是说: %ORACLEHOME%\RDBMS\ 这个路径要能正常打开即为配置成功。

安装 OGG

http://www.oracle.com/technetwork/cn/middleware/goldengate/downloads/index.html 拖到页面最后面

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第1张 搜索 32位的 Oracle_11g 的 OGG

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第2张

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第3张

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第4张

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第5张

目标1

  • 给安装的Oracle_11g 创建 两个用户 admin 和 root 。

  • admin 对应了 ADMIN 结构,创建了一个 TB_ TEST表。

  • root 对应了 ROOT 结构,也创建一个 TB_ TEST (表结构一摸一样)。

  • 当 admin.TBTEST 中的表数据 变化时,root.TB TEST 的表数据 自动同步(备份)

  • PS. 实际的 容灾备份,肯定是 两个 Oracle 服务器,通过网络传输 备份数据 —— 各位可以想象 admin 和 root 在两台不同服务器 上。

目标2

  • 当 admin.TB_ TEST 表数据发生变化时,把这种变化 传递给 Java、C# 程序。

  • 当 Java、C# 程序得到 数据变化消息时,把 数据的变化 记录到日志中(或者其他操作)。

配置数据库

打开 SQL Plus

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第6张

SYS登录

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第7张

启用日志存档模式:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第8张

启用强制记录模式:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第9张

启用 SUPPLEME:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第10张

关闭源端数据库回收站:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第11张

切换一下日志,最好还能重启一下 数据库服务 —— 或者重启一下系统:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第12张

创建用户,授权DBA权限(可以自己摸索OGG的最低权限)。

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第13张

创建数据表

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第14张

开始配置 OGG

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第15张

按顺序 输入如下指令:

> create subdirs

> edit param mgr

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第16张

往记事本中,写入 如下内容,保存关闭:

PORT 7809

DYNAMICPORTLIST 7840-7850

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第17张

> start mgr

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第18张

> dblogin userid admin password admin

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第19张

> add trandata admin.*

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第20张

> add extract ext1, tranlog, begin now

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第21张

> edit param ext1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第22张

填写如下配置:

extract ext1

userid admin,password oracle

rmthost 127.0.0.1, mgrport 7809

rmttrail D:\oracle\product\11.1.0\x86_ogg4oracle\dirdat\r1

dynamicresolution

gettruncates

table admin.*;

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第23张

> add rmttrail D:\oracle\product\11.1.0\x86_ogg4oracle\dirdat\r1 extract ext1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第24张

> start mgr

> start ext1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第25张

> info all

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第26张

复制 OGG 文件夹,准备开始配置 备份服务 root(用户),【admin 表 TBTEST 会备份到 root 表 TBTEST】

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第27张

双击 新复制的 ggsci.exe

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第28张

> edit param mgr

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第29张

> add replicat rep1 exttrail D:\oracle\product\11.1.0\x86_ogg4oracle_target\dirdat\r1, nodbcheckpoint

> edit param rep1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第30张

填写如下内容:(这里的配置是错误的,查错后的正确配置在下面)

replicat rep1

userid root,password oracle

assumetargetdefs

reperror default,discard

discardfile c:\oradata\repsz.dsc,append,megabytes 100

map admin., target root.;

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第31张

手动创建 上面的 C:\oradata\ 文件夹。【不手动创建会报错】

> start mgr

> start rep1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第32张

目前为止

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第33张

目标1 测试开始

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第34张 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第35张

执行脚本:

insert into TB_TEST(fid, fname, fbirthday, fsex) values (10, '路人甲', "TO_DATE"('1992-02-10', 'yyyy-MM-dd'), '男');

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第36张

对比两个表:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第37张

出现BUG了,作者想要冷静一会儿。

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第38张

仔细检查,似乎发现了 BUG:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第39张

大喊一声:神兽保佑,代码无BUG。

先在 ADMIN OGG中输入命令: > start mgr > start ext1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第40张

打开 ROOT 的 MGR 7909: > start mgr > start rep1

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第41张

这日子没法过了。

猜想: 我们在复制 D:\oracle\product\11.1.0\x86ogg4oracle\ 到 x86ogg4oracle_target 时,是不是把 源端的配置 也复制过来了?

于是在 x86ogg4oracletarget 中搜索 ext1 —— 确实搜索除了 源端中的 ext1 配置。【目标端不需要这个配置,把搜索出的 ext1 全部删除】

再次执行 insert 语句 —— 问题依然没有解决:还是无法同步 —— 心已经稀碎,碎了一地。

在一筹莫展时,意外在 x86ogg4oracletarget\ ggserr.log 中发现了一行错误:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第42张

将 x86ogg4oracle\dirdat\ 和 x86ogg4oracle_target\dirdat\ 两个文件夹一比较:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第43张

手动将 x86ogg4oracle\dirdat\ 中的文件 复制到 x86ogg4oracle_target\dirdat\ ,重启 源端、目标端 的 服务【start mgr 、start ext1、 start rep1、这些基本启动命令,我在文章的下面 就不多说了】

再次insert —— 奇迹发生了:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第44张

最终发现,想实现同步 就得让 \x86ogg4oracletarget\dirdat\ 中 有数据。那么这个目录的数据 从哪里来?

  • 1、\x86ogg4oracle\dirdata\ 中的数据 通过 某种机制 传输到 \x86ogg4oracle_target\dirdata\

  • 2、配置 ext1 时,其中的参数 rmttrail 不该配 源端路径,要配成 目标端路径

开始验证猜想:

  • 我们启动 源端OGG,启动 ext1,执行 insert脚本 —— 结果发现:\x86_ogg4oracle\dirdata\ 不会生成文件。

  • 我们再启动 目标端OGG,启动 rep1,执行 insert脚本 —— 结果发现 \x86_ogg4oracle\dirdata\ 文件产生了。

  • —— 即:配置ext1 时的数据目录,rmttrail 是 目标端目录。

理论清晰了,开始重新配置 ext1 和 rep1:

  • 在 \x86_ogg4oracle\ 中搜索 ext1 —— 全部删除,保留 ext1.prm

  • 在 \x86ogg4oracletarget\ 中搜索 rep1 —— 全部删除,保留 rep1.prm

重建 ext1:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第45张

extract ext1

userid admin,password oracle

rmthost 127.0.0.1, mgrport 7909

rmttrail D:\oracle\product\11.1.0\x86ogg4oracletarget\dirdat\r1

dynamicresolution

gettruncates

table admin.*;

重建 rep1:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第46张

replicat rep1

userid root,password oracle

assumetargetdefs

reperror default,discard

discardfile D:\oracle\product\11.1.0\x86ogg4oracletarget\dirdat\repsz.dsc,append,megabytes 100

map admin., target root.;

执行 insert 脚本 —— 2秒钟后,同步成功:

『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南 Oracle 第47张

遗留问题

\x86_ogg4oracle\ 在启动 ext1 时, 执行 insert —— 捕获到的数据变化 存放在哪里?

目标2,如何 编写对应的 Java插件 —— 待续。

OGG 是基于变化的同步 —— 之前没同步的部分,启用OGG之后也不会同步。

那么: 源端 TBTEST.FID =10,目标端 TBTEST.FID =30(一开始就不同步)

  • —— 源端执行 UPDATE TB_TEST SET FID=FID*2

  • —— 目标端 的 FID 会变成多少?与源端一致 FID=20?还是 FID=60?

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄