暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用GoldenGate在两台oracle 11g数据库间安装与DML单向同步配置

初七的学习笔记 2021-06-10
678

一、环境介绍

ItemSource SystemTarget System
PlatformCentOS 6.5CentOS 6.5
Hostnamerac1rac2
DatabaseOracle 11.2.0.4Oracle 11.2.0.4
Character SetAL32UTF8AL32UTF8
ORACLE_SIDPRODTEST
Listener Name/PortLISTENER/1521LISTENER/1521
Goldengate Useroggogg
Goldengate Versionogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zipogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
IP192.168.87.130192.168.87.131

二:准备工作,在source和target端都安装好oracle数据库

1.启动监听

2.确定数据库运行在归档模式,开启数据库附加日志,打开force logging,创建用于复制的数据库账号ogg,为了方便,这里直接赋予dba权限,如果对数据库安全要求高,可以去查询ogg文档,赋予复制需要的最小权限!(source和target端做相同的操作)

SQL> archive log list

Database log mode           Archive Mode

Automatic archival             Enabled

Archive destination            /bk

Oldest online log sequence     10

Next log sequence to archive   12

Current log sequence           12


SQL> select supplemental_log_data_min from v$database;


SUPPLEME

--------

NO


SQL> alter database add supplemental log data;

Database altered.


SQL> select supplemental_log_data_min from v$database;


SUPPLEME

--------

YES


SQL> alter database force logging;

Database altered.


SQL> create tablespace tbs_ogg;

Tablespace created.


SQL> create user ogg identified by ogg default tablespace tbs_ogg temporary tablespace temp account unlock;

User created.


SQL> grant connect,resource,dba to ogg;

Grant succeeded


备注: 在oracle中可以通过rowid来定位某条记录,但是目标端的数据库和源端数据库的数据库可能完全不一样,所以无法通过rowid来确定源端数据库的逻辑变化,这时附加日志supplemental log便登上了表演的舞台。数据库在开启附加日志功能后,对于源端的修改操作,oracle会同时追加能够唯一标示记录的列到redo log。这样目标端数据库就可以知道源端发生了哪些具体的变化。


三:安装ogg软件,启动mgr管理进程,source和target端做相同的操作

[root@rac1 ~]$ mkdir ogg

[oracle@rac1 ~]$ cd ogg

[oracle@rac1 ogg]$ unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip  

[oracle@rac1 ogg]$ ./ggsci

GGSCI (rac1) 1> create subdirs

Creating subdirectories under current directory ogg

Parameter files                    /ogg/dirprm: already exists

Report files                          /ogg/dirrpt: created

Checkpoint files                   ogg/dirchk: created

Process status files             ogg/dirpcs: created

SQL script files                    /ogg/dirsql: created

Database definitions files    /ogg/dirdef: created

Extract data files                 ogg/dirdat: created

Temporary files                  /ogg/dirtmp: created

Stdout files                         ogg/dirout: created

GGSCI (rac1) 2> edit params mgr

GGSCI (rac1) 3> view params mgr

PORT 7809

PURGEOLDEXTRACTS ogg/dirdat, USECHECKPOINTS

GGSCI (rac1) 4> start mgr

Manager started.

GGSCI (rac1) 5> info mgr

Manager is running (IP port rac1.7809).


四:准备测试用户和表

SQL> conn as sysdba

Connected.


SQL> create user hr identified by hr account unlock;

User altered.


SQL> grant connect,resource,select_catalog_role to hr;

Grant succeeded.


SQL> conn hr/hr

Connected.


SQL> create table t1 as select * from dba_objects;

Table created.


SQL> alter table t1 add constraint pk_t1 primary key(object_id);

Table altered.


//source端

SQL> select count(*) from t1;


COUNT(*)

----------

86291


//target端,只复制表结构和主键,不填充数据

SQL> select count(*) from t1;


COUNT(*)

----------

0


备注:source端和target端的表必须建立主键,否则会有异常,这里特殊情况下的没有主键的情况暂不做说明


五:初始化加载数据,在异构数据库平台(例如oracle-mysql),这个功能显得非常的有用!而在oracle-oracle的数据复制条件下,oracle推荐使用expdp/impdp工具

1.source端添加extract进程

GGSCI (rac1) 1> add extract einig1,sourceistable  //sourceistable代表直接从表中读取数据

EXTRACT added.


GGSCI (rac1) 2> edit params einig1   einig1代表extract initial load group 1缩写


GGSCI (rac1) 3> view params einig1

extract einig1

setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)

userid ogg,password ogg

rmthost 192.168.87.131,mgrport 7809

rmttask replicat,group rinig1

table hr.t1;


2.target端添加replicat进程

GGSCI (rac2) 1> add replicat rinig1,specialrun    //specialrun代表只运行一次

REPLICAT added.


GGSCI (rac2) 2> edit params rinig1    //rinig1代表replicat initial load group 1缩写


GGSCI (rac2) 3> view params rinig1    //rinig1的名字必须同source端定义的group名字相同

replicat rinig1

setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)

assumetargetdefs

userid ogg,password ogg

discardfile ogg/dirrpt/rinig1.dsc,purge

map hr.*,target hr.*;


3.source端启动extract进程,查看日志输出

GGSCI (rac1) 4> start extract einig1

Sending START request to MANAGER ...

EXTRACT EINIG1 starting


GGSCI (rac1) 5> view report einig1

2017-08-07 11:02:03  INFO    OGG-01017  Wildcard resolution set to IMMEDIATE because SOURCEISTABLE is used.

***********************************************************************

Oracle GoldenGate Capture for Oracle

Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:42:16

......省略不计


4.target端验证

[oracle@rac2 ogg]$ sqlplus hr/hr


SQL> select count(*) from t1;


COUNT(*)

----------

86291


六:配置rac1,rac2间的实时同步复制

1.在source上配置extract进程,进程的名字不能超过8个字符

GGSCI (rac1) 1> edit params eora_t1


GGSCI (rac1) 2> view params eora_t1

extract eora_t1

setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)

userid ogg,password ogg

exttrail ogg/dirdat/aa

table hr.*;


2.开启hr用户下所有表的附加日志

GGSCI (rac1) 3> dblogin userid ogg, password ogg

Successfully logged into database.


GGSCI (rac1) 4> add trandata hr.*


3.添加extract进程,添加trail文件,文件名前缀不能超过2个字符

GGSCI (rac1) 5> add extract eora_t1,tranlog,begin now

EXTRACT added.


GGSCI (rac1) 6> add exttrail ogg/dirdat/aa,extract eora_t1,megabytes 100   添加trail文件

EXTTRAIL added.


GGSCI (rac1) 7> start extract eora_t1

Sending START request to MANAGER ...

EXTRACT EORA_T1 starting


GGSCI (rac1) 8> info extract eora_t1


EXTRACT    EORA_T1   Last Started 2017-08-07 10:05   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:01 ago)

Log Read Checkpoint  Oracle Redo Logs

2017-08-07 15:12:57  Seqno 12, RBA 13398016

SCN 0.1087121 (1087121)


GGSCI (rac1) 9> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

EXTRACT     RUNNING     EORA_T1     00:00:00      00:00:09


4.添加pump进程

GGSCI (rac1) 10> edit params pora_t1


GGSCI (rac1) 11> view params pora_t1

extract pora_t1

setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)

passthru

rmthost 192.168.87.131,mgrport 7809

rmttrail ogg/dirdat/pa

table hr.*;


GGSCI (rac1) 12> add extract pora_t1,exttrailsource ogg/dirdat/aa  //这里aa文件名同前面extract进程参数文件中定义的trail文件名一致

EXTRACT added.


GGSCI (rac1) 13> add rmttrail ogg/dirdat/pa,extract pora_t1,megabytes 100  //添加传输到target数据库的trail问文件名,应该同参数文件中描述的一致

RMTTRAIL added.


GGSCI (rac1) 14> start extract pora_t1

Sending START request to MANAGER ...

EXTRACT PORA_T1 starting


GGSCI (rac1) 15>  info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

EXTRACT     RUNNING     EORA_T1     00:00:00      00:00:04

EXTRACT     RUNNING     PORA_T1     00:00:00      00:00:02


5.在target端添加检查表,配置replicat进程

GGSCI (rac2) 1> edit params ./GLOBALS


GGSCI (rac2) 2> view params ./GLOBALS

checkpointtable ogg.ggschkpt


GGSCI (rac2) 3> exit  //这里需要退出ggsci终端


[oracle@rac2~]$ sqlplus ogg/ogg

SQL> select tname from tab;

no rows selected


[oracle@rac2 ogg]$ ./ggsci

GGSCI (rac2) 1> dblogin userid ogg,password ogg

Successfully logged into database.

GGSCI (rac2) 2> add checkpointtable

No checkpoint table specified, using GLOBALS specification (ogg.ggschkpt)...

Successfully created checkpoint table ogg.ggschkpt.


SQL> select tname from tab;


TNAME

------------------------------

GGSCHKPT

GGSCHKPT_LOX


GGSCI (rac2) 3> edit params rora_t1


GGSCI (rac2) 4> view params rora_t1

replicat rora_t1

setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)

userid ogg,password ogg

handlecollisions

assumetargetdefs

discardfile /ogg/dirrpt/rora_t1.dsc,purge

map hr.* ,target hr.*;


GGSCI (rac2) 5> add replicat rora_t1,exttrail /ogg/dirdat/pa

REPLICAT added.


GGSCI (rac2) 6> start replicat rora_t1

Sending START request to MANAGER ...

REPLICAT RORA_T1 starting


GGSCI (rac2) 7> info replicat rora_t1

REPLICAT   RORA_T1   Last Started 2017-08-08 11:00   Status RUNNING

Checkpoint Lag       00:00:00 (updated 00:00:08 ago)

Log Read Checkpoint  File /ogg/dirdat/pa000000

2017-08-08 14:01:25.195330  RBA 43175818


GGSCI (rac2) 8> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

REPLICAT    RUNNING     RORA_T1     00:00:00      00:00:06


备注:

在target端配置replicat进程之前,通常需要在目标端的数据库中创建一个checkpoint表,这个表是基于ogg checkpoint文件的,它记录了所有ogg可恢复的checkpoint以及sequence,这个操作不是必须的,但oracle强烈建议使用它,因为它可以使得checkpoint包含在replicat的事务中,保证了可以从各类失败场景中恢复!


七:测试同步

1.insert同步测试

source端插入数据

SQL> select max(object_id) from t1;


MAX(OBJECT_ID)

--------------

87406


SQL> insert into t1 (object_id,object_name) values (88888,'ogg_test');

1 row created.


SQL> commit;

Commit complete.


target端验证数据

SQL> select max(object_id) from t1;


MAX(OBJECT_ID)

--------------

88888


2.delete同步测试

source端删除数据

SQL> delete from t1 where object_id > 1000;

85295 rows deleted.


SQL> commit;

Commit complete.


SQL> select max(object_id) from t1;


MAX(OBJECT_ID)

--------------

1000


target端验证数据

SQL> select max(object_id) from t1;


MAX(OBJECT_ID)

--------------

1000


3.同理,update操作也如上操作进行验证,这里就不再进行演示


文章转载自初七的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论