• 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 基本架构

    在这里插入图片描述

    组件解释
    ExtractGoldenGate 软件的抽取进程,又叫 Capture 进程,一 般用于抽取数据库日志抓取数据变化或将本地队列中数据 传递到目标端。Extract的作用可以分为两个阶段:①初始数据装载阶段:在初始数据装载阶段,extract进程直接从源端的数据表中抽取数据。②同步变化捕获阶段:初始化数据完成以后,extract进程负责捕获源端数据的变化(DML和DDL)
    ReplicatGoldenGate 软件的投递进程,又称为 Delivery 进程, 用于将队列文件中的数据变化转换为 sql 应用到目标库
    Data Pump专指将本地队列中数据传递到目标端的 Extract 进程, 区别于读取日志的主 Extract 进程。pump进程运行在数据库源端,其作用是将源端产生的本地trail文件以数据块的形式通过TCP/IP协议发送到目标端,这通常也是推荐的方式。Pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在抽取完数据以后,直接投递到目标端生成远程trail文件。
    TrailGoldenGate 的队列文件,存储增删改等数据变化,以 其专有格式存放
    Managermanger进程是goldengate的控制进程,分别运行在源端和目标端上,它主要的作用是启动、监控、重启goldengate的其他进程,报告错误及事件,分配数据存储空间,发布阀值报告等。需要注意的是在源端和目标端有且只有一个manger 进程。
    Collectorcollector进程与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 ggs@xxxx.xxx.x.xx: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 ggs@xxxx.xx.xx.xx: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 ggs@xxx.xx.xx.xxx: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 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;
    
    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/orcl@192.168.0.53: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
    
  • 相关阅读:
    vue、axios
    并发编程系列 - ReadWriteLock
    美国访问学者签证如何申请加急办理?
    面试现场!月薪3w+的这些数据挖掘SQL面试题你都掌握了吗? ⛵
    pyqt5:openpyxl 读取 Excel文件,显示在 QTableWidget 中
    【高并发】深度解析ScheduledThreadPoolExecutor类的源代码
    上周热点回顾(2.20-2.26)
    OKHttp3工具类
    机器视觉康耐视visionpro-脚本常见的编辑编译错误和运行错误及警告性错误,调试解决办法
    8月9日笔记
  • 原文地址:https://blog.csdn.net/qq_41604890/article/details/126766505