Oracle GoldenGate实现数据同步(Windows环境下的内外网同步)

参考链接: 在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;

开启归档日志

注意:归档日志占用空间比较大,可设置定时任务进行清理。

  1. 查看归档模式是否已开启。
select log_mode from v$database;

在这里插入图片描述
2. mount 状态下开启归档模式。

-- 查看自动归档状态和归档进程
archive log list;
-- 关闭数据库
shutdown immediate;
-- 启动到mount状态
startup mount;
-- 开启归档模式
alter database archivelog;
-- 开启数据库
alter database open;
  1. 再次查看归档模式是否已开启。

开启强制日志

  1. 查看 force logging 是否已开启。
select force_logging from v$database;

在这里插入图片描述
2. 开启 force logging 。

alter database force logging;

开启最小附加日志

  1. 查看 supplemental log 是否已开启。
select supplemental_log_data_min from v$database;

在这里插入图片描述
2. 开启 supplemental log 。

alter database add supplemental log data;
  1. 切换日志,使设置生效。
alter system switch logfile;

关闭回收站

  1. 查看回收站是否启用。
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++

  1. 可从Microsoft 官网下载Visual C++可再发行组件包。这里需要安装2010和2013两个版本。

  2. 下载后,双击运行安装即可。

安装GoldenGate

  1. 可从Oracle 中国下载12版本的GoldenGate。
  2. 将安装包复制到服务器上,解压后以管理员身份运行 setup.exe 。

在这里插入图片描述

  1. 根据数据库版本选择对应的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 安装为系统服务

  1. 以管理员身份运行 ggsci.exe 。
  2. 执行以下命令,创建 GLOBALS 文件。
EDIT PARAMS ./GLOBALS
  1. 在 GLOBALS 文件中添加以下内容。 GGMGR 是自定义的服务名称。
MGRSERVNAME GGMGR
  1. 保存退出后,在GoldenGate根目录下使用 install 命令安装服务。
INSTALL ADDSERVICE

在这里插入图片描述

设置跟踪的表

  1. 在GGSCI中登录GoldenGate管理用户。
dblogin userid ggs,password 123456

客户端远程连接可以使用:

dblogin userid [email protected]:1521/orclgbk,password 123456
  1. 设置要跟踪的表。(可以指定具体的对象,也可以使用通配符,如*)
add trandata xxx.*

配置Manager管理进程

  1. 使用 edit params mgr 命令,在弹出的文本中添加以下内容:
port 7500
dynamicportlist 7501-7505
autorestart extract *,waitminutes 2,retries 5
  1. 输入 start mgr ,启动mgr进程。

配置Extract抽取进程

  1. 使用 edit params eora 命令,在弹出的文本中添加以下内容:
    exttrail : 自定义的抽取文件存放路径。最后一个目录一定要是两个字符,表示的是文件名的前
    两位。
    远程连接数据库,可以使用 userid [email protected]:1521/orclgbk,password 123456
edit params eora
extract eora
userid c##ggs,password 123456
exttrail C:\ogg\dirdat\et
SOURCECATALOG orclpdb
table ggs.demo;

注意:SOURCECATALOG orclpdb 是pdb模式添加的额外配置
在这里插入图片描述

在这里插入图片描述

  1. 输入以下命令,启动eora进程。
-- 1.从当前时间开始抽取
add extract eora,tranlog,begin now
-- 2.最后一个目录一定要是两个字符。要不然会提示“file portion must be twocharacters.”
add exttrail C:\app\Administrator\product\ogg123\dirdat\et,extract eora 
-- 3.启动eora进程
start eora

配置Data Pump推送进程 (因为不能网络传输,此步在内外网交互不做了)

数据泵用于读取本地路径并通过网络将数据发送到远程路径。数据泵为可选配置,但推荐使用。

  1. 在源系统的 GGSCI 中,使用 edit params pump_so 命令,创建 data-pump 的参数文件,内容
    如下:
extract pump_so
userid ggs,password 123456
rmthost xx.x.xx.xxx, mgrport 7500
// 生成trail数据的目录
rmttrail C:\app\Administrator\product\ogg123\dirdat\rt
Table xxx.*;

其中:pump_so是数据泵进程的名称。

  1. 配置推送目录。
-- exttrailsource为主服务器的目录
add extract pump_so,exttrailsource C:\app\Administrator\product\ogg123\dirdat\et
-- rmttrail的地址为从服务器的目录
add rmttrail C:\app\Administrator\product\ogg123\dirdat\rt,extract pump_so

在这里插入图片描述
3. 等从服务器配置好,再启动 pump_so 进程。

start pump_so
  1. 可使用 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 [email protected]:1521/orclpdb,password 123456
1.设置要跟踪的表
add trandata ggs.demo
add checkpointtable ggs.checkpoint

配置Manager管理进程

edit params mgr
  1. 使用 edit params mgr 命令,在弹出的文本中添加以下内容:
port 7500
dynamicportlist 7501-7505
autostart er *
autorestart extract *,waitminutes 2,retries 5
lagreporthours 1
laginfominutes 3
lagcriticalminutes 5
purgeoldextracts Z:\dirdat\et,usecheckpoints,minkeepdays 3

启动mgr进程

start mgr

配置Replicat进程

edit params repl

1.使用 edit params repl 命令,在弹出的文本中添加以下内容:
配置对象映射时,建议指定具体的对象名称,不要用通配符*。因为当对象找不到时,进程会停止。

replicat repl
userid [email protected]:1521/orclpdb,password 123456
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/repl.dsc,append,megabytes 50
// PDB模式的配置
SOURCECATALOG ORCLPDB
MAP ggs.demo, target ggs.demo;
  1. 输入以下命令,启动repl进程。
add replicat repl,exttrail Z:\dirdat\et,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 Files\Oracle\Inventory\ContentsXML

在这里插入图片描述

配置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:\ogg\dirdat\rt000000000, 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 集成模式设置

  1. <=11.2.0.4版本,需要解决 Patch 17030189 is required… 的问题
cd C:\app\Administrator\product\ogg123
sqlplus sys/[email protected]:1521/orclgbk as sysdba
SQL> @prvtlmpg.plb
输入创建的GoldenGate管理用户
  1. 注册extract 进程并使用integrated模式
register extract eora database
add extract eora,integrated tranlog,begin now
add exttrail C:\app\Administrator\product\ogg123\dirdat\et,extract eora
start eora

3.注册replicat 进程并使用integrated模式

add replicat repl,integrated,exttrail
C:\app\Administrator\product\ogg123\dirdat\rt, NODBCHECKPOINT
dblogin userid ggs,password 123456
register replicat repl database
start repl

猜你喜欢

转载自blog.csdn.net/qq_41604890/article/details/126766505
今日推荐