天天看点

OGG基础知识总结OGG基础知识整理

OGG基础知识整理

1 GoldenGate介绍

GoldenGate软件是一种基于日志的机构化数据复制软件,能够实现大量交易数据的实时捕捉,变化和投递,实现源数据库与目标数据库的数据同步,保持压秒级的数据延迟。

GoldenGate能够支持多种拓扑结构,包括一对一,一对多,多对一,层叠和双向复制等。

GoldenGate基本架构图

OGG基础知识总结OGG基础知识整理

1.1 Oracle GoldenGate主要组件

  1. Extract
  2. Data Pump
  3. Trails
  4. Collector
  5. Replicat
  6. Manager

1.2 Oracle GoldenGate数据复制过程

利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增删改操作,将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中,再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。

目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息,把信息缓存到GoldenGate队列文件(trail file)当中,等待目标端的复制进程读取数据。

GoldenGate复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

1.3 Oracle GoldenGate支持的方案

  • 高可用和容灾解决方案

    主要用于消除计划外和计划内的停机时间

    . 容灾与应急备份

    . 消除计划内停机

    . 双业务中心(也称双活)

    OGG基础知识总结OGG基础知识整理
  • 实时数据整合解决方案

    主要为DSS或OLTP数据库提供实时数据,实现数据集成和整合

    . 数据仓库实时供给

    . 实时报表

    OGG基础知识总结OGG基础知识整理
    OGG基础知识总结OGG基础知识整理
    下面是一个典的OGG配置逻辑结构图
    OGG基础知识总结OGG基础知识整理

- Manager

Golden Gate中进程的控制进程,用于管理Extract,DataPump,Replicat等进程,Manager进程必须要现在源端和目标端启动,在整个GoldenGate运行期间,它必须保持运行状态。

1 监控与启动GoldenGate的其他进程

2 管理trail文件及Reporting

在windows系统上,manager进程是作为一个服务来启动的,在Unix系统下是一个进程。

- Extract

Extract运行在数据库源端,负责从源端数据表或者日志中捕获数据。其作用可以按照表来时间来划分:

初始时间装载阶段:在初始数据装载阶段,该进程直接从源端得数据表中抽取数据。
	
	同步变化捕获阶段:初始数据同步完成以后,该进程负责捕获源端数据的变化(DML和DDL)。

Extract进程会捕获所有已配置的需要同步的对象变化,但只会将已提交的事务发送到远程的trail文件用于同步。当事务提交时,所有和该事务相关的日志记录以事务为单元顺序的记录到trail文件中,Extract进程利用其内在的checkpoint机制,周期性的记录其读写的位置,这种机制时为了保证Extract进程终止或宕机,重新启动Extract后,GoldenGate可以恢复到之前的状态,从上一个断点继续往下运行。通过上面的两个机制,就可以保证数据的完整性了。
           

多个Extract进程可以同时对不同对象进行操作。例如,可以在一个extract进程抽取并向目标端发生事务数据的同时,利用另一个extract进程抽取的数据做报表。或者两个extract进程可以利用两个trail文件,同时抽取并并行传输给两个replicat进程以减少数据同步的延时。

在进行初始化转载,或者批量同步数据时,GoldenGate会生成extract文件来存储数据而不是trail文件。默认情况下,只会生成一个extract文件,但如果出于对操作系统单个文件大小限制或者其他因素的考虑,也可以通过配置生成多个extract文件,extract文件不记录检查点。

Extract进程的状态包括:
	Stopped(正常停止),
	Starting(正常启动),
	Running(正在运行),
	Abended(Abnonmal End)的缩写,表示异常结束
           

- Replicat

运行在目标端系统的一个进程,负责读取Extract进程提取到的数据(变更的事务或DDL变化)并应用到目标数据库,就像Extract进程一样,也可以通过配置Replicate进程来完成如下工作:

初始化数据装载:对于初始化数据装载,Replicat 进程应用数据到目标对象或者路由它们到一个高速的 Bulk-load 工具上
	
	数据同步:将 Extract 进程捕获到的提交了的事务应用到目标数据库中
	Replicat进程的状态包括:
	Stopped(正常停止),
	Starting(正常启动),
	Running(正在运行),
	Abended(Abnonmal End)的缩写,表示异常结束
           

- Collector

Collector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里。

动态 collector:由管理进程自动启动的 collector 叫做动态 collector,用户不能与动态 collector 交互

	静态 collector:可以配置成手工运行 collector,这个 collector 就称之为静态 collector
           

- Data Pumps

pump进程运行在数据库源端,其作用是将源端产生的本地trail文件,把trail以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在抽取完数据以后,直接投递到目标端,生成远程trail文件,与pump进程对应的叫Sever Collector进程,这个进程在实际操作过程中,无需我们对其进行任何配置,它运行在目标端,其任务就是把Extract/Pump投递过来的数据重新组装成远程trail文件。

大多数情况下,Oracle都推荐使用pump,原因如下:

1、为目标端或网络问题提供保障 :

	如果只在目标端配置trail文件,由于源端会将extract进程抽取的内容不断的保存在内存中,并及时的发送到目标端。
	当网络或者目标端出现故障时, 由于extract进程无法及时的将数据发送到目标, extract进程将耗尽内存然后异常终止。 
	如果在源端配置了data pump进程,捕获的数据会被转移到硬盘上,预防了异常终止的情况。
	当故障修复,源端和目标端恢复连通性时,data pump进程发送源端的trail文件到目标端。
	
2、 可以支持复杂的数据过滤或者转换: 
	
	当使用数据过滤或者转换时,可以先配置一个data pump进程在目标端或者源端
	进行第一步的转换,利用另一个data pump进程或者Replicat组进行第二部的转换。

3、有效的规划存储资源 :

	当从多个数据源同步到一个数据中心时,采用data pump的方式,可以在源端保存抽取的数据,目标端保存trail文件,从而节约存储空间。
	
4、解决单数据源向多个目标端传输数据的单点故障:

 	当从一个数据源发送数据到多个目标端时,可以为每个目标端分别配置不同的data pump进程。
 	这样如果某个目标端失效或者网络故障时,其他的目标端不会受到影响可以继续同步数据。 
           

- Trails

为了持续地提取与复制数据库变化,GoldenGate 将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就叫做 Trail 文件。

这些文件可以在 source DB 上也可以在target DB 上,也可以在中间系统上,
这依赖于选择哪种配置情况,在数据库源端上的叫做 Local Trail 或者 Extract Trail;在目标端的叫做 Remote Trail。
           

Trail文件存在的目的旨在防止单点故障,将事务信息持久化,并且使用checkpoint记录其读写位置,如果故障发生,则数据可以根据checkpoint记录的位置来重传。

Trail文件默认为10MB,以两个字符加上000000~999999的数字作为文件名。如c:\directory/tr000001.默认情况存储在GoldenGate的dirdat子目录中,可以为不同应用或者对象创建不同的trail文件。同一时刻,只会有一个extract进程处理一个trail文件

- Data Source

当处理事务的变更数据时,Extract 进程可以从数据库(Oracle, DB2, SQL Server, MySQL等)的事务日志中直接获取,或从 GoldenGate VAM中获取。通过 VAM,数据库厂商将提供所需的组件,用于 Extract 进程抽取数据的变更

- Groups

我们可以通过为不同的extract和replicat进程进行分组来去区分不同进程之间的作用。例如,当需要并行的复制不同的数据集时,我们则可以创建两个或者多个复制进程。

进程组中包含进程,进程文件,checkpoint文件和其他与进程相关的文件。对于replicat进程来说,如果配置了checkpoint table,则不同组的都会包含checkpoint table。

2 安装配置过程整理

2.1 创建GoldenGate软件安装目录

在数据库服务器上创建文件系统:/u01/gg,作为GoldenGate的安装目录。

2.1 GoldenGate的管理用户

安装GoldenGate软件和维护GoldenGate软件时,可以使用系统上的oracle用户。GoldenGate安装目录的所有者必须是GoldenGate管理用户,本次实施过程中使用oracle用户作为GoldenGate管理用户,添加oracle用户的环境变量(在生产端和容灾端均要进行以下操作):

export GG_HOME=/u01/gg
export LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib:/usr/bin:/lib
export PATH=$GG_HOME:$PATH
           

2.3安装GoldenGate软件

切换到oracle用户,将GG软件的压缩包存放到GoldenGate安装目录下,即/u01/gg,将这个压缩包进行解压到GoldenGate安装目录下(在生产端和容灾端均要进行以下操作):

tar  -zxvf  *.gz
           

进入到GoldenGate安装目录,运行GGSCI命令以进入GG界面(在生产端和容灾端均要进行以下操作)

cd  /u01/gg
./ggsci
           

在GGSCI界面下创建子目录(在生产端和容灾端均要进行以下操作):

GGSCI>create  subdirs
           

至此,GoldenGate软件安装完毕。

2.4设置数据库归档模式

archive log list;
--若是非归档模式,需要改成归档模式,操作如下
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

           

2.5打开数据库的附加日志

打开附加日志并切换日志(保证Online redo log和Archive log一致)

alter database add supplemental log data;
alter database add supplemental log data(primay key,unique,foreign key) columns;
alter system switch logfile;
           

2.6开启数据库强制日志模式

alter database force logging;
           

2.7创建GoldenGate管理用户

在生产端和容灾端均要进行以下操作

--create tablespace
SQL>create tablespace  ogg  datafile '$ORACLE_BASE/oradata/test/ogg01.dbf' size 300M ;
-- create the user
SQL>create user ogg identified by ogg default tablespace ogg;
-- grant role privileges
SQL>grant  resource, connect, dba to ogg;
           

2.8编辑GLOBALS参数文件

切换到GoldenGate安装目录下,执行命令:

cd /u01/gg
./ggsci
GGSCI>EDIT PARAMS ./GLOBALS
           

在文件中添加以下内容:

GGSCHEMA ogg  --指定的进行DDL复制的数据库用户
           

利用默认的密钥,生成密文:

GGSCI>encrypt password ogg encryptkey default
Encrypted password:  AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB
           

记录这个密文,将在以下进程参数的配置中使用。

2.9管理进程MGR参数配置

PORT 7839
DYNAMICPORTLIST 7840-7860
--AUTOSTART ER *
--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKY default
PURGEDDLHISTORY MINKEEPDAYS 11,MAXKEEPDAYS 14
PURGEMARKERHISTORY MINKEEPDAYS 11, MAXKEEPDAYS 14
           

2.10抽取进程EXTN参数配置

EXTRACT extn
setenv (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
REPORTCOUNT EVERY 1 MINUTES, RATE
DISCARDFILE ./dirrpt/discard_extn.dsc,APPEND,MEGABYTES 1024
 
DBOPTIONS  ALLOWUNUSEDCOLUMN
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/na
 
TRANLOGOPTIONS EXCLUDEUSER OGG
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
FETCHOPTIONS NOUSESNAPSHOT
TRANLOGOPTIONS CONVERTUCS2CLOBS
TRANLOGOPTIONS altarchivelogdest primary instance test /oradata/arch
--TRANLOGOPTIONS RAWDEVICEOFFSET 0
DYNAMICRESOLUTION
 
DDL INCLUDE ALL
DDLOPTIONS addtrandata, NOCROSSRENAME,  REPORT
 
table QQQ.*;
table CUI.*;
           

2.11 传输进程DPEN参数配置

EXTRACT dpen
RMTHOST 192.168.4.171 , MGRPORT 7839, compress
PASSTHRU
numfiles 50000
RMTTRAIL ./dirdat/na
TABLE QQQ.*;
TABLE CUI.*;
           

2.12建立OGG的DDL对象

$ cd /u01/gg 
$ sqlplus "/ as sysdba"
 
SQL> @marker_setup.sql
Enter GoldenGate schema name:ogg
alter system set recyclebin=off;
SQL> @ddl_setup.sql
Enter GoldenGate schema name: ogg
 
SQL> @role_setup.sql
 
Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:
 
SQL>GRANT GGS_GGSUSER_ROLE TO
 
where is the user assigned to the GoldenGate processes.
           

注意这里的提示:需要手工将这个GGS_GGSUSER_ROLE指定给extract所使用的数据库用户(即参数文件里面通过userid指定的用户),可以到sqlplus下执行类似的sql:

注:这里的ogg是extract使用的用户。如果你有多个extract,使用不同的数据库用户,则需要重述以上过程全部赋予GGS_GGSUSER_ROLE权限。

运行以下脚本,使触发器生效:

SQL> @ ddl_enable.sql
           

注:在生产端开启抽取前,先禁用DDL捕获触发器,调用ddl_disable.sql。

2.13 数据初始化

在初始化过程中,源数据库不需要停机,初始化过程分为三个部分:

生产端开启抽取进程;

生产端导出数据;

容灾端导入数据;

在生产端添加抽取进程、传输进程以及相应的队列文件,执行命令如下:

//创建进程 EXTN
GGSCI>add extract extn,tranlog,begin now
GGSCI>add exttrail ./dirdat/na,extract extn,megabytes 500
 
//创建进程 DPEN
GGSCI>add extract dpen,exttrailsource ./dirdat/na
GGSCI>add rmttrail ./dirdat/na,extract dpen,megabytes 500
在生产端启动管理进程:
GGSCI> start mgr
           

启用DDL 捕获trigger:

$ cd /u01/gg
$ sqlplus “/as sysdba”
SQL> @ddl_enable.sql
           

在生产端启动抽取进程:

GGSCI> start EXTN
           

在数据库中,获取当前的SCN号,并且记录这个SCN号:

SQL>select to_char(dbms_flashback.get_system_change_number) from dual;
 
603809
           

在数据库中,创建数据泵所需目录并赋予权限:

SQL>CREATE OR REPLACE DIRECTORY DATA_PUMP AS '/u01';
SQL>grant read ,write on DIRECTORY DATA_PUMP  to ogg;
           

在生产端利用数据泵导出数据:

expdp ogg/ogg schemas='QQQ' directory=DATA_PUMP dumpfile=QQQ_bak_%U flashback_scn=123456789 logfile=expdp_QQQ.log filesize=4096m
 
expdp ogg/ogg schemas='CUI' directory=DATA_PUMP dumpfile=CUI_bak_%U flashback_scn=123456789 logfile=expdp_ CUI.log filesize=4096m
 
expdp ogg/ogg schemas='test1' directory=DATA_PUMP dumpfile=test1_bak_%U flashback_scn=603809 logfile=expdp_QQQ.log filesize=4096m
           

把导出的文件传输到容灾端,利用数据泵将数据导入:

Impdp ogg/ogg  DIRECTORY=DATA_PUMP DUMPFILE=QQQ_bak_%U logfile=impdp_QQQ.log
 
Impdp ogg/ogg  DIRECTORY=DATA_PUMP DUMPFILE=CUI_bak_%U logfile=impdp_CUI.log
           

2.14 容灾端管理进程MGR参数配置

PORT 7839
DYNAMICPORTLIST 7840-7860
--AUTOSTART ER *
--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
           

2.15编辑GLOBALS参数文件

切换到GoldenGate安装目录下,执行命令:

cd /u01/gg
./ggsci
ggsci>EDIT PARAMS ./GLOBALS
           

在文件中添加以下内容:

GGSCHEMA ogg  --指定的进行DDL复制的数据库用户
           

2.16 容灾端复制进程REPN参数配置

REPLICAT repn
setenv (NLS_token punctuation">.WE8MSWIN1252)
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
assumetargetdefs
DISCARDFILE ./dirrpt/repna.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 02:30
ALLOWNOOPUPDATES
REPERROR (1403, discard)
 
DDL INCLUDE MAPPED 
DDLOPTIONS REPORT
 
MAPEXCLUDE QQQ.T0417
 
MAP QQQ.*, TARGET QQQ.*;
MAP CUI.*, TARGET CUI.*;
           

2.17创建复制进程repn

执行以下命令创建复制进程repn:

GGSCI>add replicat repn, exttrail ./dirdat/na, nodbcheckpoint
           

2.18启动生产端传输进程和容灾端复制进程

GGSCI>start dpen
GGSCI>start  REPLICAT repn aftercsn  123456789
           

2.19测试场景

(1)在生产端数据库上,创建一张表。

(2)在生产端数据库上,修改这个张表的数据。

(3)在生产端数据库上,删除这张表。

3GoldenGate基本运维命令

3.1查看进程状态

GGSCI>info all
           

–查看GG整体运行情况,比如进程Lag延时,检查点延时。

GGSCI>info <进程名>
           

–查看某个进程的运行状况,比如抽取进程正在读取哪个归档日志或者联机重做日志,传输进程正在传送哪一个队列文件,复制进程正在使用哪一个队列文件。

GGSCI>info <进程名> showch
           

——查看某个进程运行的详细信息。

3.2查看进程报告

GGSCI>view report <进程名> 
           

——报错时,从进程报告里获取错误信息。

3.3在操作系统上,查看GoldenGate安装目录的使用率

$ df -h
           

——查看ogg目录是否撑满。

4常见故障排除

(1)OGG-00446

OGG-00446 Could not find archived log for sequence 53586 thread 1 under alternative destinations. SQL . Last alternative log tried /arch_cx/1_53586_776148274.arc., error retri eving redo file name for sequence 53586, archived = 1, use_alternate = 0Not able to establish initial position for sequence 53586, rba 44286992.

处理办法: 将缺失的归档日志从备份中恢复出来。如果依旧找不到所需归档日志,那么只能重新实施数据初始化

(2)OGG-01154

OGG-01154 Oracle GoldenGate Delivery for Oracle, repn.prm: SQL error 1691 mapping DATA_USER.DMH_WJXXB to DATA_USER.DMH_WJXXB OCI Error ORA-01691: unable to extend lob segment DATA_USER.SYS_LOB0000083691C00014$$ by 16384 in tablespace DATA_USER_LOB_U128M_1 (status = 1691), SQL

处理办法: 数据库中该表空间已满,需要对该表空间进行扩容

(3)OGG-00664

OGG-00664 OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener).

处理方法: 启动数据库的监听器

(4)OGG-00665

OGG-00665 OCI Error describe for query (status = 3135-ORA-03135: connection lost contact Process ID: 8859 Session ID: 131 Serial number: 31), SQL.

处理方法:

在没有关闭OGG进程的情况下,提前关闭了数据库,导致OGG进程出现异常。如果是发现了这个错误提示,应该马上关闭OGG进程,注意数据库的归档日志情况,保证归档日志不会缺失,然后等待数据库启动成功后,马上启动OGG进程。

(5)OGG-01161

OGG-01161 Bad column index (4) specified for table QQQ.TIANSHI, max columns = 4.

处理方法:

对照一下生产端与容灾端的这一张表的表结构,如果容灾端的表缺少一列,则在容灾端,登陆数据库,增加这一列,然后启动复制进程。

(6) OGG-00199

OGG-00199 Table QQQ.T0417 does not exist in target database.

处理方法:

查看源端抽取进程的参数,DDL复制参数是否配置,针对这张表,重新实施数据初始化。

原文链接:https://mp.weixin.qq.com/s/Mt2deYdyhR4v2EcnkZ1rFA