前言:本文主要内容为当初刚开始接触OGG高可用架构时的部署,包含了我看到的一些比较好的文章的引用。目的都是为了让更多同学能更快的掌握相关知识,如果原创作者对此觉得损害了您的权益请留言。
目录:
理论、概念
基础实验
理论、概念,有助理解OGG的理解。学习必备。
感谢原文作者,原文地址:飞机票
理论、概念
一. OGG 概述
OGG 全称Oracle Golden Gate。
历史:
Golden Gate公司于1995年成立于美国加州旧金山,它的名称源自旧金山闻名于世的金门大桥。两位创始人Eric Fish和Todd Davidson最初旨在为Tandem计算机公司设计一个容错系统,由于Golden Gate的健壮性和出色的数据复制功能,银行用它来把ATM网络的交易数据发送到IBM大型机,后来广泛地应用到金融行业及要求数据复制高效、健壮的各个行业。该公司于2009年9月被Oracle公司收购,在此之前Oracle和Golden Gate公司就有了长达超过10年的合作关系。在Oracle收购Golden Gate以后,与Oracle原有的 Data Guard互为补充,共同为企业提供跨平台实时数据同步的解决方案。
Golden Gate 软件分类说明:
(1)Golden Gate:包括GoldenGate Capture, Deliver 和Active Data Guard, XStream on Oracle DB,并支持各种开放数据系统,是我们通常讲的OGG的概念。
(2)Golden Gate Director:实际上,在下载的时候,可以发现没有Director的类目了,替换的是一个Golden Gate Management Pack的包,其实这个就是之前的OGG Director。Management Pack是基于浏览器的管理工具包,有限使用WebLogic SE,所以配置MP,需要先安装weblogic。
(3)Golden Gate Veridata:跨平台比较复制的源库和目标库,为Golden Gate源端和目标端提供数据比对和校验的功能。
另外,也有不太常见的:
(1)Golden Gate for Mainframe:包括GoldenGate Capture, Deliver for HP Non-Stop, IBM DB2 on
Mainframe, plus Syncfile。
(2)Golden Gate Adapters:对Java、Flat File、Siebel等的接口包。
二 、OGG架构
支持的异构平台:
支持的架构形式:
实现的功能:
三、目录结构
目录 说明
BR boundedrecover需要的checkpointfiles
cfg 配置OGG监控所需要的property和XML文件
dirchk Extract或者Replicat进程创建的checkpointfile。cpe和cpr后缀
dirdat trial文件的默认存放位置,2个用户定义的字符+6个数字组成
dirdef 异构数据定义文件,由DEFGEN生成
dirjar OGGmonitor相关的jar包
dirpcs 进程状态文件
dirprm 参数文件
dirrpt 进程报告的存储目录
dirsql Sql脚本
dirtmp 超出分配内存的事务临时存储目录
四、 OGG进程
在Oracle OGG 12c中,有如下组件:
(1)Extract
(2)Data pump
(3)Replicat
(4)Trails 或 extract files
(5)Checkpoints
(6)Manager
(7)Collector
重点理解图:
简单逻辑架构(单向):
源 目标
mgr(管理进程) mgr(管理进程)
extract(抽取进程) Replicat(复制应用进程)
data pump(发送进程)
1. Extract 进程
Extract 进程负责数据抽取工作。
Extract 可以配成如下两种模式:
(1)Initial Load:
在初始化装载过程中,Extract 进程直接从源对象中抽取当前的数据。
(2)Change synchronization:
为了保证源数据和其他对象保持数据的一致,extract 进程会捕获源对象自初始化同步以后的DML 和DDL 的变化。
如果接收到的是rollback,那么Extract 会清除该事务之前的所有记录。
如果接收到的是commit,Extract 会将之前存储的事务信息进行持久化,即将事务信息写入磁盘上的trail 文件,然后按队列传送到目标库。
2.Data Pump 进程
Data pump 进程是OGG 源库上的一个辅助Extract Group。
3. Replicat 进程
Replicate 进程运行在目标系统上,该进程会读取目标端的trail中的文件,并将解析为DML 或者DDL 语句,然后在目标数据库执行。
Replicate可以配置成如下模式:
(1)Initial loads:
(2)Change synchronization
4. Trails 文件
为了支持连续的extraction 和 replication 数据的改变,OGG抓取这些改变的数据临时存放在一个序列化的磁盘文件里, 这个文件就叫trail。
Trail 文件可以放在源端或者目标端的系统里,甚至可以放到临时中转的系统上,这主要取决与GG 的配置,如果存放在local system上,就叫extract trail 或者 local trail,如果存放在remote system上就叫作remote trail。
创建和维护Trail 文件:
默认情况下,trails存放在GG 安装目录的dirdat 子目录下。
默认情况下,每个trails的文件是10M,为了保证进程的正常运行必须不断的创建的新的trail 文件。 这个过程由OGG 自动实现,并且不影响OGG的运行。
每个新生成的文件,文件名都会继承旧trail文件的前2个字母,然后加上6个数字,这样来进行唯一性约束。 数字从000000到999999。当数字到达999999时,又继续从000000开始。之前的trail 文件被覆盖。
补充: (Extract Files)
Extract file 可以是一个文件,或者配置成多个文件。 配置成多个文件可以避免触及操作对单个文件最大大小的限制。
Extract file 和 trail 文件很类似,但是Extract file中不会存储checkpoints的信息。 Extract file 会在运行时自动创建。
5. Checkpoints 机制
Replicate都会checkpoint table 和 checkpoint file中记录事务的位置。我们也可以不使用checkpoint table。
6. Manager 进程
Manager 是Golden Gate的控制进程,Manager 必须在所有的Golden Gate端运行,并且要在Extract 或者 Replicat 进程启动之前运行。 在Extract 或者 Replicat进程运行期间,需要一直保证Manager进程的运行,这样才能管理相关的资源。
Manager 进程有如下功能:
(1)启动Golden Gate 进程
(2)启动其他相关的进程
(3)维护进程的端口
(4)管理trail 进程
(5)创建event,error和threshold 的报告。
7. Collector 进程
target的一个后台进程。
Collector 进程做如下工作:
(1) 将源端Extract 进程的请求发送到Manager进程,扫描并绑定可用的端口,并将端口信息返回给Manager 进程,然后分配给请求的的Extract 进程。
(2) Collector 进程会接收源库Extract 进程发送过来的改变的数据,并将数据写入target 系统的trail 文件中。
若srouce 端pump 进程起不来,collector 会锁trail 文件 。 那么我需要确认是哪个pump进程出现问题,view report pump#,查看后找到collector ,kill -9 杀死。
补充说明:
每个Extract 和 Replicat 进程需要大约25-55M的内存。
==========================================================================
(风景分割线)
再回忆一下架构:
简单逻辑架构(单向):
源 目标
mgr(管理进程) mgr(管理进程)
extract(抽取进程) Replicat(复制应用进程)
data pump(发送进程)
部署实验
============================================================
这里测试开启DDL同步,忽略初始化过程的单向同步。Oracle测试模式为test。
os:oel 6.5
db:11.2.0.4
ogg:11.2.1.0.1
本测试在源端没有使用pump进程。
1、安装GoldenGate
1.1 解压安装文件
源端和目标端都使用oracle用户进行下列操作:
创建ogg目录并安装:
mkdir -p /u01/ogg
tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/ogg
1.2 添加环境变量
在源端和目标端编辑oracle用户环境变量,在文件~/.bash_profile中加入下列行:
export PATH=/u01/ogg:$PATH
export LD_LIBRARY_PATH=/u01/ogg:$LD_LIBRARY_PATH
并使其生效:
source ~/.bash_profile
1.3 使用ggsci创建目录
在源端和目标端都执行:
[oracle@oraclesrc ogg]$ ggsci
GGSCI (oraclesrc) 1> create subdirs
2、配置源端数据库强制归档
查看源端数据库归档情况:
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;
LOG_MODE SUPPLEME FOR
------------ -------- ---
NOARCHIVELOG NO NO
修改归档模式:
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
SQL>alter database force logging;
SQL>alter database add supplemental log data;
3、开启DDL同步
配置DDL同步需要在源端执行以下操作
3.1 创建存放DDL信息的user
SQL> create user ogg identified by ogg default tablespace users temporary tablespace temp;
User created.
SQL> grant connect,resource,dba to ogg;
Grant succeeded.
SQL> grant create table,create sequence to ogg;
Grant succeeded.
SQL> grant execute on utl_file to ogg;
Grant succeeded.
在目标端同样创建一次该用户,用来存放同步相关信息。
3.2 执行脚本
进入OGG目录执行以下脚本:
[oracle@oraclesrc ~]$ cd /u01/ogg
SQL> @marker_setup.sql
Marker setup script
You will be prompted for the name of a schema for the Oracle GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter Oracle GoldenGate schema name:ogg
Marker setup table script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to OGG
MARKER TABLE
-------------------------------
OK
MARKER SEQUENCE
-------------------------------
OK
Script complete.
SQL> @ddl_setup.sql
Oracle GoldenGate DDL Replication setup script
Verifying that current user has privileges to install DDL Replication...
You will be prompted for the name of a schema for the Oracle GoldenGate database objects.
NOTE: For an Oracle 10g source, the system recycle bin must be disabled. For Oracle 11g and later, it can be enabled.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter Oracle GoldenGate schema name:ogg
Working, please wait ...
Spooling to file ddl_setup_spool.txt
Checking for sessions that are holding locks on Oracle Golden Gate metadata tables ...
Check complete.
Using OGG as a Oracle GoldenGate schema name.
Working, please wait ...
DDL replication setup script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to OGG
CLEAR_TRACE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
CREATE_TRACE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
TRACE_PUT_LINE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
INITIAL_SETUP STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDLVERSIONSPECIFIC PACKAGE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDLREPLICATION PACKAGE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDLREPLICATION PACKAGE BODY STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDL IGNORE TABLE
-----------------------------------
OK
DDL IGNORE LOG TABLE
-----------------------------------
OK
DDLAUX PACKAGE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDLAUX PACKAGE BODY STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
SYS.DDLCTXINFO PACKAGE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
SYS.DDLCTXINFO PACKAGE BODY STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDL HISTORY TABLE
-----------------------------------
OK
DDL HISTORY TABLE(1)
-----------------------------------
OK
DDL DUMP TABLES
-----------------------------------
OK
DDL DUMP COLUMNS
-----------------------------------
OK
DDL DUMP LOG GROUPS
-----------------------------------
OK
DDL DUMP PARTITIONS
-----------------------------------
OK
DDL DUMP PRIMARY KEYS
-----------------------------------
OK
DDL SEQUENCE
-----------------------------------
OK
GGS_TEMP_COLS
-----------------------------------
OK
GGS_TEMP_UK
-----------------------------------
OK
DDL TRIGGER CODE STATUS:
Line/pos Error
-------------------- -----------------------------------------------------------------
No errors No errors
DDL TRIGGER INSTALL STATUS
-----------------------------------
OK
DDL TRIGGER RUNNING STATUS
----------------------------------------------------------------------
ENABLED
STAYMETADATA IN TRIGGER
----------------------------------------------------------------------
OFF
DDL TRIGGER SQL TRACING
----------------------------------------------------------------------
0
DDL TRIGGER TRACE LEVEL
----------------------------------------------------------------------
0
LOCATION OF DDL TRACE FILE
------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orasrc/orasrc/trace/ggs_ddl_trace.log
Analyzing installation status...
STATUS OF DDL REPLICATION
------------------------------------------------------------------------------------------------------------------------
SUCCESSFUL installation of DDL Replication software components
Script complete.
SQL> @role_setup.sql
GGS Role setup script
This script will drop and recreate the role GGS_GGSUSER_ROLE
To use a different role name, quit this script and then edit the params.sql script to change the gg_role parameter to the preferred name. (Do not run the script.)
You will be prompted for the name of a schema for the GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.
Enter GoldenGate schema name:ogg
Wrote file role_setup_set.txt
PL/SQL procedure successfully completed.
Role setup script complete
Grant this role to each user assigned to the Extract, GGSCI, and Manager processes, by using the following SQL command:
GRANT GGS_GGSUSER_ROLE TO
where is the user assigned to the GoldenGate processes.
SQL> grant GGS_GGSUSER_ROLE to ogg;
Grant succeeded.
SQL> @ddl_enable.sql;
Trigger altered.
至此DDL同步配置完成。
4、配置OGG进程
4.1 配置Manager进程
在源端和目标端配置Manager进程并启动:
注意当前目录为ogg。
[oracle@oraclesrc 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 (oraclesrc) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
GGSCI (oraclesrc) 2> edit params mgr
输入:
PORT 7809
这里输入了端口号,保存退出。
GGSCI (oraclesrc) 3> start manager
Manager started.
4.2 配置源数据库的extract进程
测试登录数据库:
GGSCI (oraclesrc) 4> dblogin userid ogg@orasrc,password ogg
Successfully logged into database.
配置extract进程
GGSCI (oraclesrc) 5> add extract ext1,tranlog,begin now
EXTRACT added.
GGSCI (oraclesrc) 6> add rmttrail /u01/ogg/dirdat/lt,extract ext1
EXTTRAIL added.
GGSCI (oraclesrc) 7> edit params ext1
加入如下行:
extract ext1
userid ogg@orasrc, password ogg
rmthost 172.26.181.103, mgrport 7809
rmttrail /u01/ogg/dirdat/lt
ddl include mapped objname test.*;
table test.*;
GGSCI (oraclesrc) 8> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT STOPPED EXT1 00:00:00 00:03:26
4.3 配置目标数据库的replicat进程
测试连接:
GGSCI (oracledest) 3> dblogin userid ogg@oradest,password ogg
Successfully logged into database.
GGSCI (oracledest) 4> add checkpointtable ogg.checkpoint
Successfully created checkpoint table ogg.checkpoint.
GGSCI (oracledest) 5> add replicat rep1,exttrail /u01/ogg/dirdat/lt,checkpointtable ogg.checkpoint
REPLICAT added.
GGSCI (oracledest) 6> edit params rep1
添加如下行:
replicat rep1
ASSUMETARGETDEFS
userid ogg@oradest,password ogg
discardfile /u01/ogg/dirdat/rep1_discard.txt,append,megabytes 10
DDL
map test.*,target test.*;
5、启动同步
源数据库:
GGSCI (oraclesrc) 1> start extract ext1
Sending START request to MANAGER ...
EXTRACT EXT1 starting
GGSCI (oraclesrc) 2> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT1 00:16:47 00:00:00
目标数据库:
GGSCI (oracledest) 7> start replicat rep1
Sending START request to MANAGER ...
REPLICAT REP1 starting
GGSCI (oracledest) 8> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP1 00:00:00 00:00:01
6、测试效果
此时源库和目标库test用户数据如下:
SQL> conn test/test
Connected.
SQL> select * from t1;
no rows selected
在源库插入数据并创建新表:
SQL> insert into t1 values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> create table t2 as select * from t1;
Table created.
在目标库查看数据同步情况:
SQL> select * from t1;
C1
----------
1
SQL> select * from t2;
C1
----------
1
DML及DDL同步正常。
7、注意事项
实际部署生产系统时,可能需要在目标端replicat参数中添加以下行,来禁止triggers和constraint deferred:
DBOPTIONS SUPPRESSTRIGGERS(For Oracle10.2.0.5 and later patches to 10.2.0.5, and for Oracle 11.2.0.2 and later 11gR2 versions)
DBOPTIONS DEFERREFCONST(For Oracle9.2.0.7 and later)
在更早的Oracle版本下,就需要手动禁止trigger和constraint deferred了。
另外还需要禁止带有DML的JOB。
最后还需要在源端配置pump进程。
参考原文: 飞机票
==================================================================================
双向同步有点问题(需要调整一个参数)
同步模式:
如果以上搭建,太过基础,不能满足需求。
这里有篇非常详细的博客,送上优秀部署文章飞机票:真飞机