最近接了一个数据库同步的项目,其实开始考虑的是别的免费同步工具,不过我们老大说免费的太钓丝,不如收费的高大上,客户有钱,不需要为对方节省,况且免费的有各种限制,功能不够全面。言归正传,我选择了ORACLE的GoldenGate 产品,网上有一大堆操作说明文档,都是百度搜出来的,按照那个严格操作,基本上总会出现各种各样的错误,唉,还是怀恋以前的google,搜出的老外的文章,一般不会出错。经过几天的研究实践,特意把操作过程记录下来,按照下面步骤输入,不会出错。
GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。
现在网上的GOLDENGATE文档只是记录了配置操作过程,而事实上,每个人操作可能遇到的问题不尽相同,针对遇到的问题与解决方法各不一样,完全按照网上的文档操作往往会失败,因此这里记录下在32位和64位ORACLE下操作GOLDENGATE的过程与遇到的问题。
一、操作环境:WIN764位系统 32位ORACLE+32位GOLDENGATE
目的:在一个库下面两个不同用户之间实现数据同步。
1. 创建数据库实例
假设创建的数据库实例SID为ogg
2. 设置环境变量
在系统属性-高级-环境变量里面设置如下两个环境变量的值,如
ORACLE_HOME=D:\app\Administrator\product\11.2.0\dbhome_1
ORACLE_SID=ogg
3. 配置oracle数据库
(1).打开归档模式
SQL> archive log list
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open
(2).在库中打开force logging
SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES
(3). 在库中打开supplementallog
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL> alter database add supplemental log data;
Database altered.
(4).切换日志,使更改生效
SQL> alter system switch logfile;
System altered.
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
(5).在库中关闭回收站
SQL> show parameter recyclebin
NAME TYPE VALUE
------------- ----------- ------------------------------
recyclebin string on
SQL> alter system set recyclebin=off;
System altered.
注:如果是oracle 10.1版本使用alter system set“_recyclebin=off”;该命令经过实验非必要,在本机测试,不运行此命令照常同步数据
4.创建测试的用户账户和表
Create user ggs identified by ggs;
Create user ggt identified by ggt;
Grant dba to ggs;
Grant dba to ggt;
Conn ggs/ggs
Create table test(
Stu_id number(6),
Stu_name varchar2(20),
Stu_pass varchar2(20)
);
Conn ggt/ggt;
Create table test(
Stu_id number(6),
Stu_name varchar2(20),
Stu_pass varchar2(20)
);
5.配置goldengate
1) 假设将goldengate解压到c:\gg目录,进入此目录
输入命令ggsci.exe
然后输入Createsubdirs
2) ggsci>Edit param mgr
输入参数内容:
Port7809 --set the manager running port
保存退出
ggsci>Startmgr
To start the mgrprocess
可以输入命令Infoall查看运行状况
3) Add supplemental logging for table, both source and target
GGSCI>dblogin ggs,password ggs(在配置了环境变量指定ORACLE_SID的前提下,否则用命令dblogin ggs@ogg,password ggs)
GGSCI>add trandata ggs.test
GGSCI>add trandata ggt.test
GGSCI>info trandata ggs.*
GGSCI>info trandata ggs.*
4). GGSCI>Add extract ext1,tranlog,begin now
GGSCI>edit param ext1
参数内容:
extract ext1
Useridggs,password ggs
Rmthost 127.0.0.1mgrport 7809
Rmttrail.\dirdat\r1
Dynamicresolution
Table ggs.test;
保存,退出(注:TABLE一行以分号结尾,否则错误)
然后Add remote list,输入命令
GGSCI>Addrmttrail .\dirdat\r1,extract ext1,megabytes 100
5) Add and edit replicat process param
addrep repkk,exttrail ./dirdat/r1,nodbcheckpoint
然后输入命令Edit param repkk
参数内容为:
Useridggt,password ggt
Assumetargetdefs
DiscardfileC:\gg\dirdatrep1.dsc,append
MAPggs.*, TARGET ggt.*;
保存退出(注:MAP一行的逗号后面必须有空格且以分号结尾,否则错误)
6) 启动进程
Startextract progress:
Startext1
Startreplicat progress
Startrepkk
Checkthe progress running
Infoall
6.测试同步效果
Conn ggs/ggs
Insert into test select 1,’aa’,’pass1’ from dual;
Insert into test select 2,’bb’,’pass2’ from dual;
Commit;
few seconds later:
conn ggt/ggt
select * from test;
64位的GOLDENGATE与ORACLE操作与此类似,但是过程中可能遇到错误,可以输入命令alter reprepkk,extseqno 23,extrba 0或者alter rep repkk,extseqno 0,extrba0解决