使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

作者:Nikolay Manchev

分步构建一个跨这些平台的简单事务复制示例。

2011 年 8 月发布

大多数关注数据复制的 Oracle 技术专家都熟悉 Oracle Streams。在 2009 年之前,Streams 一直是推荐使用的最流行的 Oracle 数据分发技术。

2009 年 7 月,Oracle 收购了 GoldenGate 这一数据库复制软件供应商。Oracle 现在鼓励客户使用 Oracle GoldenGateOracle 融合中间件系列的组成部分)来满足新应用中的数据复制需求。Oracle 关于 Oracle Streams 的发展方向声明表示该产品“将继续得到支持,但不会积极增强其功能”。

在本文中,我们将使用 Oracle GoldenGate 构建一个简单事务复制示例,以便熟悉这一新技术。

Oracle GoldenGate 架构

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

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

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

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

在本演示中,我们将 Microsoft SQL Server 2008 配置为源数据库,配置并执行一个初始加载,然后以更改同步模式启动 Extract 进程。为了显示此复制的确是异构的,我们将在 Windows XP 上运行 SQL Server,在 Oracle Linux 5 上运行 Oracle Database 11g 第 2 版。作为先决条件,假定您在 Windows 系统上安装了干净的 SQL Server 2008,在 Linux 系统安装了 Oracle Database。

我们将从安装 GoldenGate 开始构建演示场景。首先从 Windows 系统开始。

在 Windows XP 上安装适用于 SQL Server 的 GoldenGate

首先,需要适用于 SQL Server 的 Oracle GoldenGate v11。可以从 http://edelivery.oracle.com 下载 (Oracle Fusion Middleware → Microsoft Windows x32 → Oracle GoldenGate for Non Oracle Database v11)。所需介质包的序列号是 V22241-01。

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

在希望安装 Oracle GoldenGate 的位置(在本示例中为 C:\GG)解压缩下载的压缩包。然后打开命令提示符,转到 C:\GG 目录,启动 GGSCI(GoldenGate 命令界面):

C:\GG>ggsci
Oracle GoldenGate Command Interpreter for ODBC
Version 11.1.1.0.0 Build 078
Windows (optimized), Microsoft SQL Server on Jul 28 2010 18:55:52
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
GGSCI (MSSQL) 1>

接着执行 CREATE SUBDIRS 命令创建 Oracle GoldenGate 工作目录。

GGSCI (MSSQL) 1> CREATE SUBDIRS
Creating subdirectories under current directory C:\GG
Parameter files                C:\GG\dirprm: created
Report files                   C:\GG\dirrpt: created
Checkpoint files               C:\GG\dirchk: created
Process status files           C:\GG\dirpcs: created
SQL script files               C:\GG\dirsql: created
Database definitions files     C:\GG\dirdef: created
Extract data files             C:\GG\dirdat: created
Temporary files                C:\GG\dirtmp: created
Veridata files                 C:\GG\dirver: created
Veridata Lock files            C:\GG\dirver\lock: created
Veridata Out-Of-Sync files     C:\GG\dirver\oos: created
Veridata Out-Of-Sync XML files C:\GG\dirver\oosxml: created
Veridata Parameter files       C:\GG\dirver\params: created
Veridata Report files          C:\GG\dirver\report: created
Veridata Status files          C:\GG\dirver\status: created
Veridata Trace files           C:\GG\dirver\trace: created
Stdout files                   C:\GG\dirout: created
GGSCI (MSSQL) 2> EXIT
C:\GG>

根据官方文档,GGSCI 支持每个 Oracle GoldenGate 实例最多 300 个并发的 Extract 和 Replicat 进程。不过,有一个进程负责控制其他进程;这个进程被称作 Manager 进程。虽然您可以手动运行此进程,但最好将其安装为服务,否则当启动该进程的用户注销时,该进程将停止。

要将 Manager 进程添加为 Windows 服务,请在 GoldenGate 安装目录中执行 INSTALL ADDSERVICE 命令。

C:\GG>INSTALL ADDSERVICE
Service 'GGSMGR' created.
Install program terminated normally.
C:\GG>

这样就差不多完成了 Windows 安装。我们转到 Linux 系统。

在 Oracle Linux 5 上安装适用于 Oracle 的 GoldenGate

在 Linux 上安装 Oracle GoldenGate 与您刚才在 Windows XP 上进行的安装大同小异。您需要下载适用于 Linux 上的 Oracle 的 GoldenGate 介质包 (V22228-01)。创建一个安装目录并将压缩包解压缩到该目录。在本示例中,我使用 /u01/app/oracle/gg 目录,因为 ORACLE_BASE 指向 /u01/app/oracle。完成该操作后,需要设置 PATH 和 LD_LIBRARY_PATH 环境变量,如下所示:

[oracle@oradb ~]$ export PATH=$PATH:$ORACLE_BASE/gg
[oracle@oradb ~]$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_BASE/gg

启动 GGSCI 并执行 CREATE SUBDIRS。

[oracle@oradb ggs]$ cd $ORACLE_BASE/gg
[oracle@oradb gg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 13:22:25
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
GGSCI (oradb) 1> CREATE SUBDIRS
Creating subdirectories under current directory /u01/app/oracle/gg
Parameter files                /u01/app/oracle/gg/dirprm: created
Report files                   /u01/app/oracle/gg/dirrpt: created
Checkpoint files               /u01/app/oracle/gg/dirchk: created
Process status files           /u01/app/oracle/gg/dirpcs: created
SQL script files               /u01/app/oracle/gg/dirsql: created
Database definitions files     /u01/app/oracle/gg/dirdef: created
Extract data files             /u01/app/oracle/gg/dirdat: created
Temporary files                /u01/app/oracle/gg/dirtmp: created
Veridata files                 /u01/app/oracle/gg/dirver: created
Veridata Lock files            /u01/app/oracle/gg/dirver/lock: created
Veridata Out-Of-Sync files     /u01/app/oracle/gg/dirver/oos: created
Veridata Out-Of-Sync XML files /u01/app/oracle/gg/dirver/oosxml: created
Veridata Parameter files       /u01/app/oracle/gg/dirver/params: created
Veridata Report files          /u01/app/oracle/gg/dirver/report: created
Veridata Status files          /u01/app/oracle/gg/dirver/status: created
Veridata Trace files           /u01/app/oracle/gg/dirver/trace: created
Stdout files                   /u01/app/oracle/gg/dirout: created
GGSCI (oradb) 2> EXIT
[oracle@oradb gg]$

Linux 系统上的安装现已完成。

准备源数据库

下一步是在 SQL Server 中新建一个数据库并用一些示例数据进行填充。该数据库名为 EMP。可以通过启动 SQL Server Management Studio,右键单击 Databases 并选择 New Database 来创建该数据库。

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

在 Database name 域中键入 EMP,然后单击 OK,其他选项保留默认值。

我们在新创建的数据库中添加一个新的数据库模式 (HRSCHEMA)、一个表 (EMP) 和几条测试记录。通过运行以下 SQL 来实现这些操作:

set ansi_nulls on
go

set quoted_identifier on
go

create schema hrschema
go

create table [hrschema].[emp] (
     [id] [smallint] not null,
     [first_name] varchar(50) not null,
     [last_name] varchar(50) not null,
constraint [emp_pk] primary key clustered (
     [id] asc
) with (pad_index = off, statistics_norecompute=off, ignore_dup_key=off, allow_row_locks=on, allow_page_locks=on) on [primary]
) on [primary]

go

-- TEST DATA

INSERT INTO [hrschema].[emp] ([id], [first_name], [last_name]) VALUES (1,'Dave','Mustaine')
INSERT INTO [hrschema].[emp] ([id], [first_name], [last_name]) VALUES (2,'Chris','Broderick')
INSERT INTO [hrschema].[emp] ([id], [first_name], [last_name]) VALUES (3,'David','Ellefson')
INSERT INTO [hrschema].[emp] ([id], [first_name], [last_name]) VALUES (4,'Shawn','Drover')
GO

首先新建一个查询(右键单击数据库名并选择 New Query)。然后贴入以上 SQL 文本,按 F5 执行。

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

现在,为使 Oracle GoldenGate 能够访问 EMP 数据库,必须为其创建一个 ODBC 数据源。转到 Control Panel -> Administrative Tools -> Data Sources (ODBC),添加一个新的系统 DSN。选择 SQL Server 作为数据库驱动程序并将该数据源命名为 HR。将来源指向本地 SQL Server (MSSQL) 并填写登录凭证。数据源摘要应类似如下所示:

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

现在该让 Oracle GoldenGate 能够从事务日志中获取有关 EMP 表的事务信息了。您仍将使用 GGSCI:

C:\GG>ggsci.exe
Oracle GoldenGate Command Interpreter for ODBC
Version 11.1.1.0.0 Build 078
Windows (optimized), Microsoft SQL Server on Jul 28 2010 18:55:52
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
GGSCI (MSSQL) 1> DBLOGIN SOURCEDB HR
Successfully logged into database.
GGSCI (MSSQL) 2> ADD TRANDATA HRSCHEMA.EMP
Logging of supplemental log data is enabled for table hrschema.emp
GGSCI (MSSQL) 3>

因为 Oracle 和 SQL Server 中的数据类型不同,所以您必须建立数据类型转换。GoldenGate 提供了一个名为 DEFGEN 的专用工具,用于生成数据定义,当源表和目标表中的定义不同时,Oracle GoldenGate 进程将引用该专用工具。在运行 DEFGEN 之前,需要为其创建一个参数文件,指定该工具应检查哪些表以及在检查表之后存放类型定义文件的位置。可以在 GGSCI 内使用 EDIT PARAMS 命令创建这样一个参数文件。

GGSCI (MSSQL) 3> EDIT PARAMS DEFGEN
GGSCI (MSSQL) 4>

这将创建一个名为 DEFGEN.PRM 的空参数文件,该文件位于 GoldenGate 安装的 DIRPRM 文件夹中。将以下内容放入该文件内:

defsfile c:\gg\dirdef\emp.def
sourcedb hr
table hrschema.emp;

参数的含义不言自明。我们希望 DEFGEN 检查 HRSCHEMA 内的 EMP 表并在 DIRDEF 子目录中放置一个名为 EMP.DEF 的定义文件。我们来调用 DEFGEN 并检查其输出。

C:\GG>defgen paramfile c:\gg\dirprm\defgen.prm
***********************************************************************
         Oracle GoldenGate Table Definition Generator for ODBC
                     Version 11.1.1.0.0 Build 078
   Windows (optimized), Microsoft SQL Server on Jul 28 2010 19:16:56
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
                    Starting at 2011-04-08 14:41:06
***********************************************************************
Operating System Version:
Microsoft Windows XP Professional, on x86
Version 5.1 (Build 2600: Service Pack 3)
Process id: 2948
***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
defsfile c:\gg\dirdef\emp.def
sourcedb hr
table hrschema.emp;
Retrieving definition for HRSCHEMA.EMP
Definitions generated for 1 tables in c:\gg\dirdef\emp.def
C:\GG>

如果您费心检查一下 EMP.DEF 的内容,就会发现其内容类似如下所示:

*
* Definitions created/modified  2011-07-07 10:27
*
*  Field descriptions for each column entry:
*
*     1    Name
*     2    Data Type
*     3    External Length
*     4    Fetch Offset
*     5    Scale
*     6    Level
*     7    Null
*     8    Bump if Odd
*     9    Internal Length
*    10    Binary Length
*    11    Table Length
*    12    Most Significant DT
*    13    Least Significant DT
*    14    High Precision
*    15    Low Precision
*    16    Elementary Item
*    17    Occurs
*    18    Key Column
*    19    Sub Data Type
*
*
Definition for table HRSCHEMA.EMP
Record length: 121
Syskey: 0
Columns: 3
id          134     23        0  0  0 1 0      8      8      8 0 0 0 0 1    0 1 0
first_name   64     50       11  0  0 1 0     50     50      0 0 0 0 0 1    0 0 0
last_name    64     50       66  0  0 1 0     50     50      0 0 0 0 0 1    0 0 0
End of definition

基本上,它列出了所有表/列并使用更一般的定义描述了原生数据库类型。

现在需要将 EMP.DEF 文件复制到目标计算机,因为该文件需要供 Replicat 进程使用。Replicat 还必须执行另一项转换。该进程将更一般的类型重新映射为数据库特定的类型(但这次这些类型将对应于目标数据库所使用的类型)。可以使用 FTP/SFTP 或 SCP 传输来复制文件。(我个人使用免费 FTP/SFTP/SCP 客户端 WinSCP 将 EMP.DEF 从 Windows 系统复制到 Linux 系统上的 /u01/app/oracle/gg/dirdef 文件夹中。)

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

准备目标数据库

源端的准备工作完成之后,现在轮到目标计算机了。首先创建一个模式 (GG_USER) 和一个表,以便 Replicat 进程可以在其中应用来自源数据库的事务。

[oracle@oradb ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 8 14:11:49 2011
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create user gg_user identified by welcome1;
User created.
SQL> grant connect, resource,select any dictionary to gg_user;
Grant succeeded.
SQL>

EMP 表应位于 GG_USER 模式中:

SQL> create table gg_user.emp (id number not null, first_name varchar2(50), last_name varchar2(50));
Table created.
SQL>

一定要记住,如果 Replicat 进程将数据应用于位于不同模式中的表,GG_USER 将需要额外的权限(如 SELECT ANY TABLE、LOCK ANY TABLE 等)。官方文档中列出了所需权限的详细列表。

针对初始数据加载配置 Extract 和 Replicat
首先在源计算机上配置 Extract 进程。将进程命名为 INEXT(表示 INitial EXTract,初始提取)。接下来,按照为 DEFGEN 实用程序创建参数文件的方式创建一个参数文件。文件名为 INEXT.PRM。

C:\GG>ggsci.exe
Oracle GoldenGate Command Interpreter for ODBC
Version 11.1.1.0.0 Build 078
Windows (optimized), Microsoft SQL Server on Jul 28 2010 18:55:52
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
GGSCI (MSSQL) 1> EDIT PARAMS INEXT

将以下内容粘贴到 INEXT.PRM 中:

SOURCEISTABLE
SOURCEDB HR
RMTHOST ORADB, MGRPORT 7809
RMTFILE /u01/app/oracle/gg/dirdat/ex
TABLE hrschema.emp;

SOURCEISTABLE 参数指示 Extract 进程直接从表而不是从事务日志获取数据。这是我们为执行完整提取所期望的行为。SOURCEDB 指向包含数据的数据库。RMTHOST 和 MGRPORT 指定远程计算机和 Manager 端口。RMTFILE 指定所提取的数据将写入的文件。

这就是初始数据提取所需的全部配置。我们转到 Linux 系统去配置初始数据加载。

首先您必须处理 Manager 进程:启动 GGSCI 并创建一个名为 MGR.PRM 的参数文件。

[oracle@oradb gg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 13:22:25
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
GGSCI (oradb) 1> EDIT PARAM MGR

在 MGR.PRM 中只需输入一行:

PORT 7809

保存文件后在 GGSCI 内执行 START MANAGER 命令,看看 Manager 是否正常启动。

GGSCI (oradb) 2> START MANAGER
Manager started.
GGSCI (oradb) 3>

接下来需要为 Replicat 进程设置参数。为此,创建一个新的参数文件并将其命名为 INLOAD(表示 INitial LOADing,初始加载)。

GGSCI (oradb) 3> EDIT PARAMS INLOAD

将以下内容放入 INLOAD.PRM 内:

SPECIALRUN
END RUNTIME
USERID gg_user, PASSWORD welcome1
EXTFILE /u01/app/oracle/gg/dirdat/ex
SOURCEDEFS /u01/app/oracle/gg/dirdef/emp.def
MAP hrschema.emp, TARGET gg_user.emp;

SPECIALRUN 参数定义一个初始加载进程(这是不使用检查点的一次性加载)。文件中的下一行指示 Replicat 进程在加载完成后终止。
接下来提供了数据库用户和口令、提取文件以及表定义。最后一个参数 MAP 指示 Replicat 将表 HRSCHEMA.EMP 重新映射到 GG_USER.EMP。

运行初始提取和加载

数据库和进程均已配置完成。现在可以启动初始加载,查看实际的数据复制过程。

首先需要运行 Extract 进程;它将提取 SQL Server 的 EMP 表中的所有数据,并将其写入 Linux 主机上的 RMTFILE (/u01/app/oracle/gg/dirdat/ex) 中。

通过运行 EXTRACT 命令并提供参数和日志文件作为命令行参数来启动 Extract。

C:\GG>extract paramfile dirprm\inext.prm reportfile dirrpt\inext.rpt
***********************************************************************
                  Oracle GoldenGate Capture for ODBC
                     Version 11.1.1.0.0 Build 078
   Windows (optimized), Microsoft SQL Server on Jul 28 2010 19:22:00
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
                    Starting at 2011-04-08 15:57:48
***********************************************************************
Operating System Version:
Microsoft Windows XP Professional, on x86
Version 5.1 (Build 2600: Service Pack 3)
Process id:556
Description:
***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
2011-04-08 15:57:48  INFO    OGG-01017  Wildcard resolution set to IMMEDIATE bec
ause SOURCEISTABLE is used.
Using the following key columns for source table HRSCHEMA.EMP: id.
CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE:                         64K
CACHESIZE:                                1G
CACHEBUFFERSIZE (soft max):               4M
CACHEPAGEOUTSIZE (normal):                4M
PROCESS VM AVAIL FROM OS (min):        1.85G
CACHESIZEMAX (strict force to disk):   1.62G
Database Version:
Microsoft SQL Server
Version 10.00.1600
ODBC Version 03.52.0000
Driver Information:
SQLSRV32.DLL
Version 03.85.1132
ODBC Version 03.52
Database Language and Character Set:
Warning: Unable to determine the application and database codepage settings.
Please refer to user manual for more information.
2011-04-08 15:57:49  INFO    OGG-01478  Output file /u01/app/oracle/gg/dirdat/ex
is using format RELEASE 10.4/11.1.
2011-04-08 15:57:55  INFO    OGG-01226  Socket buffer size set to 27985 (flush s
ize 27985).
Processing table HRSCHEMA.EMP
***********************************************************************
*                   ** Run Time Statistics **                         *
***********************************************************************
Report at 2011-04-08 15:57:55 (activity since 2011-04-08 15:57:49)
Output to /u01/app/oracle/gg/dirdat/ex:
From Table HRSCHEMA.EMP:
       #                   inserts:         4
       #                   updates:         0
       #                   deletes:         0
       #                  discards:         0
C:\GG>

运行时统计信息显示已成功提取 4 行数据。我们转到 Linux 系统去启动 Replicat。
要将所提取的数据应用于目标数据库,请运行 replicat 命令并提供准备好的参数文件。下面是运行 replicat 的节选:

[oracle@oradb gg]$ ./replicat paramfile dirprm/inload.prm
***********************************************************************
                 Oracle GoldenGate Delivery for Oracle
                     Version 11.1.1.0.0 Build 078
   Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 15:42:30
Copyright (C) 1995, 2010, Oracle and/or its affiliates.All rights reserved.
                    Starting at 2011-04-11 12:52:52
***********************************************************************
Operating System Version:
Linux
Version #1 SMP Mon Mar 29 20:06:41 EDT 2010, Release 2.6.18-194.el5
Node: oradb
Machine: i686
                         soft limit   hard limit
Address Space Size   :    unlimited    unlimited
Heap Size            :    unlimited    unlimited
File Size            :    unlimited    unlimited
CPU Time             :    unlimited    unlimited
Process id: 23383
Description:
***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
SPECIALRUN
END RUNTIME
USERID gg_user, PASSWORD ********
EXTFILE /u01/app/oracle/gg/dirdat/ex
SOURCEDEFS /u01/app/oracle/gg/dirdef/emp.def
MAP hrschema.emp, TARGET gg_user.emp;
CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE:                         64K
CACHESIZE:                              512M
CACHEBUFFERSIZE (soft max):               4M
CACHEPAGEOUTSIZE (normal):                4M
PROCESS VM AVAIL FROM OS (min):           1G
CACHESIZEMAX (strict force to disk):    881M
Database Version:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
...
Reading /u01/app/oracle/gg/dirdat/ex, current RBA 1210, 4 records
Report at 2011-04-11 12:53:15 (activity since 2011-04-11 12:53:14)
From Table HRSCHEMA.EMP to GG_USER.EMP:
       #                   inserts:         4
       #                   updates:         0
       #                   deletes:         0
       #                  discards:         0
Last log location read:
     FILE:      /u01/app/oracle/gg/dirdat/ex
     RBA:       1210
     TIMESTAMP: 2011-04-08 16:57:55.433993
     EOF:       NO
     READERR:   400
...
[oracle@oradb gg]$

您可以作为 GG_USER 登录 Oracle Database,检查 EMP 表的内容。

SQL> select id, first_name from emp;
     ID FIRST_NAME
---------- --------------------------------------------------
      1 Dave
      2 Chris
      3 David
      4 Shawn
SQL>

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

实时数据捕获配置

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

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

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

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

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

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

如果一切顺利,几秒钟后我们将看到操作成功的通知。

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

现在需要设置进程。首先在 Windows 系统上配置 Manager 进程。在初始加载阶段我们跳过了这一步,但在构建的新配置中,Extract 进程必须一直运行。这就需要一个执行资源管理功能的活动 Manager 进程。将遵循与 Linux 系统配置相同的步骤。

GGSCI (MSSQL) 1> EDIT PARAM MGR
GGSCI (MSSQL) 2>

在 MGR.PRM 中填入一行用于设置 Manager 实例的端口。

PORT 7809

然后启动 Manager。

GGSCI (MSSQL) 2> START MANAGER
Starting Manager as service ('GGSMGR')...
Service started.
GGSCI (MSSQL) 3>

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

GGSCI (MSSQL) 3> ADD EXTRACT MSEXT, TRANLOG, BEGIN NOW
EXTRACT added.
GGSCI (MSSQL) 4> ADD RMTTRAIL /u01/app/oracle/gg/dirdat/ms, EXTRACT MSEXT
RMTTRAIL added.

还需要一个新的参数文件。

GGSCI (MSSQL) 5> EDIT PARAMS MSEXT
GGSCI (MSSQL) 6>

在其中输入以下代码行:

EXTRACT MSEXT
SOURCEDB HR
TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT
RMTHOST ORADB, MGRPORT 7809
RMTTRAIL /u01/app/oracle/gg/dirdat/ms
TABLE HRSCHEMA.EMP;

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

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

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

GGSCI (oradb) 1> DBLOGIN USERID gg_user, PASSWORD welcome1
Successfully logged into database.
GGSCI (oradb) 2> ADD CHECKPOINTTABLE gg_user.chkpt
Successfully created checkpoint table GG_USER.CHKPT.
GGSCI (oradb) 3>

添加一个 Replicat 组并设置其参数。

GGSCI (oradb) 3> ADD REPLICAT MSREP, EXTTRAIL /u01/app/oracle/gg/dirdat/ms, CHECKPOINTTABLE gg_user.chkpt
REPLICAT added.
GGSCI (oradb) 4> EDIT PARAMS MSREP
GGSCI (oradb) 5>

最后一步是将以下代码行填入 MSREP.PRM。

REPLICAT MSREP
SOURCEDEFS /u01/app/oracle/gg/dirdef/emp.def
USERID gg_user, PASSWORD welcome1
MAP hrschema.emp, TARGET gg_user.emp;

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

启动并测试联机事务复制

要启动 Extract 进程,请使用 GGSCI 并执行 START EXTRACT 命令。

GGSCI (MSSQL) 1> START EXTRACT MSEXT
Sending START request to MANAGER ('GGSMGR') ...
EXTRACT MSEXT starting
GGSCI (MSSQL) 2>

在 Linux 系统上,使用 START REPLICAT 命令。

GGSCI (oradb) 1> START REPLICAT MSREP
Sending START request to MANAGER ...
REPLICAT MSREP starting
GGSCI (oradb) 2>

以 GG_USER 身份登录,查看 EMP 表的内容。

SQL> select id, first_name from emp;
     ID FIRST_NAME
---------- --------------------------------------------------
      1 Dave
      2 Chris
      3 David
      4 Shawn
SQL>

没有什么更新。自我们上次检查之后,数据未曾更改。返回 SQL Server 计算机运行以下查询,在源的 EMP 表中另外添加一行。

BEGIN TRAN
INSERT INTO [hrschema].[emp] ([id], [first_name], [last_name]) VALUES (9,'Gar','Samuelson')
COMMIT TRAN

使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

返回 Oracle Database 查看该处是否有任何更改。

SQL> select id, first_name from emp;
     ID FIRST_NAME
---------- --------------------------------------------------
      1 Dave
      2 Chris
      3 David
      4 Shawn
      9 Samuelson
SQL>

恭喜!不到一秒就完成了数据复制,及时反映了每个事务。

总结

在本文中,我们对某些 Oracle GoldenGate 特性进行了非常基本的演示。您应该了解有许多不同拓扑结构和使用情况。例如,可以将 GoldenGate 配置成执行双向复制(两个不同的数据库同时互相复制更改)。还有广播(一个数据库复制到多个目标)和整合(许多数据库复制到一个中心数据库)配置。可以使用 GoldenGate 实现查询分流(将报告与生产分离,但避免了传统数据仓库的时间空隙)。GoldenGate 还是一个能够实现零停机升级及数据库迁移的功能强大的解决方案。
有关特性、支持的数据库和平台以及推荐架构的详细信息,请参见 Oracle 技术网上提供的官方文档


Oracle ACE Nikolay Manchev 是一位在 Oracle Database (OCP — 10g 和 11g)、Java (SCJP)、虚拟化(VCP VI3、vSphere)和信息安全领域具有深厚背景的 IT 专业人士。他目前是一名 IT 架构师,在 Oracle 的一家金牌合作伙伴处领导其系统集成团队。

上一篇:react结合ant design的管理系统


下一篇:ant-design-pro使用qiankun微服务配置动态主题色