Oracle11g搭建ogg
ドラゴンボールのLong Lv4

Oracle11g搭建ogg(简单的单向复制)

1.环境介绍

主要介绍OGG的安装部署,下面是实验环境介绍。

实验规划

项目 源环境 目标环境
操作系统 Red Hat Linux Server release 6.6 Red Hat Linux Server release 6.6
主机名 ora11g-1 ora11g-2
IP地址 192.168.65.139 192.168.65.140
数据库及版本 ORACLE_11204 ORACLE_11204
数据库字符集 AMERICAN_AMERICA.ZHS16GBK AMERICAN_AMERICA.ZHS16GBK
ORACLE_SID orcl orcl
GoldenGate用户 ogg ogg
GoldenGate版本 112103 112103

2.实验步骤:

创建OGG操作系统用户

两台服务器都需要创建ogg操作系统用户(此步骤非必须,也可以使用Oracle用户安装)。

1
2
useradd -u 1003 -g oinstall -G dba ogg
echo "ogg" | passwd --stdin ogg

修改OGG操作系统用户环境变量

ogg1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#创建OGG安装目录
mkdir /u01/oracle/ogg
chown -R ogg.oinstall /u01/oracle/ogg

#切换至ogg用户
su - ogg

#配置环境变量
vim .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export ORACLE_BASE=/u01/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:/u01/oracle/ogg/
alias sqlplus="rlwrap sqlplus"
alias ggsci="rlwrap ggsci"

#关于rlwrap
需要单独下载安装包
先下载安装包 https://github.com/hanslub42/rlwrap
wget https://github.91chi.fun//https://github.com//hanslub42/rlwrap/releases/download/v0.45.2/rlwrap-0.45.2.zip

解压: unzip rlwrap-0.45.2.zip
cd rlwrap-0.45.2
#安装rlwrap:
./configure
make install
如果make没有,那么需要安装下面的

安装readline包,安装镜像中提供了readline安装包
yum install -y readline*

运行下面的命令使变量生效:

1
source .bash_profile

ogg2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#创建OGG安装目录
mkdir /u01/oracle/ogg
chown -R ogg.oinstall /u01/oracle/ogg

#切换至ogg用户
su - ogg

#配置环境变量
vim .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export ORACLE_BASE=/u01/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:/u01/oracle/ogg/
alias sqlplus="/usr/bin/rlwrap sqlplus"
alias ggsci="/usr/bin/rlwrap ggsci"
alias sqlplus="rlwrap sqlplus"
alias ggsci="rlwrap ggsci"

运行下面的命令使变量生效:

1
source .bash_profile

上传OGG安装介质

将OGG安装文件上传到两台服务器的OGG操作系统用户的/u01/oracle/ogg/

1
2
3
4
5
6
7
8
9
10
11
12
13
cd /u01/oracle/ogg/

scp V34339-01.zip 192.168.65.140:/u01/oracle/ogg/

unzip V34339-01.zipunzip V34339-01.zip
rm -rf O*

chown ogg:oinstall fbo_ggs_Linux_x64_ora11g_64bit.tar

su - ogg

cd /u01/oracle/ogg/
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

将fbo_ggs_Linux_x64_ora11g_64bit.tar解包到/u01/oracle/ogg目录(源和目标端都需要操作)

登录OGG测试

1
2
3
4
5
6
7
8
9
10
11
12
[ogg@ora11g-1 ogg]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug 23 2012 20:20:21

Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.



GGSCI (ora11g-1) 1>

如果LD_LIBRARY_PATH变量设置正确,会像上面演示一样正确进入命令行,如果提示找不到so文件,就需要 查看LD_LIBRARY_PATH变量是否正确设置。

建立OGG表空间(两个库都做)

ORACLE建议使用单独的表空间存放OGG数据,表空间大小50M就可以,但是最好设置数据文件的自动扩展。

1
2
3
4
su - oracle
mkdir -pv /u01/oracle/app/oradata/orcl/ogg
sqlplus / as sysdba
create tablespace tsp_ogg datafile '/u01/oracle/app/oradata/orcl/ogg/ogg01.dbf' size 100M autoextend on;

创建OGG用户并授权(两个库都做)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create user ogg identified by ogg default tablespace tsp_ogg;

#OGG用户需要以下权限,也有人为了省事,直接给OGG用户DBA权限。如果直接给了DBA权限也要执行一下下面

grant connect,resource to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on dbms_flashback to ogg;
grant execute on utl_file to ogg;
grant create table,create sequence to ogg;
grant insert any table to ogg;
grant update any table to ogg;
grant delete any table to ogg;

不同的需求,OGG用户需要的权限也不一样,上面的权限基本可以支持大多数情况的数据复制,如上面的权限不足,需根据实际需求授权。

必须开归档,打开数据库的附加日志和force log

1
2
3
4
select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME OPEN_MODE FOR SUPPLEME
——— ——————– — ——–
ORCL READ WRITE NO NO

上面显示数据库的附加日志和force log都没有开启,使用下面的命令开启。(两个库都执行)

1
2
alter database force logging;
alter database add SUPPLEMENTAL log data;

开启下面的参数要不然运行支持DDL脚本的时候会报错,(两个库都执行)

1
2
3
4
5
6
alter system set enable_goldengate_replication=true scope=both;

select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME OPEN_MODE FOR SUPPLEME
——— ——————– — ——–
ORCL READ WRITE YES YES

运行OGG支持DDL脚本

如果要让OGG支持DDL操作,还需要额外运行几个脚本,这些脚本是OGG带的而不是ORACLE带的,
在OGG的安装目录都可以找到,如果在OGG的安装目录登录数据库,可以直接@加脚本的名字

源端与目标端都需要运行,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
su - ogg
cd /u01/oracle/ogg/
sqlplus / as sysdba
@marker_setup.sql
ogg

@ddl_setup.sql
ogg

@role_setup.sql
ogg

@ddl_enable.sql

如果没有在OGG的安装目录登录数据库,需要指定脚本的位置,比如我的OGG安装目录为/u01/oracle/ogg。

1
2
3
4
5
sqlplus / as sysdba
@/u01/oracle/ogg/marker_setup.sql
@/u01/oracle/ogg/ddl_setup.sql
@/u01/oracle/ogg/role_setup.sql
@/u01/oracle/ogg/ddl_enable.sql

创建OGG的管理目录

在正式配置OGG之前,首先需要创建OGG的管理目录,源端和目标端都需要创建,登录OGG,
只需要执行create subdirs命令就可以了。

源端 和 目标端 都要执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ggsci
----

GGSCI (ora11g-1) 1> create subdirs

Creating subdirectories under current directory /u01/oracle/ogg

Parameter files /u01/oracle/ogg/dirprm: already exists
Report files /u01/oracle/ogg/dirrpt: created
Checkpoint files /u01/oracle/ogg/dirchk: created
Process status files /u01/oracle/ogg/dirpcs: created
SQL script files /u01/oracle/ogg/dirsql: created
Database definitions files /u01/oracle/ogg/dirdef: created
Extract data files /u01/oracle/ogg/dirdat: created
Temporary files /u01/oracle/ogg/dirtmp: created
Stdout files /u01/oracle/ogg/dirout: created

----

ogg管理目录的用途

dirprm 存放ogg各参数的配置信息
dirrpt 存放进程报告文件
dirchk 存放检查点文件
dirpcs 存放进程状态文件
dirsql 存放SQL脚本文件
dirdef 存放DEFGEN工具生成的数据定义文件
dirdat 存放Trail文件,也就是Capture进程捕获的日志文件
dirtmp 当事务需要的内存超过已分配内存时,默认存储在这个目录

OGG复制流程

之前所做的只是准备工作,现在就可以正式配置OGG了,在配置OGG之前,先看下OGG的复制流程

OGG和其他传统复制软件一样
1.通过源端捕获/挖掘ORACLE的日志信息,
2.目标端根据源端传送过来的日志信息进行重塑,实现源端-目标端数据同步。
3.只有commit之后的日志信息才会被Capture进程捕获,未提交的事务OGG不会捕获。

建立测试表

源端:

源端基于SCOTT用户的EMP和DEPT表建立EMP_OGG和DEPT_OGG测试表,包含数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# alter user scott account unlock identified by tiger;
创建测试用户及数据

create user scott identified by tiger;

grant connect,resource to scott;

conn scott/tiger

--创建表
create table emp_ogg (EMPNO number,name varchar2(20));

insert into emp_ogg values(1,'lijiaman');
insert into emp_ogg values(2,'xiaoming');
insert into emp_ogg values(3,'xiaohua');

create table dept_ogg (DEPTNO number,name varchar2(20));

insert into dept_ogg values(1,'lijiaman1');
insert into dept_ogg values(2,'xiaoming1');
insert into dept_ogg values(3,'xiaohua1');

目标端:

目标端基于SCOTT用户的EMP和DEPT表建立EMP_OGG和DEPT_OGG测试表,不包含数据。

1
2
3
4
5
6
7
8
9
10
create user scott identified by tiger;

grant connect,resource to scott;

conn scott/tiger

--创建表
create table emp_ogg (EMPNO number,name varchar2(20));

create table dept_ogg (DEPTNO number,name varchar2(20));

源端和目标端分别在EMP_OGG和DEPT_OGG测试表上建立主键(或唯一键)。
源端和目标端:

1
2
alter table EMP_OGG add constraint PK_EMPNO_OGG primary key (EMPNO);
alter table DEPT_OGG add constraint PK_DEPTNO_OGG primary key (DEPTNO);

端添加表级TRANDATA

添加表级的trandata可以理解为需要将哪些用户的哪些表和目标库同步,其实也是添加表级的supplemental log,但是只有上文打开的minimal supplemental log后,这个才生效。
OGG用户从OGG登录源端数据库。

源端
cd /u01/oracle/ogg 执行ggsci的时候要注意路径要在/u01/oracle/ogg下,要不然会报错

1
2
GGSCI (ora11g-1) 1> DBLOGIN USERID ogg, PASSWORD ogg
Successfully logged into database.

源端添加表级TRANDATA,本案例使用EMP_OGG和DEPT_OGG表。

1
2
3
4
5
GGSCI (ora11g-1) 2> add trandata scott.emp_ogg
Logging of supplemental redo data enabled for table SCOTT.EMP_OGG.

GGSCI (ora11g-1) 3> add trandata scott.dept_ogg
Logging of supplemental redo data enabled for table SCOTT.DEPT_OGG.

成功添加表级TRANDATA后,可以通过INFO命令查看哪些表被添加了TRANDATA.

1
2
3
4
5
6
7
8
9
GGSCI (ora11g-1) 4> INFO TRANDATA scott.*
Logging of supplemental redo log data is enabled for table SCOTT.DEPT_OGG.

Columns supplementally logged for table SCOTT.DEPT_OGG: DEPTNO.

Logging of supplemental redo log data is enabled for table SCOTT.EMP_OGG.

Columns supplementally logged for table SCOTT.EMP_OGG: EMPNO.

配置MGR管理进程

源端:

1
2
3
4
GGSCI (ora11g-1) 5> EDIT PARAMS MGR
#加入以下两行内容
PORT 7809
PURGEOLDEXTRACTS /u01/oracle/ogg/dirdat, USECHECKPOINTS

目标端:

1
2
3
4
GGSCI (ora11g-2) 1> EDIT PARAMS MGR
#加入以下两行内容
PORT 7809
PURGEOLDEXTRACTS /u01/oracle/ogg/dirdat, USECHECKPOINTS

参数说明:
PORT 7809:OGG管理进程监控端口。
PURGEOLDEXTRACTS:清除不需要的trail文件。
/u01/oracle/ogg/dirdat:trail文件存放位置。
USECHECKPOINTS:使用检查点队列。

配置完MGR管理进程后,就可以启动MGR管理进程(源端和目标端都需要启动)。

1
2
GGSCI (ora11g-1) 6> START MGR
Manager started.

可以通过INFO命令查看进程的状态(最好每次启动时在两端都查看下)。

1
2
GGSCI (ora11g-1) 7> INFO MGR
Manager is running (IP port ora11g-1.7809).

配置初始化数据进程

由于在创建测试表的时候,源端的测试表有数据,而目标端的测试表只有结构,没有数据,所以需要初始化目标端的数据,所谓初始化,就是让目标端的数据和源端的数据在这个时间点是一模一样的,所以初始化工作并不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,本文主要介绍如何使用OGG进行数据初始化

下面在源端配置捕获进程EINI_1

1
2
GGSCI (ora11g-1) 9> ADD EXTRACT EINI_1, SOURCEISTABLE
EXTRACT added.

查看EINI_1进程状态

1
2
3
4
5
6
7
GGSCI (ora11g-1) 10> INFO EXTRACT *, TASKS

EXTRACT EINI_1 Initialized 2022-07-11 21:13 Status STOPPED
Checkpoint Lag Not Available
Log Read Checkpoint Not Available
First Record Record 0
Task SOURCEISTABLE

由于只是添加了捕获进程EINI_1,还没有进行配置和启动这个进程,所以现在的状态是STOPPED状态。

源端编辑捕获进程EINI_1

1
2
3
4
5
6
7
8
9
GGSCI (ora11g-1) 10> EDIT PARAMS EINI_1
#加入以下内容
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ogg, PASSWORD ogg
RMTHOST 192.168.65.140, MGRPORT 7809
RMTTASK REPLICAT, GROUP RINI_1
TABLE scott.EMP_OGG;
TABLE scott.DEPT_OGG;

参数介绍:
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。

配置目标端REPLICAT进程

目标端:

1
2
3
4
5
6
7
8
GGSCI (ora11g-2) 5> EDIT PARAMS RINI_1
#加入以下内容
REPLICAT RINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
ASSUMETARGETDEFS
USERID ogg, PASSWORD ogg
DISCARDFILE /u01/oracle/ogg/dirrpt/RINIaa.dsc, PURGE
MAP scott.*, TARGET scott.*;

参数介绍:
REPLICAT RINI_1:说明这是REPLICAT应用进程,名字叫RINI_1
SETENV:语言变量,同捕获进程EINI_1
ASSUMETARGETDEFS:告诉OGG目标端和源端需要同步的表的结构完全一致,不需要OGG去检查表的结构,包括表名、字段名、字段类型、字段长度等,如果目标端和源端同步的表的结构不一样,需要使用SOURCEDEFS参数,详见OGG官方文档。
USERID、PASSWORD:同捕获进程EINI_1
DISCARDFILE:错误信息存放位置及命名规则
MAP:源端捕获的表的名字 TARGET:目标端同步的表的名字,可以不在同一SCHEMA。

初始化数据

在目标服务器执行下面语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GGSCI (ora11g-2) 6> ADD REPLICAT RINI_1,SPECIALRUN
REPLICAT added.

GGSCI (ora11g-2) 7> INFO REPLICAT RINI_1 DETAIL

REPLICAT RINI_1 Initialized 2022-07-11 21:22 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:00:13 ago)
Log Read Checkpoint Not Available
Task SPECIALRUN

Extract Source Begin End

Not Available * Initialized * First Record


Current directory /u01/oracle/ogg

Report file /u01/oracle/ogg/dirrpt/RINI_1.rpt (does not yet exist)
Parameter file /u01/oracle/ogg/dirprm/rini_1.prm
Checkpoint file /u01/oracle/ogg/dirchk/RINI_1.cpr
Process file /u01/oracle/ogg/dirpcs/RINI_1.pcr
Stdout file /u01/oracle/ogg/dirout/RINI_1.out
Error log /u01/oracle/ogg/ggserr.log

配置好目标端的应用进程RINI_1后,就可以启动源端的捕获进程进行捕获数据了。

1
2
3
4
GGSCI (ora11g-1) 1> START EXTRACT EINI_1

Sending START request to MANAGER ...
EXTRACT EINI_1 starting

启动源端的捕获进程EINI_1后,正常情况下(如果配置没问题),源端的数据已经传送到目标端了,可以通过VIEW命令查看源端捕获进程EINI_1的工作状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GGSCI (ora11g-1) 11> VIEW REPORT EINI_1
#在最后部分会看到
Output to RINI_1:
From Table SCOTT.EMP_OGG:
# inserts: 3
# updates: 0
# deletes: 0
# discards: 0
From Table SCOTT.DEPT_OGG:
# inserts: 3
# updates: 0
# deletes: 0
# discards: 0


REDO Log Statistics
Bytes parsed 0
Bytes output 538

如果配置正确,会看到上面的日志,日志会告诉你在目标端SCOTT.EMP_OGG表INSERT了3条记录,SCOTT.DEPT_OGG表INSERT了3条记录。如果在上面日志的最后部分出现ERROR,就需要去检查OGG的安装目录下的ggserr.log日志,这个日志相当于数据库的告警日志。

验证初始化数据

登录目标端数据库,查看初始化是否成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sqlplus / as sysdba
conn scott/tiger

SQL> select * from emp_ogg;

EMPNO NAME
---------- --------------------
1 lijiaman
2 xiaoming
3 xiaohua

SQL> select * from dept_ogg;

DEPTNO NAME
---------- --------------------
1 lijiaman1
2 xiaoming1
3 xiaohua1

可以看到初始化是正确的。初始化之后,上文提到的初始化进程(EINI_1、RINI_1)自动停止,因为通常情况下初始化数据工作只会做一次。可以通过INFO命令查看进程的状态。

源端:

1
2
3
4
5
6
7
GGSCI (ora11g-1) 5> INFO EXTRACT EINI_1

EXTRACT EINI_1 Last Started 2022-07-11 21:38 Status STOPPED
Checkpoint Lag Not Available
Log Read Checkpoint Table SCOTT.DEPT_OGG
2022-07-11 21:38:21 Record 3
Task SOURCEISTABLE

目标端:

1
2
3
4
5
6
GGSCI (ora11g-2) 1> INFO REPLICAT RINI_1

REPLICAT RINI_1 Initialized 2022-07-11 21:22 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:23:20 ago)
Log Read Checkpoint Not Available
Task SPECIALRUN

源端和目标端配置OGG的检查点

此步骤不是必须的,但是为了让OGG网络中断、服务器宕机、掉电等在突发情况也能正确断点续传,ORACLE建议配置OGG的检查点队列。

源端和目标端都需配置。globals一定要是大写

1
2
3
GGSCI> EDIT PARAMS ./GLOBALS
#加入以下信息
CHECKPOINTTABLE ogg.ggschkpt

这就告诉OGG检查点存放到OGG用户下的GGSCHKPT表中,但是还需要使用OGG用户登录数据库,创建检查点表,此时需要退出OGG,重新登录,否则可能会遇到下面的错误:

1
2
3
4
GGSCI (ora11g-1) 7> ADD CHECKPOINTTABLE
ERROR: Not logged into database, use DBLOGIN.
或者
ERROR: Missing checkpoint table specification.

退出OGG,重新登录,并使用OGG用户登录数据库,源端和目标端都需要执行。

1
2
3
4
GGSCI> exit
ggsci
GGSCI> DBLOGIN userid ogg,PASSWORD ogg
Successfully logged into database.

只需要执行ADD CHECKPOINTTABLE命令,OGG会自动在ORACLE的OGG用户下创建检查点,源端和目标端都需要执行。

1
2
3
4
5
GGSCI (ora11g-1) 2> ADD CHECKPOINTTABLE

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

Successfully created checkpoint table ogg.ggschkpt.

此时用OGG登录数据库,就可以看到OGG创建的检查点表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[ogg@ora11g-1 ogg]$ sqlplus ogg/ogg

SQL*Plus: Release 11.2.0.4.0 Production on Mon Jul 11 21:52:31 2022

Copyright (c) 1982, 2013, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
GGSCHKPT TABLE
GGSCHKPT_LOX TABLE

源端配置捕获进程

现在已经可以配置数据同步了,下面在源端配置捕获进程。

1
2
3
4
5
6
7
8
GGSCI (ora11g-1) 10> EDIT PARAMS EORA_1
#加入以下内容
EXTRACT EORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ogg, PASSWORD ogg
EXTTRAIL /u01/oracle/ogg/dirdat/aa
TABLE scott.EMP_OGG;
TABLE scott.DEPT_OGG;

参数介绍:
以上参数基本都在上文提过,这里不在重复,说下EXTTRAIL参数,
EXTTRAIL参数是TRAIL队列文件存放的路径和命名格式,
TRAIL文件可以理解为存放捕获进程捕获的日志文件。此时还需要将捕获进程EORA_1添加到OGG。

1
2
3
4
GGSCI (ora11g-1) 11> ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (ora11g-1) 12> ADD EXTTRAIL /u01/oracle/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES 5
EXTTRAIL added.

上面的两个命令告诉OGG,捕获进程从启动起开始捕获,捕获数据保存到TRAIL文件,及TRAIL文件的路径、命名格式,单个TRAIL文件最大大小。

现在就可以启动源端捕获进程EORA_1了。

1
2
3
GGSCI (ora11g-1) 13> START EXTRACT EORA_1
Sending START request to MANAGER …
EXTRACT EORA_1 starting

使用INFO命令查看EORA_1进程是否是RUNNING状态。

1
2
3
4
5
6
GGSCI (ora11g-1) 14> INFO EXTRACT EORA_1
EXTRACT EORA_1 Last Started 2021-07-01 22:30 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:07 ago)
Log Read Checkpoint Oracle Redo Logs
2021-07-01 22:30:38 Seqno 17, RBA 35049472
SCN 0.246224 (246224)

源端配置PUMP传输进程

此步骤也是非必须的,如果不配置传输进程,OGG会通过EXTRACT进程传输TRAIL队列文件,但是和检查点队列一样,为了保证断点续传ORACLE建议配置PUMP传输进程。

新增抽取进程PORA_1,基于日志方式,立即生效

1
GGSCI> ADD EXTRACT PORA_1,TRANLOG,BEGIN NOW

生成并编辑同名配置文件

1
GGSCI (ora11g-1) 15> EDIT PARAMS PORA_1

加入以下内容

1
2
3
4
5
6
7
8
9
EXTRACT PORA_1
USERID ogg,PASSWORD ogg
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
RMTHOST 192.168.65.140, MGRPORT 7809
RMTTRAIL /u01/oracle/ogg/dirdat/pa
DYNAMICRESOLUTION
GETTRUNCATES
TABLE scott.EMP_OGG;
TABLE scott.DEPT_OGG;

参数说明

1
2
3
4
5
6
7
8
9
EXTRACT PORA_1                       #抽取进程名
USERID ogg,PASSWORD ogg #连接本机DB的帐号密码
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
RMTHOST 192.168.65.140, MGRPORT 7809 #目标数据库服务器地址和GG服务端口号
RMTTRAIL /u01/oracle/ogg/dirdat/pa #远程队列的位置(下一步建的东西)
DYNAMICRESOLUTION #优化参数,动态分析表结构
GETTRUNCATES #抓取truncate数据
TABLE scott.EMP_OGG; #需要抽取的表,可以使用通配符
TABLE scott.DEPT_OGG;

添加PUMP进程PORA_1到OGG,并指定本地的TRAIL文件。

1
2
GGSCI (ora11g-1) 16> ADD EXTRACT PORA_1, EXTTRAILSOURCE /u01/oracle/ogg/dirdat/aa
EXTRACT added.

为PUMP进程PORA_1指定将本地TRAIL文件传输到目标端后保存成目标端TRAIL文件的名字。

1
2
GGSCI (ora11g-1) 18> ADD RMTTRAIL /u01/oracle/ogg/dirdat/pa, EXTRACT PORA_1, MEGABYTES 5
RMTTRAIL added.

下面就可以启动PUMP进程PORA_1了,启动后看下PORA_1的状态。

1
2
3
GGSCI (ora11g-1) 19> START EXTRACT PORA_1
Sending START request to MANAGER …
EXTRACT PORA_1 starting

查看状态

1
2
3
4
5
6
7
GGSCI (ora11g-1) 20> INFO EXTRACT PORA_1

EXTRACT PORA_1 Last Started 2021-07-01 22:34 Status RUNNING
Checkpoint Lag 00:03:22 (updated 00:00:04 ago)
Log Read Checkpoint Oracle Redo Logs
2021-07-01 22:31:38 Seqno 17, RBA 35050000
SCN 0.0 (0)

目标数据库端添加复制应用进程(replicat process)

在目标端GoldenGate命令行中配置复制进程:
–新增复制进程,使用对应的队列pa,即刻开始,使用文件检查点

1
GGSCI (ora11g-2)>  ADD REPLICAT RORA_1 EXTTRAIL /u01/oracle/ogg/dirdat/pa,BEGIN NOW,NODBCHECKPOINT

配置复制进程参数

1
2
3
4
5
6
7
8
9
10
11
12
GGSCI (ora11g-2)>  EDIT PARAMS RORA_1 

REPLICAT RORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ogg, PASSWORD ogg
reperror default,discard
HANDLECOLLISIONS
ASSUMETARGETDEFS
gettruncates
DISCARDFILE /u01/oracle/ogg/dirrpt/RORA_aa.DSC,append,megabytes 100
MAP scott.emp_ogg, TARGET scott.emp_ogg;
MAP scott.dept_ogg, TARGET scott.dept_ogg;

参数说明

1
2
3
4
5
6
7
8
9
10
REPLICAT RORA_1                         #复制进程名
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
USERID ogg, PASSWORD ogg #目标数据库的帐号密码
reperror default,discard #如果复制数据出错则忽略
HANDLECOLLISIONS
ASSUMETARGETDEFS #两台数据库数据结构一致则使用此参数
gettruncates #复制truncate操作
DISCARDFILE /u01/oracle/ogg/dirrpt/RORA_aa.DSC,append,megabytes 100 #错误信息写入XXXX文件,追加模式,最大100m
MAP scott.emp_ogg, TARGET scott.emp_ogg; #映射关系,注意target前必须留一个空格
MAP scott.dept_ogg, TARGET scott.dept_ogg;

开启复制进程:

1
2
3
4
5
6
7
8
9
10
11
12
GGSCI (ora11g-2) 6> START RORA_1

Sending START request to MANAGER ...
REPLICAT RORA_1 starting


GGSCI (ora11g-2) 7> INFO RORA_1

REPLICAT RORA_1 Last Started 2021-07-01 22:45 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
Log Read Checkpoint File /u01/oracle/ogg/dirdat/pa000000
2021-07-01 22:44:44.000000 RBA 1012

至此,一个最简单的同步配置完成,对于源数据库相应表的insert,update,delete和truncate操作都将通过日志捕获并同步到目标数据库。

验证OGG复制

成功配置并启动以上进程后,就可以验证OGG数据同步了,最简单的测试就是修改源库同步的表的数据,测试需要测试DML和DDL

ogg 运维命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
-管理进程命令
INFO MANAGER 返回有关管理器端口和进程id的信息。
START MANAGER 开启管理进程
STATUS MANAGER 返回管理进程状态
STOP MANAGER 停止管理进程

--采集进程命令
ADD EXTRACT 添加一个采集组
ALTER EXTRACT 更改采集组的属性

CLEANUP EXTRACT 删除采集组的运行历史记录

DELETE EXTRACT 删除采集组。

INFO EXTRACT 返回有关采集组的信息。

KILL EXTRACT 强制终止采集组。

LAG EXTRACT 返回有关采集延迟的信息。

REGISTER EXTRACT 向Oracle数据库注册采集组START EXTRACT 启动采集组

STATS EXTRACT 返回处理采集的统计信息。

STATUS EXTRACT 返回采集组的状态

STOP EXTRACT 停止采集组。
FORCEAPPEND 允许data pump在现有的初始加载文件上添加新的跟踪文件
UNREGISTER EXTRACT 从Oracle数据库注销采集组。


--Replicat 进程命令

ADD REPLICAT 添加一个复制组

ALTER REPLICAT 更改复制组的属性。

CLEANUP REPLICAT 删除复制组的运行历史。

DELETE REPLICAT 删除一个复制组。

INFO REPLICAT 返回关于复制组的信息。

KILL REPLICAT 强制终止一个复制组。

LAG REPLICAT 返回关于复制延迟的信息。

REGISTER REPLICAT 向Oracle数据库注册一个复制组。

START REPLICAT 启动一个复制组。

STATS REPLICAT 返回处理一个复制组的统计信息。

STATUS REPLICAT 返回一个复制组的状态。

STOP REPLICAT 停止复制组。

-- ER 命令
INFO ER * 返回有关指定的通配符组的信息。

KILL ER * 强制终止指定的通配符组。

LAG ER * 返回有关指定通配符组的滞后信息

START ER * 启动指定的通配符组。

STATS ER * 返回处理指定通配符的统计信息组。

STATUS ER * 返回指定的通配符组的状态。

STOP ER * 停止指定的通配符组。



--trail 文件相关命令

ADD EXTTRAIL 添加到Oracle GoldenGate配置的本地跟踪。

ADD RMTTRAIL 添加到Oracle GoldenGate配置的远程跟踪。

ALTER EXTTRAIL 更改本地路径的属性。

ALTER RMTTRAIL 更改远程跟踪的属性

DELETE EXTTRAIL 从Oracle GoldenGate配置中移除本地踪迹。

DELETE RMTTRAIL 从Oracle GoldenGate配置中删除远程跟踪。

INFO EXTTRAIL 返回关于本地路径的信息。

INFO RMTTRAIL 返回关于远程跟踪的信息。



--编辑配置相关
EDIT PARAMS 在默认文本编辑器中打开参数文件

SET EDITOR 设置用于编辑参数文件的默认文本编辑器程序。

VIEW PARAMS 在屏幕上以只读模式显示参数文件的内容。

INFO PARAM 返回参数定义信息。


--检查点相关命令

Command Description
ADD CHECKPOINTTABLE 创建一个检查点

CLEANUP CHECKPOINTTABLE 删除不再需要的检查点记录。

DELETE CHECKPOINTTABLE 删除检查点

INFO CHECKPOINTTABLE 返回关于检查点的信息。


--系统命令
INFO ALL 显示系统上所有Oracle GoldenGate进程的状态和延迟。


OBEY 处理包含Oracle GoldenGate命令列表的文件。

SHELL 在GGSCI接口中执行shell命令。

SHOW 显示Oracle GoldenGate环境的属性。

VERSIONS 显示有关操作系统和数据库的信息。

VIEW GGSEVT 显示Oracle GoldenGate错误日志(ggserr.logfile)。

VIEW REPORT 显示由Extract或Replicat生成的进程报告或丢弃文件。
  • 本文标题:Oracle11g搭建ogg
  • 本文作者:ドラゴンボールのLong
  • 创建时间:2022-04-06 20:10:12
  • 本文链接:https://zhongshenglong.xyz/2022/04/06/Oracle11g搭建ogg/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论