『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南
安装 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 拖到页面最后面
搜索 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:\oracle\product\11.1.0\x86_ogg4oracle\dirdat\r1
dynamicresolution
gettruncates
table admin.*;

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

> start mgr
> start ext1

> info all

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

双击 新复制的 ggsci.exe

> edit param mgr

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

填写如下内容:(这里的配置是错误的,查错后的正确配置在下面)
replicat rep1
userid root,password oracle
assumetargetdefs
reperror default,discard
discardfile c:\oradata\repsz.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:\oracle\product\11.1.0\x86ogg4oracle\ 到 x86ogg4oracle_target 时,是不是把 源端的配置 也复制过来了?
于是在 x86ogg4oracletarget 中搜索 ext1 —— 确实搜索除了 源端中的 ext1 配置。【目标端不需要这个配置,把搜索出的 ext1 全部删除】
再次执行 insert 语句 —— 问题依然没有解决:还是无法同步 —— 心已经稀碎,碎了一地。
在一筹莫展时,意外在 x86ogg4oracletarget\ ggserr.log 中发现了一行错误:

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

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

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

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:

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

遗留问题
\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?
『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南的更多相关文章
- 『OGG 03』Win7 配置 Oracle GoldenGate 一次性成功(包括Adapter Java)
安装Oracle: 安装 Oracle_11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produ ...
- 『OGG 02』Win7 配置 Oracle GoldenGate Adapter Java 踩坑指南
上一文章 <__Win7 配置OGG(Oracle GoldenGate).docx>定下了 两个目标: 目标1: 给安装的Oracle_11g 创建 两个用户 admin 和 root ...
- 配置Oracle GoldenGate安全性
本章介绍如何配置Oracle GoldenGate安全性. 本章包括以下部分: Overview of Oracle GoldenGate Security Options Encrypting Da ...
- SpringMVC自定义配置消息转换器踩坑总结
问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...
- spring零配置AOP踩坑指南
今天照着书,试着配了AOP(全注解),结果踩了各种坑,后来参考书附带的源码,终于走出来了,现在总结一下 除了spring的jar包以外,还需要导入以下包: 1.Spring核心配置文件beans.xm ...
- 多页应用 Webpack4 配置优化与踩坑记录
前言 最近新起了一个多页项目,之前都未使用 webpack4 ,于是准备上手实践一下.这篇文章主要就是一些配置介绍,对于正准备使用 webpack4 的同学,可以做一些参考. webpack4 相比之 ...
- Hive配置Tez引擎踩坑
框架版本 Hadoop 2.7.7 Hive 2.3.7 Tez 0.9.2 保证hadoop集群启动,hive元数据服务启动 上传tez到HDFS tar -zxvf apache-tez-0.9. ...
- PX4配置过程与踩坑
0.前言 由于需要在GitHub下载代码,而国内访问受限,可能会出现一些问题,这里建议使用github国内镜像,参看:GitHub国内镜像网站,当然下面会给出具体解决方案. 1.步骤 1.1下载源码: ...
- VirtualBox 下 CentOS7 静态 IP 的配置 → 多次踩坑总结,蚌埠住了!
开心一刻 一个消化不良的病人向医生抱怨:我近来很不正常,吃什么拉什么,吃黄瓜拉黄瓜,吃西瓜拉西瓜,怎样才能恢复正常呢? 医生沉默片刻:那你只能吃屎了 环境准备 VirtualBox 6.1 网络连接方 ...
随机推荐
- 原生Feign使用详解
一,简介 Feign使得 Java HTTP 客户端编写更方便.Feign 灵感来源于Retrofit.JAXRS-2.0和WebSocket.Feign最初是为了降低统一绑定Denominator到 ...
- Python人脸识别最佳教材典范,40行代码搭建人脸识别系统!
Face Id是一款高端的人脸解锁软件,官方称:"在一百万张脸中识别出你的脸."百度.谷歌.腾讯等各大企业都花费数亿来鞭策人工智能的崛起,而实际的人脸识别技术是否有那么神奇? 绿帽 ...
- 关于JAVA中异常处理的简单阐释.
---恢复内容开始--- 这是我的一篇要在博客园发布的随笔,主要是简单的概括一下我本次所学的关于异常处理的知识.有讲的不妥当的地方,或者有需要补充的,还请各位高人给指点,共同学习,虚心求学.谢谢啦~ ...
- QPropertyAnimation实现图形,控件的旋转和位移动画,尤其是旋转
QPropertyAnimation可以简单方便的实现对象的旋转和移动的动画效果. 1. 移动 Pixmap *item = new Pixmap(kineticPix); QPropertyAnim ...
- javase---string类介绍01
一.String类简介 java.lang.String类用于描述一个字符序列.String类是不可变对象的类.其对象一旦被创建,永远无法改变.但是对象的引用可以重新赋值.而且String类被fina ...
- C语言 > 构造素数表
#include <stdio.h> #define NUMBER 1000 int main(){ int isPrime[NUMBER]; ; i < NUMBER; i++){ ...
- Map Reduce和流处理
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由@从流域到海域翻译,发表于腾讯云+社区 map()和reduce()是在集群式设备上用来做大规模数据处理的方法,用户定义一个特定的映射 ...
- Oracle中的优化问题
1. 在查询时, 尽量使用列名; 2. 在子查询和多表查询都可以达到目的时, 尽量使用多表查询; 3. 在集合运算中, 如果集合中含有null, 那么不能用not in, 但可以用in(可以理解为nu ...
- Java 精简Jre jar打包成exe
#开始 最近几天都在忙一个事情,那就是尝试精简jre,我想不明白为什么甲骨文官方不出exe打包工具... 网络上精简jre的文章很多,但是原创的似乎没几个,绝大多数都是转发同一个博客, 这里借鉴了不少 ...
- SpringBoot编写自定义的starter 专题
What’s in a name All official starters follow a similar naming pattern; spring-boot-starter-*, where ...