概述
参考链接: 在Windows中 基于Oracle GoldenGate (OGG)进行Oracle->Oracle数据库同步配置(超详细)
一 前言
GoldenGate 和 DataGuard 的对比
GoldenGate基本概念
Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。
Oracle Golden Gate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。
ogg 使用模块化的进程结构,能够灵活的抽取和复制跨越多种拓扑结构(异构平台) 的表数据,DML 和 DDL 操作。 因为 ogg 的灵活性,支持数据的过滤,转化以及自定义处理特性,可以支持许多的业务需求:
- 业务连续性和高可用性,常用于容灾复制
- 初始化加载和数据库迁移,如不停机的在线数据迁移
- 数据整合分发,如地市数据到总部的汇总
- 决策支持和数据仓库
ogg 常见的架构有一对一,一对多,多对一,以及级联,还有双向的结构。ogg 最大的特点之一就是能够提供不停机的数据同步复制,并且支持跨数据库(版本,平台)。
GoldenGate 基本架构
组件 | 解释 |
---|---|
Extract | GoldenGate 软件的抽取进程,又叫 Capture 进程,一 般用于抽取数据库日志抓取数据变化或将本地队列中数据 传递到目标端。Extract的作用可以分为两个阶段:①初始数据装载阶段:在初始数据装载阶段,extract进程直接从源端的数据表中抽取数据。②同步变化捕获阶段:初始化数据完成以后,extract进程负责捕获源端数据的变化(DML和DDL) |
Replicat | GoldenGate 软件的投递进程,又称为 Delivery 进程, 用于将队列文件中的数据变化转换为 sql 应用到目标库 |
Data Pump | 专指将本地队列中数据传递到目标端的 Extract 进程, 区别于读取日志的主 Extract 进程。pump进程运行在数据库源端,其作用是将源端产生的本地trail文件以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。Pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在抽取完数据以后,直接投递到目标端生成远程trail文件。 |
Trail | GoldenGate 的队列文件,存储增删改等数据变化,以 其专有格式存放 |
Manager | manger进程是goldengate的控制进程,分别运行在源端和目标端上,它主要的作用是启动、监控、重启goldengate的其他进程,报告错误及事件,分配数据存储空间,发布阀值报告等。需要注意的是在源端和目标端有且只有一个manger 进程。 |
Collector | collector进程与pump进程对应,它运行在目标端,这个进程可以不必太关注,因为在实际操作过程中,无需我们对其配置,所以对我们来说它是透明的。Collector运行在目标端其任务就是把extract/pump投递过来的数据重新组装成运程trail文件 |
二 进入本次的应用场景介绍
因内外网的特殊性,无法直接通过网络传输推送数据
外网无法访问内网,内网可以通过外网开放的一个端口访问外网
解决方案:
通过sftp服务把Trail文件所在的目录设置为共享空间,内网通过sftp服务绑定网络映射器,达到可以实时读取外网生成的Trail文件,及时进行数据同步
运行环境
不同的版本GoldenGate所需的环境和操作会有所不同,建议先按本文的运行环境进行操作。具体的 运行环境要求,
详见官方说明:Oracle Fusion Middleware Supported System Configurations
三 数据库设置
安装Oracle
链接: windows环境安装Oracle
启用OGG
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE;
开启归档日志
注意:归档日志占用空间比较大,可设置定时任务进行清理。
- 查看归档模式是否已开启。
select log_mode from v$database;
2. mount 状态下开启归档模式。
-- 查看自动归档状态和归档进程
archive log list;
-- 关闭数据库
shutdown immediate;
-- 启动到mount状态
startup mount;
-- 开启归档模式
alter database archivelog;
-- 开启数据库
alter database open;
- 再次查看归档模式是否已开启。
开启强制日志
- 查看 force logging 是否已开启。
select force_logging from v$database;
2. 开启 force logging 。
alter database force logging;
开启最小附加日志
- 查看 supplemental log 是否已开启。
select supplemental_log_data_min from v$database;
2. 开启 supplemental log 。
alter database add supplemental log data;
- 切换日志,使设置生效。
alter system switch logfile;
关闭回收站
- 查看回收站是否启用。
show parameter recyclebin
2. 关闭回收站。
alter system set recyclebin=off;
创建用户
注意: Oracle 12C引入了CDB与PDB的新特性 这里使用的是PDB模式
在PDB中建立用户,用户名不用加C##开头,建立的是本地用户。
在CDB中新建用户,用户名需要加C##开头,建立的是公共用户(Common User)
cmd
sqlplus /nolog
conn / as sysdba
-- 查看当前连接数据库: 返回cdb或者pdb名称
show con_name;
-- 创建用户
create user c##ggs identified by 123456 default tablespace users temporary tablespace temp;
GRANT CREATE SESSION,CONNECT,RESOURCE,DBA TO c##GGS;
-- 修改任何表的权限
GRANT ALTER ANY TABLE TO c##GGS;
-- 修改系统参数的权限
GRANT ALTER SYSTEM TO c##GGS;
-- 查询任何字典表、任何事务的权限
GRANT SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO c##GGS;
-- 授予“采集模式”相关的权限,CAPTURE-采集模式,APPLY-复制模式,*-两者
EXECUTE DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggs','APPLY');
# 切换模式
alter session set container=ORCLPDB;
# 开启
alter pluggable database open;
-- 切换会话到指定数据库
alter session set container=cdb$root; --切换会话到CDB
alter session set container=ORCLPDB; --切换会话到PDB
-- 创建用户
create user ggs identified by 123456 default tablespace users temporary tablespace temp;
GRANT CREATE SESSION,CONNECT,RESOURCE,DBA TO GGS;
-- 修改任何表的权限
GRANT ALTER ANY TABLE TO GGS;
-- 修改系统参数的权限
GRANT ALTER SYSTEM TO GGS;
-- 查询任何字典表、任何事务的权限
GRANT SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO GGS;
-- 授予“采集模式”相关的权限,CAPTURE-采集模式,APPLY-复制模式,*-两者
EXECUTE DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggs','APPLY');
从数据库配置
sqlplus /nolog
conn / as sysdba
-- 启用OGG
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE;
-- 关闭数据库
shutdown immediate;
-- 启动到mount状态
startup mount;
-- 开启归档模式
alter database archivelog;
-- 开启数据库
alter database open;
创建用户
create user c##ggs identified by 123456 default tablespace users temporary tablespace temp;
GRANT CREATE SESSION,CONNECT,RESOURCE,DBA TO c##GGS;
-- 修改任何表的权限
GRANT ALTER ANY TABLE TO c##GGS;
-- 修改系统参数的权限
GRANT ALTER SYSTEM TO c##GGS;
-- 查询任何字典表、任何事务的权限
GRANT SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO c##GGS;
-- 授予“采集模式”相关的权限,CAPTURE-采集模式,APPLY-复制模式,*-两者
EXECUTE DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggs','APPLY');
# 切换模式
alter session set container=ORCLPDB;
# 开启
alter pluggable database open;
-- 切换会话到指定数据库
alter session set container=cdb$root; --切换会话到CDB
alter session set container=ORCLPDB; --切换会话到PDB
-- 创建用户
create user ggs identified by 123456 default tablespace users temporary tablespace temp;
GRANT CREATE SESSION,CONNECT,RESOURCE,DBA TO GGS;
-- 修改任何表的权限
GRANT ALTER ANY TABLE TO GGS;
-- 修改系统参数的权限
GRANT ALTER SYSTEM TO GGS;
-- 查询任何字典表、任何事务的权限
GRANT SELECT ANY DICTIONARY,SELECT ANY TRANSACTION TO GGS;
-- 授予“采集模式”相关的权限,CAPTURE-采集模式,APPLY-复制模式,*-两者
EXECUTE DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggs','APPLY');
四 Sftp服务搭建
链接: 实测总结 挂载远程文件夹方案 smb ftp sftp nfs webdav
外网服务器安装freeSSHd.exe
链接: windows 上搭建 sftp 服务器 --freesshd
注意:
密码正确还连接不上 没有用管理员运行
请到进程中杀掉 FreeSSHDService.exe,然后到安装目录下 使用管理员权限运行 FreeSSHDService
端口不要使用默认的22,改为10022
创建用户
配置SSH
sftp中选择服务端默认路径
Authentication 设置
Password authentication 一栏 要选择 Required ,否则客户端连接时输入密码总是错误
server status 中 run ssh servers
链接: Windows 下使用 SSHFS 通过 SSH 协议挂载远程服务器目录
方式一:winfsp + sshfs-win (推荐)
sshfs-win:https://github.com/billziss-gh/sshfs-win/releases
winfsp:https://github.com/billziss-gh/winfsp/releases
SSHFS-Win Manager:https://github.com/evsar3/sshfs-win-manager/releases (GUI,可选)
依次安装即可
方式二: win-sshfs + Dokan(旧,不推荐)
五 GoldenGate安装
主从服务器都要安装。
安装 Visual C++
-
可从Microsoft 官网下载Visual C++可再发行组件包。这里需要安装2010和2013两个版本。
-
下载后,双击运行安装即可。
安装GoldenGate
- 可从Oracle 中国下载12版本的GoldenGate。
- 将安装包复制到服务器上,解压后以管理员身份运行 setup.exe 。
- 根据数据库版本选择对应的GoldenGate版本,这里选择的是11g的版本。
4. 指定安装路径、数据库主目录和端口。如果是使用客户端远程连接数据库,这里就不用勾选
设置GoldenGate
主服务器设置
创建目录
ogg安装目录下,以管理员身份运行 ggsci.exe ,执行 CREATE SUBDIRS 命令创建Oracle
GoldenGate工作目录。
目录说明如下:
dirchk:存放检查点(Checkpoint)文件
dirdat:存放Trail与Extract文件,以后详述
dirdef:通过DEFGEN工具生成的源或目标的数据定义文件
dirpcs:存放进程状态文件
dirprm:存放参数文件
dirrpt:存放进程报告文件
dirsql:存放SQL脚本文件
dirtmp:当事务所需要的内存超过已分配内存时,缺省存储于此。
将Manager 安装为系统服务
- 以管理员身份运行 ggsci.exe 。
- 执行以下命令,创建 GLOBALS 文件。
EDIT PARAMS ./GLOBALS
- 在 GLOBALS 文件中添加以下内容。 GGMGR 是自定义的服务名称。
MGRSERVNAME GGMGR
- 保存退出后,在GoldenGate根目录下使用 install 命令安装服务。
INSTALL ADDSERVICE
设置跟踪的表
- 在GGSCI中登录GoldenGate管理用户。
dblogin userid ggs,password 123456
客户端远程连接可以使用:
dblogin userid ggs@xxxx.xxx.x.xx:1521/orclgbk,password 123456
- 设置要跟踪的表。(可以指定具体的对象,也可以使用通配符,如*)
add trandata xxx.*
配置Manager管理进程
- 使用 edit params mgr 命令,在弹出的文本中添加以下内容:
port 7500
dynamicportlist 7501-7505
autorestart extract *,waitminutes 2,retries 5
- 输入 start mgr ,启动mgr进程。
配置Extract抽取进程
- 使用 edit params eora 命令,在弹出的文本中添加以下内容:
exttrail : 自定义的抽取文件存放路径。最后一个目录一定要是两个字符,表示的是文件名的前
两位。
远程连接数据库,可以使用 userid ggs@xxxx.xx.xx.xx:1521/orclgbk,password 123456
edit params eora
extract eora
userid c##ggs,password 123456
exttrail C:oggdirdatet
SOURCECATALOG orclpdb
table ggs.demo;
注意:SOURCECATALOG orclpdb 是pdb模式添加的额外配置
- 输入以下命令,启动eora进程。
-- 1.从当前时间开始抽取
add extract eora,tranlog,begin now
-- 2.最后一个目录一定要是两个字符。要不然会提示“file portion must be twocharacters.”
add exttrail C:appAdministratorproductogg123dirdatet,extract eora
-- 3.启动eora进程
start eora
配置Data Pump推送进程 (因为不能网络传输,此步在内外网交互不做了)
数据泵用于读取本地路径并通过网络将数据发送到远程路径。数据泵为可选配置,但推荐使用。
- 在源系统的 GGSCI 中,使用 edit params pump_so 命令,创建 data-pump 的参数文件,内容
如下:
extract pump_so
userid ggs,password 123456
rmthost xx.x.xx.xxx, mgrport 7500
// 生成trail数据的目录
rmttrail C:appAdministratorproductogg123dirdatrt
Table xxx.*;
其中:pump_so是数据泵进程的名称。
- 配置推送目录。
-- exttrailsource为主服务器的目录
add extract pump_so,exttrailsource C:appAdministratorproductogg123dirdatet
-- rmttrail的地址为从服务器的目录
add rmttrail C:appAdministratorproductogg123dirdatrt,extract pump_so
3. 等从服务器配置好,再启动 pump_so 进程。
start pump_so
- 可使用 info all 命令查看进程的运行情况。
从服务器设置
通过sftp 绑定好主服务器的远程目录磁盘 为 Z: 盘
执行主服务器相同的命令 这里就简单写出来了
以管理员身份运行 ggsci.exe 。
1.创建Oracle GoldenGate工作目录
CREATE SUBDIRS
2.创建 GLOBALS 文件
EDIT PARAMS ./GLOBALS
3. 在 GLOBALS 文件中添加以下内容。 GGMGR 是自定义的服务名称。
MGRSERVNAME GGMGR
//添加Checkpoint Table
checkpointtable ggs.checkpoint
ALLOWOUTPUTDIR Z:dirdat
4. 保存退出后,在GoldenGate根目录下使用 install 命令安装服务。
INSTALL ADDSERVICE
设置跟踪的表
在GGSCI中登录GoldenGate管理用户,然后设置要跟踪的表。
dblogin userid ggs@xxx.xx.xx.xxx:1521/orclpdb,password 123456
1.设置要跟踪的表
add trandata ggs.demo
add checkpointtable ggs.checkpoint
配置Manager管理进程
edit params mgr
- 使用 edit params mgr 命令,在弹出的文本中添加以下内容:
port 7500
dynamicportlist 7501-7505
autostart er *
autorestart extract *,waitminutes 2,retries 5
lagreporthours 1
laginfominutes 3
lagcriticalminutes 5
purgeoldextracts Z:dirdatet,usecheckpoints,minkeepdays 3
启动mgr进程
start mgr
配置Replicat进程
edit params repl
1.使用 edit params repl 命令,在弹出的文本中添加以下内容:
配置对象映射时,建议指定具体的对象名称,不要用通配符*。因为当对象找不到时,进程会停止。
replicat repl
userid ggs@xxx.xx.xx.xxx:1521/orclpdb,password 123456
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/repl.dsc,append,megabytes 50
// PDB模式的配置
SOURCECATALOG ORCLPDB
MAP ggs.demo, target ggs.demo;
- 输入以下命令,启动repl进程。
add replicat repl,exttrail Z:dirdatet,checkpointtable ggs.checkpoint
start repl
防火墙设置 (内外网的话 外网就开放一个特殊端口给内网)
在防火墙入站规则中放行 7500-7505 端口。
六 GoldenGate卸载
1、 运行Run GGSCI
2、 停止所有Oracle GoldenGate进程.
STOP ER *
3、 停止Manager进程
STOP MANAGER
4、 运行deinstall.sh
UNIX and Linux: OGG_home/deinstall/deinstall.sh
Windows: OGG_home/deinstall/deinstall.bat
卸载失败 提示
windows : C:Program FilesOracleInventoryContentsXML
配置DDL 的抽取
DDL(data definition language)是数据定义语言:
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,
DDL主要是用在定义或改变表(TABLE)的结构,数据类型,
表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
extract 里,默认是不支持 DDL 的抽取
需要配置DDL 的抽取 这样表和字段的变更也能同步了
常见问题
OGG Checkpoint表 主表和 辅助表 Checkpoint_LOX
Incompatible record (logical EOF) in trail 报错解决
进入logdump命令行
在GoldenGate的安装目录下直接运行./logdump即可
windows logdump.exe
open dirdat/xxxx --打开trail文件
ghdr on
pos 1775 --使用上边报错rba号
n --查看下一条记录
sfh prev --查看上一条记录header
显示中 Len 312 RBA 2706720 --记录此rba,接下来从这个点开始启动replicat进程
## 下面操作ggsci
GGSCI alter LR_BF9_A , extrba 2706720
info all
stoppped 停止
ABENDED 强制关闭的
RUNNING 运行中的
ogg日志查看
GoldenGate安装根目录下有错误日志,文件名是 用户名+err.log ,如 ggserr.log ,不仅可以查看错误信息,还能看数据同步的情况。
重新指定抽取
链接: OGG 手工切换trail文件两种方法
1)使用alter extract ext1 etrollover命令生成新的trail文件,extract,pump进程必须先停止,并且要必须指定datapump和replicat进程的seqno序号,否则进程不会自动从新的trail文件同步数据。
2)SEND extract ext1, ROLLOVER 名称生成新的trail文件不需要停止进程,也不需要知道seqno序号,可以继续同步数据。
3)alter extract ext1 etrollover 应用场景一般在初始化数据或者指定时间点开始开始抽取数据时,重新生成trail文件,并指定从新的trail文件号开始抽取数据,防止以前trail文件的干扰,SEND extract ext1, ROLLOVER 应用一般在修改trail文件大小时在线修改不影响业务正常运行。
--前滚重新生成一个新的队列文件
alter extract eora etrollover
--从指定时间重新抓取(重新抓取数据前提:归档文件没有删除)
ALTER EXTRACT eora, TRANLOG, BEGIN 2022-09-05 06:00
--重置抽取进程,本地文件序列号从0开始生成。
alter extract eora,extseqno 0,extrba 0
--重置读取进程,重新从0号trial文件开始读取。
alter replicat repl,extseqno 4,extrba 0
-- 重新应用数据
start replicat repl nofilterduptransactions
pump遇到ogg-01052
链接: 【ogg实战】pump遇到ogg-01052
No recovery is required for target file C:oggdirdatrt000000000, at RBA 0
ext没问题,pump没有投递给目标端,创建pump的路径没问题,初始化一下序列号即可
我遇到的是ogg-01052应该是没找到源文件,创建plzsi时路径肯定是没问题,因此就是文件名的问题,文件名的序列是00000,而dirdat文件是1814开始的,可能是手贱把plzsi的seq重置0了,没记录日志,也查不出来了
OGG Trail分析利器-Logdump
链接: OGG Trail分析利器-Logdump
运行ggsci.exe提示找不到OCI.dll
Oracle 客户端或服务端未安装。
表不存在时,Replicat进程会异常结束
integrated 集成模式设置
- <=11.2.0.4版本,需要解决 Patch 17030189 is required… 的问题
cd C:appAdministratorproductogg123
sqlplus sys/orcl@192.168.0.53:1521/orclgbk as sysdba
SQL> @prvtlmpg.plb
输入创建的GoldenGate管理用户
- 注册extract 进程并使用integrated模式
register extract eora database
add extract eora,integrated tranlog,begin now
add exttrail C:appAdministratorproductogg123dirdatet,extract eora
start eora
3.注册replicat 进程并使用integrated模式
add replicat repl,integrated,exttrail
C:appAdministratorproductogg123dirdatrt, NODBCHECKPOINT
dblogin userid ggs,password 123456
register replicat repl database
start repl
最后
以上就是隐形心锁为你收集整理的Oracle GoldenGate实现数据同步(Windows环境下的内外网同步)的全部内容,希望文章能够帮你解决Oracle GoldenGate实现数据同步(Windows环境下的内外网同步)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复