【无标题】win系统oracle搭建ogg

win系统oracle搭建ogg

安装 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

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 拖到页面最后面

70e6dabbddd9ce1ff4bb8a746c2b1407.png 搜索 32位的 Oracle_11g 的 OGG

2c49ad9d4079c1676be1af0c3a1ec780.png

bbbb34b65aef0a64f06738455c3fcb62.png

ec421f84a51e8c025cf6ee8fa796e023.png

a6fa323ed49de03ed576f0b74ffd2443.png

目标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

9803d69b5d1448240ea01cb0b9d4c052.png

SYS登录

772928eb9fdc4489ce4cc021107f7123.png

启用日志存档模式:

eb4557c61a8e8732df55c96fe534f484.png

启用强制记录模式:

dc211af3c1e498cd4b2ea881be42a2e5.png

启用 SUPPLEME:

0779dd16a1a61b50c41abb442c1a8ff1.png

关闭源端数据库回收站:

dac08666a37215bf4369d5d160a01bd8.png

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

29c5d8fd11654d4a10501d84fbb4b638.png

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

5d3bda14baa5d6acf2b3e6a92ea79d3c.png

创建数据表

b0e4716d543a3c1b07e914f911e5b8f0.png

开始配置 OGG

7f4ce79f2f84603e2f2a9dcb65cc5d3d.png

按顺序 输入如下指令:

> create subdirs

> edit param mgr

68b36f55f9fc85125894e2a417639845.png

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

PORT 7809

DYNAMICPORTLIST 7840-7850

4d089eb02312b470db007a2dd394d609.png

> start mgr

9dc0f88fb39e8a32a6d796d44962823a.png

> dblogin userid admin password admin

bc0839155ea8e2bcfb7c987073b63bfb.png

> add trandata admin.*

e5460dec34db6c688ea5507f5ca7f99e.png

> add extract ext1, tranlog, begin now

5ca9a42d6fe21047840b3a1772b418aa.png

> edit param ext1

8992cc2fed9ca5d32bf0eb8a9dfc8b5b.png

填写如下配置:

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.*;

f268aa36ba47f2fc2a57f4ebd9bf5483.png

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

fa3add44d9f436af674bfcbadf970f25.png

> start mgr

> start ext1

0fe9f051b9d88b5ef3a998b559ddb3d6.png

> info all

76925552a1aef0b09a617fc891de9267.png

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

b4937ae286565f3532a79e75f9a7de09.png

双击 新复制的 ggsci.exe

7b2634d0afa349abcac4e80e639e2d0b.png

> edit param mgr

37e15d749b55e4e31e08a609897e280c.png

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

> edit param rep1

cb1c6f9a0214d5cdf79a29df6331ec3a.png

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

replicat rep1

userid root,password oracle

assumetargetdefs

reperror default,discard

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

map admin., target root.;

8a6648884d7c82d08d4ebcc36e09650e.png

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

> start mgr

> start rep1

886d490b6b12723dcabf112d0bbb148b.png

目前为止

41e56d47bbc124ebc145308718c35894.png

目标1 测试开始

1221b40c3c2656e9a2aa219a92808d36.png

21a870f10879f6792d67d217ca2222e5.png

执行脚本:

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

be5116b0717c028d9376919843eebbfe.png

对比两个表:

51d949210cd14763cf60ad57ae8fd7b1.png

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

e9dfe89644b48578bba82014c0c0d5fa.png

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

c81aba2f83f785e9c90203e9dae91738.png

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

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

0dd57d7d948ea9de3f5f3fd5b17e596d.png

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

6f4cfd691970a181bd2ca6488728b4da.png

这日子没法过了。

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

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

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

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

75f421b248909d03eca6edc3cc9e64b2.png

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

ebc3747265e8838ed75d87d0a5f8702d.png

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

再次insert —— 奇迹发生了:

41678aeea9925ab57a9de09b80290258.png

最终发现,想实现同步 就得让 \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:

23f21d00237cbd23306918c49b738095.png

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:

b03aff79e3f6761e8839506f60a78958.png

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秒钟后,同步成功:

0f46ef499fd50e9abbbd70be790833b3.png

遗留问题

\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?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值