OGG基础知识整理
1 GoldenGate介绍
GoldenGate软件是一种基于日志的机构化数据复制软件,能够实现大量交易数据的实时捕捉,变化和投递,实现源数据库与目标数据库的数据同步,保持压秒级的数据延迟。
GoldenGate能够支持多种拓扑结构,包括一对一,一对多,多对一,层叠和双向复制等。
1.1 Oracle GoldenGate主要组件
- Extract
- Data Pump
- Trails
- Collector
- Replicat
- 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支持的方案
-
高可用和容灾解决方案
主要用于消除计划外和计划内的停机时间
. 容灾与应急备份
. 消除计划内停机
. 双业务中心(也称双活) -
实时数据整合解决方案
主要为DSS或OLTP数据库提供实时数据,实现数据集成和整合
. 数据仓库实时供给
. 实时报表
下面是一个典的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:
SQL>GRANT GGS_GGSUSER_ROLE TO ogg;
注:这里的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_LANG=AMERICAN_AMERICA.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