• 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南


    安装 Oracle

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

    设置环境变量

    JAVAHOME    C:Program FilesJavajdk1.8.0121

    ORACLEHOME   D:oracleproduct11.1.0db1

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

    搜索 32位的 Oracle_11g 的 OGG

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

    SYS登录

    启用日志存档模式:

    启用强制记录模式:

    启用 SUPPLEME:

    关闭源端数据库回收站:

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

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

    创建数据表

    开始配置 OGG

    按顺序 输入如下指令:

    > create subdirs

    > edit param mgr

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

    PORT 7809

    DYNAMICPORTLIST 7840-7850

    > start mgr

    > dblogin userid admin password admin

    > add trandata admin.*

    > add extract ext1, tranlog, begin now

    > edit param ext1

    填写如下配置:

    extract ext1

    userid admin,password oracle

    rmthost 127.0.0.1, mgrport 7809

    rmttrail D:oracleproduct11.1.0x86_ogg4oracledirdat 1

    dynamicresolution

    gettruncates

    table admin.*;

    > add rmttrail D:oracleproduct11.1.0x86_ogg4oracledirdat 1 extract ext1

    > start mgr

    > start ext1

    > info all

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

    双击 新复制的 ggsci.exe

    > edit param mgr

    > add replicat rep1 exttrail D:oracleproduct11.1.0x86_ogg4oracle_targetdirdat 1, nodbcheckpoint

    > edit param rep1

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

    replicat rep1

    userid root,password oracle

    assumetargetdefs

    reperror default,discard

    discardfile c:oradata epsz.dsc,append,megabytes 100

    map admin., target root.;

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

    > start mgr

    > start rep1

    目前为止

    目标1 测试开始

    执行脚本:

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

    对比两个表:

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

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

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

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

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

    这日子没法过了。

    猜想: 我们在复制 D:oracleproduct11.1.0x86ogg4oracle 到 x86ogg4oracle_target 时,是不是把 源端的配置 也复制过来了?

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

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

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

    将 x86ogg4oracledirdat 和 x86ogg4oracle_targetdirdat 两个文件夹一比较:

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

    再次insert —— 奇迹发生了:

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

    • 1、x86ogg4oracledirdata 中的数据 通过 某种机制 传输到 x86ogg4oracle_targetdirdata

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

    开始验证猜想:

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

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

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

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

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

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

    重建 ext1:

    extract ext1

    userid admin,password oracle

    rmthost 127.0.0.1, mgrport 7909

    rmttrail D:oracleproduct11.1.0x86ogg4oracletargetdirdat 1

    dynamicresolution

    gettruncates

    table admin.*;

    重建 rep1:

    replicat rep1

    userid root,password oracle

    assumetargetdefs

    reperror default,discard

    discardfile D:oracleproduct11.1.0x86ogg4oracletargetdirdat epsz.dsc,append,megabytes 100

    map admin., target root.;

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

    遗留问题

    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?

  • 相关阅读:
    c# linq查询的等于大于符号是什么意思?
    c# Socket tcpClient处理连接超时方式timeout
    不同网段服务器与客户端连接问题解决方法TCP/IP_C/S
    Http请求响应及SpringMVC相关注解解析
    Nginx部署项目,转发规则,负载均衡配置
    Linux redis设置后台启动
    Linux centos7安装Jdk nginx redis
    SpringCloud整合SpringSecurity JWT进行认证 ,鉴权
    C#中class与struct的区别概述
    列举ASP.NET 页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/Win7_OGG_Fail.html
Copyright © 2020-2023  润新知