环境介绍
项目 | 源环境 | 目标环境 |
操作系统 | OEL6.3 X86_64 | OEL 6.3 X86_64 |
主机名 | qht115 | qht131 |
IP地址 | 172.17.61.115 | 172.17.61.131 |
数据库及版本 | ORACLE 11.2.0.3.0 | ORACLE 11.2.0.3.0 |
数据库字符集 | WE8MSWIN1252 | WE8MSWIN1252 |
ORACLE SID | orcl | orcl |
Goldengate用户 | ogg | ogg |
Goldengate 版本 | 112101 | 112101 |
1.创建ogg用户(此步骤非必须,也可以使用ORACLE用户安装),源和目标库都需要
useradd -g oinstall -G dba ogg
passwd ogg
2.修改oog用户的环境变量,将oracle用户的.bash_profile复制过去就可以了,源和目标库都需要
cat .bash_profile
PATH=$PATH:$HOME/bin
export PATH
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11203
ORACLE_SID=orcl
LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH
3.建立ogg所在的目录 ,源和目标库都需要
mkdir /u01/ogg
chown -R ogg:oinstall /u01/ogg
4.上传ogg安装文件到两台机器,源和目标库都需要
[ogg@qht131 ~]$ unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
[ogg@qht131 ~]$ tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/ogg
5.测试ogg登入,源和目标库都需要
[ogg@qht115 ~]$ cd /u01/ogg
[ogg@qht115 ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter 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:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (qht115) 1>
6.建立ogg的单独表空间,这样便于以后管理,源和目标库都需要
SQL> create tablespace ogg datafile '/u01/oradata/orcl/ogg01.dbf' size 50M autoextend on;
Tablespace created.
7.建立oracle的ogg用户,并赋予所需要的权限,源和目标库都需要
SQL> create user ogg identified by ogg default tablespace ogg;
User created.
SQL> grant CONNECT, RESOURCE to ogg;
Grant succeeded.
SQL> grant SELECT ANY DICTIONARY, SELECT ANY TABLE to ogg;
Grant succeeded.
SQL> grant ALTER ANY TABLE to ogg;
Grant succeeded.
SQL> grant FLASHBACK ANY TABLE to ogg;
Grant succeeded.
SQL> grant EXECUTE on DBMS_FLASHBACK to ogg;
Grant succeeded.
SQL> grant insert any table to ogg;
Grant succeeded.
SQL> grant update any table to ogg;
Grant succeeded.
SQL> grant delete any table to ogg;
Grant succeeded.
SQL>
不同的需求,OGG用户需要的权限也不一样,上面的权限基本可以支持大多数情况的数据复制,如上面的权限不足,需根据实际需求授权。
8.打开数据库的force log以及附加日志,源和目标库都需要
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME OPEN_MODE FOR SUPPLEME
--------- -------------------- --- --------
ORCL READ WRITE NO NO
SQL> alter database force logging;
Database altered.
SQL> alter database add SUPPLEMENTAL log data;
Database altered.
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME OPEN_MODE FOR SUPPLEME
--------- -------------------- --- --------
ORCL READ WRITE YES YES
9.运行ogg所需要的脚本,源和目标库都需要
cd /u01/ogg
sqlplus / as sysdba
@marker_setup.sql
@ddl_setup.sql
@role_setup.sql
@ddl_enable.sql
SQL> grant ggs_ggsuser_role to ogg;
10.创立ogg的管理目录 ,源和目标库都需要
在正式配置OGG之前,首先需要创建OGG的管理目录,源端和目标端都需要创建,登录OGG,只需要执行create subdirs命令就可以了。
[ogg@qht115 ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter 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:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (qht115) 1> create subdirs
Creating subdirectories under current directory /u01/ogg
Parameter files /u01/ogg/dirprm: already exists
Report files /u01/ogg/dirrpt: created
Checkpoint files /u01/ogg/dirchk: created
Process status files /u01/ogg/dirpcs: created
SQL script files /u01/ogg/dirsql: created
Database definitions files /u01/ogg/dirdef: created
Extract data files /u01/ogg/dirdat: created
Temporary files /u01/ogg/dirtmp: created
Stdout files /u01/ogg/dirout: created
各目录用途如下表:
名字 | 用途 |
dirprm | 存放OGG参数各的配置信息 |
dirrpt | 存放进程报告文件 |
dirchk | 存放检查点文件 |
dirpcs | 存放进程状态文件 |
dirsql | 存放SQL脚本文件 |
dirdef | 存放DEFGEN工具生成的数据定义文件 |
dirdat | 存放Trail文件,也就是Capture进程捕获的日志文件 |
dirtmp | 当事物需要的内存超过已分配内存时,默认存储在这个目录 |
11.建立测试表,源和目标库都需要
源表基于all_tables建立表,建立owner+table_name的主键
SQL> create table l5m.ogg_test as select * from all_tables;
Table created.
SQL> alter table l5m.ogg_test add constraint pk_ogg_test primary key(owner,table_name);
Table altered.
SQL> select count(*) from l5m.ogg_test;
COUNT(*)
----------
4267
目标端同样也建立表,不过不需要数据
SQL> create table l5m.ogg_test as select * from all_tables where 1<>2;
Table created.
SQL> alter table l5m.ogg_test add constraint pk_ogg_test primary key(owner,table_name);
Table altered.
12.源端添加表级TRANDATA
GGSCI (qht115) 2> DBLOGIN USERID ogg, PASSWORD ogg --登入
Successfully logged into database.
GGSCI (qht115) 3> add trandata l5m.ogg_test --添加
Logging of supplemental redo data enabled for table L5M.OGG_TEST.
GGSCI (qht115) 4> info trandata l5m.ogg_test --查看
Logging of supplemental redo log data is enabled for table L5M.OGG_TEST.
Columns supplementally logged for table L5M.OGG_TEST: OWNER, TABLE_NAME.
13.配置mgr管理进程,源和目标库都需要
GGSCI (qht115) 1> edit params mgr
-- 添加以下内容
PORT 7809
PURGEOLDEXTRACTS /u01/ogg/dirdat, USECHECKPOINTS
参数说明:
PORT 7809:OGG管理进程监控端口。
PURGEOLDEXTRACTS:清除不需要的trail文件。
/ogg/dirdat:trail文件存放位置。
USECHECKPOINTS:使用检查点队列。
配置完MGR管理进程后,就可以启动MGR管理进程(源端和目标端都需要启动)。
GGSCI (qht115) 2> start mgr
Manager started.
可以通过INFO命令查看进程的状态(最好每次启动时在两端都查看下)。
GGSCI (qht115) 3> info mgr
Manager is running (IP port qht115.7809).
14.初始化两端的数据,让目标端的数据和源端的数据一致
由于在创建测试表的时候,源端的测试表有数据,而目标端的测试表只有结构,没有数据,所以需要初始化目标端的数据,所谓初始化,就是让目标端的数据和源端的数据在这个时间点是一模一样的,所以初始化工作并不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,本文主要介绍如何使用OGG进行数据初始化,下面在源端配置捕获进程EINI_1。
GGSCI (qht115) 4> add extract eini_1,sourceistable
EXTRACT added.
GGSCI (qht115) 5> info extract *, tasks
EXTRACT EINI_1 Initialized 2018-09-17 11:30 Status STOPPED
Checkpoint Lag Not Available
Log Read Checkpoint Not Available
First Record Record 0
Task SOURCEISTABLE
由于只是添加了捕获进程EINI_1,还没有进行配置和启动这个进程,所以现在的状态是STOPPED状态。
源端编辑捕获进程EINI_1
GGSCI (qht115) 6> edit params eini_1
--加入以后内容
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg, PASSWORD ogg
RMTHOST 172.17.61.131, MGRPORT 7809
RMTTASK REPLICAT, GROUP RINI_1
TABLE l5m.ogg_test;
参数介绍:
EXTRACT EINI_1:说明这是EXTRACT进程,名字是EINI_1
SETENV:环境变量,一定要设置和数据库字符集一样,否则可能会乱码
USERID:数据库OGG用户
PASSWORD:数据库用户OGG的密码
RMTHOST:目标端地址,如果在/etc/hosts文件里已经设置解析,可以写主机名
MGRPORT:目标端MGR管理进程监听的端口
RMTTASK REPLICAT:目标端REPLICAT应用进程的组和名字
TABLE:源端要初始化数据的表的名字
编辑好捕获进程EINI_1后,还需要在目标端配置REPLICAT应用进程,名字要和源端的捕获进程EINI_1里面RMTTASK REPLICAT参数配置的一样,也就是还需要在目标端配置RMTTASK REPLICAT RINI_1。14.2目标端配置复制replicate进程
GGSCI (qht131) 4> EDIT PARAMS RINI_1
--加入以内内容
REPLICAT RINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
ASSUMETARGETDEFS
USERID ogg, PASSWORD ogg
DISCARDFILE /u01/ogg/dirrpt/RINIaa.dsc, PURGE
MAP l5m.*, TARGET l5m.*;
参数介绍:
REPLICAT RINI_1:说明这是REPLICAT应用进程,名字叫RINI_1
SETENV:语言变量,同捕获进程EINI_1
ASSUMETARGETDEFS:告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数,详见OGG官方文档。
USERID、PASSWORD:同捕获进程EINI_1参数介绍
DISCARDFILE:错误信息存放位置及命名规则
MAP:源端捕获的表的名字
TARGET:目标端同步的表的名字,可以不在同一SCHEMA。
目标端执行一下add replicate
GGSCI (qht131) 7> add replicat RINI_1,specialrun
REPLICAT added.
GGSCI (qht131) 8> info rini_1 detail
REPLICAT RINI_1 Initialized 2018-09-17 11:02 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:00:06 ago)
Log Read Checkpoint Not Available
Task SPECIALRUN
Extract Source Begin End
Not Available * Initialized * First Record
Current directory /u01/ogg
Report file /u01/ogg/dirrpt/RINI_1.rpt
Parameter file /u01/ogg/dirprm/rini_1.prm
Checkpoint file /u01/ogg/dirchk/RINI_1.cpr
Process file /u01/ogg/dirpcs/RINI_1.pcr
Stdout file /u01/ogg/dirout/RINI_1.out
Error log /u01/ogg/ggserr.log
GGSCI (qht115) 15> START EXTRACT EINI_1
Sending START request to MANAGER ...
EXTRACT EINI_1 starting
启动源端的捕获进程EINI_1后,正常情况下(如果配置没问题),源端的数据已经传送到目标端了,可以通过VIEW命令查看源端捕获进程EINI_1的工作状态。如果有问题可以查看ggserr.log寻找原因。
–在最后部分会看到
GGSCI (qht115) 16> view report eini_1
。。。
Processing table L5M.OGG_TEST
***********************************************************************
* ** Run Time Statistics ** *
***********************************************************************
Report at 2018-09-17 12:03:00 (activity since 2018-09-17 12:02:53)
Output to RINI_1:
From Table L5M.OGG_TEST:
# inserts: 4267
# updates: 0
# deletes: 0
# discards: 0
REDO Log Statistics
Bytes parsed 0
Bytes output 3031082
成功插入了4267条数据,这时目标端和源端已同步了。
目标端进行验证:
SQL> select count(*) from l5m.ogg_test;
COUNT(*)
----------
4267
15.配置ogg检查点,源和目标库都需要
此步骤不是必须的,但是为了让OGG网络中断、服务器宕机、掉电等在突发情况也能正确断点续传,ORACLE建议配置OGG的检查点队列。
注意:GLOBALS不是放在/u01/ogg/dirprm中的,所以必须是edit params ./GLOBALS,而不是edit params GLOBALS。
GGSCI (qht115) 1> EDIT PARAMS ./GLOBALS
--加入以下信息
CHECKPOINTTABLE ogg.ggschkpt
这就告诉OGG检查点存放到OGG用户下的GGSCHKPT表中,但是还需要使用OGG用户登录数据库,创建检查点表,此时需要退出OGG,重新登录,否则可能会遇到下面的错误。
GGSCI (stream) 4> ADD CHECKPOINTTABLE
ERROR: Missing checkpoint table specification.
退出OGG,重新登录,并使用OGG用户登录数据库,源端和目标端都需要执行。
GGSCI (qht115) 2> exit
[ogg@qht115 ogg]$ ggsci
Oracle GoldenGate Command Interpreter 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:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (qht115) 1> dblogin userid ogg,password ogg
Successfully logged into database.
只需要执行ADD CHECKPOINTTABLE命令,OGG会自动在ORACLE的OGG用户下创建检查点,源端和目标端都需要执行。
GGSCI (qht115) 2> ADD CHECKPOINTTABLE
No checkpoint table specified, using GLOBALS specification (ogg.ggschkpt)...
Successfully created checkpoint table ogg.ggschkpt.
此时用OGG登录数据库,就可以看到OGG创建的检查点表。
SQL> select * from tab where tname like 'GGSCHKPT%';
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
GGSCHKPT TABLE
GGSCHKPT_LOX TABLE
16.准备了这么多步骤,最后终于要进行目标端 和源端的同步了
GGSCI (qht115) 1> edit params eora_1
--加入以下内容
EXTRACT EORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg, PASSWORD ogg
EXTTRAIL /u01/ogg/dirdat/aa
TABLE l5m.ogg_test;
EXTTRAIL参数是TRAIL队列文件存放的路径和命名格式,TRAIL文件可以理解为存放捕获进程捕获的日志文件。此时还需要将捕获进程EORA_1添加到OGG。
GGSCI (qht115) 2> ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (qht115) 3> ADD EXTTRAIL /u01/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES 5
EXTTRAIL added.
上面的两个命名告诉OGG,捕获进程从启动起开始捕获,捕获数据保存到TRAIL文件,及TRAIL文件的路径、命名格式,单个TRAIL文件最大大小。
现在就可以启动源端捕获进程EORA_1了。
GGSCI (qht115) 8> START EXTRACT EORA_1
Sending START request to MANAGER ...
EXTRACT EORA_1 starting
使用INFO命令查看EORA_1进程是否是RUNNING状态。
GGSCI (qht115) 9> INFO EXTRACT EORA_1
EXTRACT EORA_1 Last Started 2018-09-17 15:16 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
Log Read Checkpoint Oracle Redo Logs
2018-09-17 15:16:44 Seqno 27, RBA 147215360
SCN 3.1882136165 (14767038053)
GGSCI (qht115) 10> EDIT PARAMS PORA_1
--添加以下内容
EXTRACT PORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
PASSTHRU
RMTHOST 172.17.61.131, MGRPORT 7809
RMTTRAIL /u01/ogg/dirdat/pa
TABLE l5m.ogg_test;
添加PUMP进程PORA_1到OGG,并指定本地的TRAIL文件。
GGSCI (qht115) 11> ADD EXTRACT PORA_1, EXTTRAILSOURCE /u01/ogg/dirdat/aa
EXTRACT added.
为PUMP进程PORA_1指定将本地TRAIL文件传输到目标端后保存成目标端TRAIL文件的名字。
GGSCI (qht115) 12> ADD RMTTRAIL /u01/ogg/dirdat/pa,EXTRACT PORA_1, MEGABYTES 5
RMTTRAIL added.
GGSCI (qht115) 13> INFO EXTRACT PORA_1
EXTRACT PORA_1 Initialized 2018-09-17 15:29 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:01:14 ago)
Log Read Checkpoint File /u01/ogg/dirdat/aa000000
First Record RBA 0
下面就可以启动PUMP进程PORA_1了,启动后看下PORA_1的状态。
GGSCI (qht115) 14> START EXTRACT PORA_1
Sending START request to MANAGER ...
EXTRACT PORA_1 starting
GGSCI (qht115) 15> INFO EXTRACT PORA_1
EXTRACT PORA_1 Last Started 2018-09-17 15:30 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:01:34 ago)
Log Read Checkpoint File /u01/ogg/dirdat/aa000000
First Record RBA 0
此时就可以在源端和目标端看到各自的trail文件
源端:
[ogg@qht115 ogg]$ cd dirdat/
[ogg@qht115 dirdat]$ ls
aa000000
目标端:
[ogg@qht131 ogg]$ cd dirdat/
[ogg@qht131 dirdat]$ ls
pa000000
此步骤告诉复制进程目标文件以及checkpoint所指定的文件,此步骤不可缺少
GGSCI (qht131) 1> ADD REPLICAT RORA_1 exttrail /u01/ogg/dirdat/pa checkpointtable ogg.GGSCHKPT
REPLICAT added.
接着编辑目标端的同步参数文件
GGSCI (qht131) 1> EDIT PARAMS RORA_1
--添加以下内容:
REPLICAT RORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg, PASSWORD ogg
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE /u01/ogg/dirrpt/RORA_aa.DSC, PURGE
MAP l5m.ogg_test, TARGET l5m.ogg_test;
目标端编辑同步进程RORA_1后,就可以启动RORA_1进程。
GGSCI (qht131) 3> START REPLICAT RORA_1
Sending START request to MANAGER ...
REPLICAT RORA_1 starting
--查看进程状态:
GGSCI (qht131) 4> INFO REPLICAT RORA_1
REPLICAT RORA_1 Last Started 2018-09-17 16:05 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:07 ago)
Log Read Checkpoint File /u01/ogg/dirdat/pa000000
First Record RBA 0
17.验证同步复制
配置完后的源端和目标端的各进程如下:
--源端
GGSCI (qht115) 18> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA_1 00:00:00 00:00:01
EXTRACT RUNNING PORA_1 00:00:00 00:00:02
--目标端
GGSCI (qht131) 5> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING RORA_1 00:00:00 00:00:10
源库做些操作:
SQL> select count(*) from ogg_test;
COUNT(*)
----------
4267
SQL> delete from l5m.ogg_test where owner='MAG';
25 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(*) from ogg_test;
COUNT(*)
----------
4242
检验目标库是否同步:
GGSCI (qht131) 6> exit
[ogg@qht131 ogg]$ sqlplus l5m/l5m
SQL*Plus: Release 11.2.0.3.0 Production on Mon Sep 17 16:11:33 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select count(*) from ogg_test;
COUNT(*)
----------
4242
没有问题,目标库也做了相应的删除操作,至此配置完成!