使用GoldenGate完成SQLserver到Oracle的数据实时同步

发布于:2025-03-18 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、环境准备

*项目* *源环境* *目标环境*
操作系统 CentOS Linux release 7.6 CentOS Linux release 7.6
IP地址 192.168.3.92 192.168.3.168
数据库及版本 SQLserver 2016 Oracle 11.2.0.4.0
GoldenGate用户 ogg ogg
GoldenGate版本 12.3.0.2.0 12.3.0.2.0

二、OGG架构

GoldenGate v11 能够在异构平台之间实现事务级的复制。它支持 Oracle Database、IBM DB2、Microsoft SQL Server、MySQL、Teradata 以及众多其他平台。(它还支持通过通用 ODBC 驱动程序进行访问)

我们需要熟悉的最重要的组件是 Extract 和 Replicat 进程。Extract 进程运行在源系统上,负责捕获数据更改。Replicat 运行在目标计算机上,负责将更改应用于目标数据库。

在这里插入图片描述

以上是 Extract 进程的两个常见配置。所谓的“初始加载”用于用源数据的精确副本填充目标数据库(即 Extract 从源数据库提取所有数据并且通常只运行一次)。然后就可以进行“更改同步”。在“更改同步”配置中,Extract 不间断地监视源数据库并即时捕获所有更改。

三、OGG安装

在Oracle用户下新建gg目录,

[oracle@szzf-----0024 oracle]$ mkdir gg

[oracle@szzf-----0024 gg]$ export GGATE=$ORACLE_BASE/gg

[oracle@szzf-----0024 gg]$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_BASE/gg

新建完成后设置环境变量:

完成该操作后,需要设置 PATH 和 LD_LIBRARY_PATH 环境变量。

在这里插入图片描述

查看环境变量参数:[oracle@szzf-----0024 ~]$ cat .bash_profile

在这里插入图片描述

上传安装包至服务器:

[oracle@szzf-----0024 opt]$ tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/oracle/gg

进入相应的目录:

[oracle@szzf-----0024 gg]$ ./ggsci

在这里插入图片描述

GGSCI (szzf-----0024.novalocal) 2> create subdirs

在这里插入图片描述

配置manager端口号

在这里插入图片描述

启动mgr进程:

在这里插入图片描述

查看进程是否正常:

在这里插入图片描述

源端replicat进程配置

在这里插入图片描述

SPECIALRUN 参数定义一个初始加载进程(这是不使用检查点的一次性加载)。文件中的下一行指示 Replicat 进程在加载完成后终止。

接下来提供了数据库用户和口令、提取文件以及表定义。最后一个参数 MAP 指示 Replicat 将表 dbo.* 重新映射到 GG.*。

四、初始提取和加载

源端:

C:\Users\Administrator\Desktop\V34342-01>extract paramfile dirprm\inext.prm reportfile dirrpt\inext.rpt

 

***********************************************************************

**       Running with the following parameters          **

***********************************************************************

 

2025-02-26 09:46:55  INFO   OGG-03035  Operating system character set identifie

d as GBK. Locale: zh_Hans_CN, LC_ALL:.

 

2025-02-26 09:46:55  INFO   OGG-02696  NON-ANSI SQL parameter syntax is used fo

r parameter parsing.

 

2025-02-26 09:46:55  INFO   OGG-01017  Wildcard resolution set to IMMEDIATE bec

ause SOURCEISTABLE is used.

 

2025-02-26 09:46:55  INFO   OGG-03036  Database character set identified as win

dows-936. Locale: zh_Hans_CN.

 

2025-02-26 09:46:55  INFO   OGG-03037  Session character set identified as GBK.

 

Wildcard TABLE resolved (entry dbo.*):

 TABLE dbo.systranschemas;

Using the following key columns for source table dbo.systranschemas: startlsn.

 

Wildcard TABLE resolved (entry dbo.*):

 TABLE dbo.t1;

Using the following key columns for source table dbo.t1: id.

 

 

22025-02-26 09:46:55  INFO   OGG-01815  Virtual Memory Facilities for: COM

  anon alloc: MapViewOfFile  anon free: UnmapViewOfFile

  file alloc: MapViewOfFile  file free: UnmapViewOfFile

  target directories:

  c:\gg\dirtmp.

 

CACHEMGR virtual memory values (may have been adjusted)

CACHESIZE:                 2G

CACHEPAGEOUTSIZE (normal):         4M

PROCESS VM AVAIL FROM OS (min):     3.94G

CACHESIZEMAX (strict force to disk):  3.36G

 

2025-02-26 09:46:55  WARNING OGG-01842  CACHESIZE PER DYNAMIC DETERMINATION (2G)

 LESS THAN RECOMMENDED: 64G (64bit system)

vm found: 3.94G

Check swap space. Recommended swap/extract: 128G (64bit system).

 

Database Version:

Microsoft SQL Server

Version 10.00.1600

ODBC Version 03.80.0000

 

Driver Information:

SQLSRV32.DLL

Version 06.01.7601

ODBC Version 03.52

 

2025-02-26 09:46:55  INFO   OGG-01478  Output file /u01/app/oracle/gg/dirdat/ex

 is using format RELEASE 11.2.

 

2025-02-26 09:46:55  INFO   OGG-01226  Socket buffer size set to 27985 (flush s

ize 27985).

 

Processing table dbo.systranschemas

 

Processing table dbo.t1

 

***********************************************************************

\*          ** Run Time Statistics **             *

***********************************************************************

 

 

Report at 2025-02-26 09:48:55 (activity since 2025-02-26 09:48:55)

 

Output to /u01/app/oracle/gg/dirdat/ex:

 

From Table dbo.t1:

​    \#          inserts:      4\#          updates:     0\#          deletes:      0\#          discards:     0

运行时统计信息显示已成功提取 4 行数据。

目标端:

[oracle@szzf-----0024 gg]$ ./replicat paramfile dirprm/inload.prm

 

***********************************************************************

​         Oracle GoldenGate Delivery for Oracle

 Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258_FBO

  Linux, x64, 64bit (optimized), Oracle 11g on 20:37:31

 

Copyright (C), Oracle and/or its affiliates. All rights reserved.

 

 

​          Starting at 2025-02-26 09:49:42

***********************************************************************

 

Operating System Version:

Linux

Version #1 SMP Release 3.10.0-957.el7.x86_64

Node: szzf-----0024.novalocal

Machine: x86_64

​             soft limit  hard limit

Address Space Size  :   unlimited   unlimited

Heap Size       :   unlimited   unlimited

File Size       :   unlimited   unlimited

CPU Time       :   unlimited   unlimited

 

Process id: 29131

 

Description: 

 

***********************************************************************

**       Running with the following parameters          **

***********************************************************************

 

2025-02-26 09:49:42  INFO   OGG-03035  Operating system character set identified as UTF-8. Locale: en_US, LC_ALL:.

SPECIALRUN

END RUNTIME

USERID gg, PASSWORD **

 

2025-02-26 09:49:42  INFO   OGG-03501  WARNING: NLS_LANG environment variable is invalid or not set. Using operating system character set value of AL32UTF8.

EXTFILE /u01/oracle/gg/dirdat/ex

SOURCEDEFS /u01/oracle/gg/dirdef/emp.def

 

Source Context :

 SourceModule       : [er.init]

 SourceID         : [/scratch/aime1/adestore/views/aime1_adc4150256/oggcore/OpenSys/src/app/er/init.cpp]

 SourceFunction      : [get_infile_params]

 SourceLine        : [1573]

 ThreadBacktrace     : [7] elements

​             : [/u01/oracle/gg/libgglog.so(CMessageContext::AddThreadContext()+0x1e) [0x7fc852d3270e]]: [/u01/oracle/gg/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x2cc) [0x7fc852d2b6ac]]: [/u01/oracle/gg/libgglog.so(_MSG_ERR_STARTUP_PARAMERROR_ERRORTEXT(CSourceContext*, char const*, CMessageFactory::MessageDisposition)+0x31) [0x7fc852d1eb8d]]: [./replicat(get_infile_params(time_elt_def*, time_elt_def*, char**)+0x3c23) [0x528a43]]: [./replicat(main+0x117) [0x54c5e7]]: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x7fc84d10c3d5]]: [./replicat(__gxx_personality_v0+0x31a) [0x4c0c6a]]

在这里插入图片描述

查看情况:

SQL> select id, first_name from t1;

 

ID FIRST_NAME
---------- --------------------------------------------------
   1 Dave
   2 Chris
   3 David
   4 Shawn

EMP 表现在包含原先在 SQL Server 上插入的所有记录的副本。

通过上面的配置source端和target的数据完全一致。

五、实时数据捕获配置

源端:

Oracle Database 现在已有了 SQL Server 的 EMP 表的一个精确副本,可以创建实时捕获配置了。我们将 Extract 和 Replicat 进程配置成一直运行并不断传输/应用 EMP 表的更改。

为了实现这一新配置,需要为提取和复制创建新的参数文件。不过首先必须在 SQL Server 上另外执行两个步骤:确认数据库已设置为完全恢复,然后执行 EMP 数据库的完整数据库备份。如果执行完整备份失败,将阻碍 Extract 进程捕获实时数据更改。

通过右键单击 EMP 数据库,选择 属性 并检查 Recovery model 的值,可以轻松检查该数据库是否处于完全恢复模式。

在这里插入图片描述

执行完整备份也只需几次单击即可完成。右键单击 EMP 数据库,选择 任务,然后选择 备份。这将启动 Back Up Database 对话框。确认 Backup type 配置为 Full,然后单击 OK。

在这里插入图片描述

备份已完成:

在这里插入图片描述

创建一个挖掘事务日志的新 extract 组,将其命名为 MSEXT。然后设置数据更改应写入的目标 (/u01/app/oracle/gg/dirdat/ms)。

GGSCI (szzf-----0026) 1> ADD EXTRACT MSEXT, TRANLOG, BEGIN NOW

EXTRACT added.

 

GGSCI (szzf-----0026) 2> ADD RMTTRAIL /u01/oracle/gg/dirdat/ms, EXTRACT MSEXT

RMTTRAIL added.

在这里插入图片描述

添加一个新的配置文件:

GGSCI (szzf-----0026) 3> EDIT PARAMS MSEXT

GGSCI (szzf-----0026) 4> view PARAMS MSEXT

EXTRACT MSEXT

SOURCEDB db01 userid sa,password 123

TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT

RMTHOST 10.211.3.168, MGRPORT 7809

RMTTRAIL /u01/oracle/gg/dirdat/ms

TABLE dbo.*;

 

GGSCI (szzf-----0026) 5>

在这里插入图片描述

目标端:

这里不同的是我们省略了 SOURCEISTABLE 参数并引入一个新参数:TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT。此选项告诉 Extract 进程定期检查和删除 CDC 捕获作业,从而提高性能并减小捕获数据所占用的空间。

源计算机上所需要的配置就是这些。我们转到目标计算机去配置复制。

在 Linux 系统上,首先需要创建一个检查点表。检查点用于存储 Extract 和 Replicat 进程的当前读/写位置。它们可以防止数据丢失并确保进程可以进行故障恢复(例如,如果源和目标计算机之间的网络暂时中断)。通过在目标机上发出 ADD CHECKPOINT 命令创建一个表,用来保存检查点信息。

GGSCI (szzf-----0024.novalocal) 3> DBLOGIN USERID gg, PASSWORD gg

Successfully logged into database.

 

GGSCI (szzf-----0024.novalocal) 4> 

 

GGSCI (szzf-----0024.novalocal) 4> ADD CHECKPOINTTABLE gg.chkpt

 

Successfully created checkpoint table gg.chkpt.

 

GGSCI (szzf-----0024.novalocal) 5>

在这里插入图片描述

GGSCI (szzf-----0024.novalocal) 5> ADD REPLICAT MSREP, EXTTRAIL /u01/oracle/gg/dirdat/ms, CHECKPOINTTABLE gg.chkpt

REPLICAT added.

在这里插入图片描述

配置现已完成。下面我们来启动 Extract 和 Replicat 执行一些测试

六、启动并测试联机事务复制

源端:

GGSCI (szzf-----0026) 5> START EXTRACT MSEXT

 

Sending START request to MANAGER ('GGSMGR') ...

EXTRACT MSEXT starting

GGSCI (szzf-----0026) 6> info all

 

Program   Status    Group    Lag at Chkpt  Time Since Chkpt

 

MANAGER   RUNNING

EXTRACT   STOPPED   MSEXT    00:00:00    00:09:34

GGSCI (szzf-----0026) 7>

 

GGSCI (szzf-----0026) 7>

在这里插入图片描述

目标端:

GGSCI (szzf-----0024.novalocal) 8> START REPLICAT MSREP

Sending START request to MANAGER ...

REPLICAT MSREP starting

GGSCI (szzf-----0024.novalocal) 9> info all

Program   Status    Group    Lag at Chkpt  Time Since Chkpt

MANAGER   RUNNING                      

REPLICAT   STOPPED   MSREP    00:00:00    00:03:48   

GGSCI (szzf-----0024.novalocal) 10>

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到