使用GoldenGate完成SQLserver到Oracle的数据实时同步
一、环境准备
*项目* | *源环境* | *目标环境* |
---|---|---|
操作系统 | 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>