Oracle GoldenGate 将 SQLServer 数据同步到 ORACLE 详细配置过程

前端之家收集整理的这篇文章主要介绍了Oracle GoldenGate 将 SQLServer 数据同步到 ORACLE 详细配置过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Oracle GoldenGate (简称 OGG)使在不同关系型数据库之间能进行实时同步复制可谓非常强大。


OGG 支持 oracle、sql server、MysqL、db2、Sybase 等关系数据库直接的数据复制。OGG 这种灵活特性能支持多种业务场景。如下图:






OGG 实现原理如图:




OGG 有几个进程使数据同步或转移:Extract,Data pump,Replicat,Trails or extract files,Checkpoints,Manager,Collector

(更多参考官方文档:Introduction to Oracle GoldenGate


以下进行一个小测试:Windows 平台利用 GoldenGate 同步 sqlServer 到 ORACLE

OGG 同步sql server 原理: 启用Extract 进程后,sql server 中数据库及表将启用 变更数据捕获(CDC),并读取相关日志中表的日志信息。本例中使用的是 pump 进程传输同步文件记录,这样Extract进程读取出来的记录都保存到文件夹dirdat 中,保证即使中断也不会影响到数据库截断。(否则:Oracle GoldenGate For SQL Server 未提交事务导致MSSQL日志不截断


服务器信息:

源端: 192.168.1.123服务器: windows server 2008 x64数据库: MSsql 2008 R2

目标端: 192.168.1.89服务器: windows server 2008 x64数据库: ORACLE oracle 11g.2.0.4.0


GoldenGate下载地址:

http://www.oracle.com/technetwork/cn/middleware/goldengate/downloads/index.html


本次测试下载的两个 OGG :

ggs_121210_Windows_x64_MSsql_64bit.zip (解压可用)
适用于 Windows(64 位)上 sql Server 的 Oracle GoldenGate 12.1.2.1.0 版 (71 MB)

121210_ggs_Windows_x64_shiphome.zip (安装可用)
适用于 Windows(64 位)上 Oracle 的 Oracle GoldenGate 12.1.2.1.0 版 (239 MB)


sql SERVER 源端重要条件:

  1. 企业版:sql Server Enterprise Edition
  2. 启动 sql Server 代理 (自动)
  3. 有权启用:Change Data Capture (CDC)
  4. 数据库须为完整回复FULL)模式
  5. MSsql端权限:Extractsysadmin ; REPLICATdb_owner
  6. 当前都使用sql认证(dblogin ……)

ORACLE 目标端重要条件:
  1. 启用归档模式
  2. 启用GoldenGate复制
  3. 创建用于OGG账户并授予相关权限

/*####################################################################

## sql Server 源端配置

#####################################################################*/

  1. --创建测试数据
  2. use master
  3. go
  4. CREATE DATABASE Demo
  5. go
  6. use Demo
  7. go
  8. CREATE TABLE [dbo].[tab](
  9. [id] [int] NOT NULL identity(1,1) primary key,[birthDate] [datetime] NULL,[age] [int] NULL,[name] [varchar](50) NULL
  10. ) ON [PRIMARY]
  11. GO
  12. CREATE TABLE [dbo].[tab2](
  13. [id] [int] NOT NULL identity(1,[name] [varchar](50) NULL
  14. ) ON [PRIMARY]
  15. GO
  16. INSERT INTO [dbo].[tab] VALUES(GETDATE()+RAND(),99,'kk')
  17. GO 10
  18. INSERT INTO [dbo].[tab2] VALUES(GETDATE()+RAND(),'kk')
  19. GO 10
  20.  
  21.  
  22. -- 关闭数据库 'trunc. log on chkpt'
  23. use master
  24. go
  25. EXEC sp_dboption 'Demo','trunc. log on chkpt','false'
  26. go
  27.  
  28. -- 数据库须为完整回复FULL)模式
  29. use master
  30. go
  31. alter database Demo set recovery full
  32. go
  33.  
  34. -- 创建数据库账号
  35. USE [master]
  36. GO
  37. CREATE LOGIN [ogguser] WITH PASSWORD=N'oggpsw',DEFAULT_DATABASE=[master],CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF
  38. GO
  39. EXEC master..sp_addsrvrolemember @loginame = N'ogguser',@rolename = N'sysadmin'
  40. GO
  41.  
  42. -- 创建ODBC 数据源 (开始-管理工具-数据源odbc
  43. /*
  44. 数据源名称:Demo_ODBC
  45. 数据库账号:ogguser
  46. 数据库密码:oggpsw
  47. */
  48.  
  49. -- 查看数据库或表是否启用cdc (不需要启动,配置完成自动启动)
  50. SELECT name,is_cdc_enabled FROM sys.databases WHERE is_cdc_enabled = 1
  51. SELECT name,is_tracked_by_cdc FROM Demo.sys.tables WHERE is_tracked_by_cdc = 1
  52. GO
  53.  
  54. -- 首次备份数据库(配置完成前不要截断日志)
  55. BACKUP DATABASE [Demo] TO DISK= N'D:\MSsql\Demo.bak' WITH CHECKSUM,COMPRESSION
  56. GO

/*####################################################################

## ORACLE 目标端配置

#####################################################################*/

  1. -- 查看是否归档
  2. sql> archive log list;
  3.  
  4. 数据库日志模式 非存档模式
  5. 自动存档 禁用
  6. 存档终点 USE_DB_RECOVERY_FILE_DEST
  7. 最早的联机日志序列 8
  8. 当前日志序列 10
  9.  
  10. -- 设置归档模式
  11. sql> shutdown immediate;
  12. sql> startup mount;
  13. sql> alter database archivelog;
  14. sql> alter database open;
  15.  
  16. -- 查看日志附加属性
  17. sql> select supplemental_log_data_min,force_logging from v$database;
  18.  
  19. -- 设置日志附加属性
  20. sql> alter database add supplemental log data;
  21. sql> alter database force logging;
  22. sql> alter system switch logfile;
  23.  
  24. -- 启用 goldengate
  25. sql> alter system set enable_goldengate_replication = true scope=both;
  26.  
  27. -- 启用账号 scott (本测试以 scott 为例,真实环境另建!)
  28. sql> alter user scott identified by tiger account unlock;
  29. sql> grant connect,resource to scott;
  30. sql> grant select any dictionary,select any table to scott;
  31. sql> grant execute on utl_file to scott;
  32. sql> grant execute on dbms_streams to scott;
  33. sql> grant execute on dbms_streams_adm to scott;
  34.  
  35.  
  36. -- 创建目标表
  37. sql> conn scott/tiger
  38. CREATE TABLE scott.tab(
  39. id number NOT NULL,birthDate Date,age number,name varchar2(50),constraint tab_pk primary key(id));
  40.  
  41. CREATE TABLE scott.tab2(
  42. id number NOT NULL,constraint tab2_pk primary key(id));

/*####################################################################

## sql Server 源端及 oracle 目标端配置(都为windows系统)

#####################################################################*/

  1. -- 源端安装 GoldenGate: 解压 ggs_121210_Windows_x64_MSsql_64bit.zip,更名并移动到d盘(D:\ggs)
  2. -- 目标端安装 GoldenGate: 解压 121210_ggs_Windows_x64_shiphome.zip 安装到d盘(D:\ggs)
  3. -- 本测试中,源端和目标端的 ggs 位置相同,所以以下配置注意区别.
  4.  
  5.  
  6. -- 创建相关目录
  7. D:\ggs> GGSCI
  8. GGSCI (MSsql)> CREATE SUBDIRS
  9. /*执行结果:
  10. Parameter files D:\ggs\dirprm: created
  11. Report files D:\ggs\dirrpt: created
  12. Checkpoint files D:\ggs\dirchk: created
  13. Process status files D:\ggs\dirpcs: created
  14. sql script files D:\ggs\dirsql: created
  15. Database definitions files D:\ggs\dirdef: created
  16. Extract data files D:\ggs\dirdat: created
  17. Temporary files D:\ggs\dirtmp: created
  18. Credential store files D:\ggs\dircrd: created
  19. Masterkey wallet files D:\ggs\dirwlt: created
  20. Dump files D:\ggs\dirdmp: created
  21. */
  22.  
  23.  
  24. -- Manager 进程添加 Windows 服务(名称为: GGSMGR)
  25. D:\ggs> INSTALL ADDSERVICE
  26. /*执行结果:
  27. Service 'GGSMGR' created.
  28. Install program terminated normally.
  29. */
  30.  
  31.  
  32. -- 配置 Manager 参数文件内容如下)
  33. GGSCI (MSsql)> EDIT PARAM mgr
  34.  
  35. PORT 7809
  36. DYNAMICPORTLIST 7840-7850
  37. AUTORESTART ER *,WAITMINUTES 5,RETRIES 5
  38.  
  39.  
  40. -- 启动 GGSMGR 服务 (删除服务: sc delete GGSMGR)
  41. GGSCI (MSsql)> START MGR
  42. /*执行结果:
  43. Starting Manager as service ('GGSMGR')...
  44. Service started.
  45. */
  46.  
  47. -- 查看进程
  48. GGSCI (MSsql)> INFO ALL
  49. GGSCI (MSsql)> INFO MGR

注:
参数文件都存储在 dirprm 文件夹中; 错误信息存储在 dirrpt 文件夹中;
从安装 GoldenGate 到 启动 GGSMGR 服务,源端和目标端都一样配置(都为windows系统).

/*####################################################################

## sql Server 源端配置

#####################################################################*/

  1. -- 从事务日志识别表信息
  2. GGSCI(MSsql)> dblogin sourcedb Demo_ODBC userid ogguser password oggpsw
  3. GGSCI(MSsql)> LIST TABLES dbo.*
  4. GGSCI(MSsql)> ADD TRANDATA dbo.tab
  5. GGSCI(MSsql)> ADD TRANDATA dbo.tab2
  6.  
  7.  
  8. -- 配置定义文件内容如下)
  9. GGSCI(MSsql)> edit params defgen
  10.  
  11. sourcedb Demo_ODBC userid ogguser password oggpsw
  12. defsfile D:\ggs\dirdef\Demo_tabless.def
  13. table dbo.tab;
  14. table dbo.tab2;
  15.  
  16.  
  17. -- 生成表定义文件 D:\ggs\dirdef\Demo_tabless.def
  18. GGSCI(MSsql)> exit
  19. D:\ggs> defgen paramfile D:\ggs\dirprm\defgen.prm
  20.  
  21. /*
  22. 生成文件 D:\ggs\dirdef\Demo_tabless.def 复制到目标OGG目录 D:\ggs\dirdef
  23. Demo_tabless.def 文件内容如下:
  24.  
  25. *+- Defgen version 4.0,Encoding GBK
  26. *
  27. * Definitions created/modified 2016-12-01 01:14
  28. *
  29. * Field descriptions for each column entry:
  30. *
  31. * 1 Name
  32. * 2 Data Type
  33. * 3 External Length
  34. * 4 Fetch Offset
  35. * 5 Scale
  36. * 6 Level
  37. * 7 Null
  38. * 8 Bump if Odd
  39. * 9 Internal Length
  40. * 10 Binary Length
  41. * 11 Table Length
  42. * 12 Most Significant DT
  43. * 13 Least Significant DT
  44. * 14 High Precision
  45. * 15 Low Precision
  46. * 16 Elementary Item
  47. * 17 Occurs
  48. * 18 Key Column
  49. * 19 Sub Data Type
  50. * 20 Native Data Type
  51. * 21 Character Set
  52. * 22 Character Length
  53. * 23 LOB Type
  54. * 24 Partial Type
  55. *
  56. Database type: MSsql
  57. Character set ID: windows-936
  58. National character set ID: UTF-16
  59. Locale: zh_CN
  60. Case sensitivity: 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00
  61. TimeZone: Asia/Shanghai
  62. *
  63. Definition for table dbo.tab
  64. Record length: 109
  65. Syskey: 0
  66. Columns: 4
  67. id 134 23 0 0 0 1 0 8 8 8 0 0 0 0 1 0 1 0 4 -1 0 0 0
  68. birthDate 192 29 11 3 0 1 0 29 29 29 0 6 0 0 1 0 0 0 11 -1 0 0 0
  69. age 134 23 43 0 0 1 0 8 8 8 0 0 0 0 1 0 0 0 4 -1 0 0 0
  70. name 64 50 54 0 0 1 0 50 50 0 0 0 0 0 1 0 0 0 12 -1 0 0 0
  71. End of definition
  72. *
  73. Definition for table dbo.tab2
  74. Record length: 109
  75. Syskey: 0
  76. Columns: 4
  77. id 134 23 0 0 0 1 0 8 8 8 0 0 0 0 1 0 1 0 4 -1 0 0 0
  78. birthDate 192 29 11 3 0 1 0 29 29 29 0 6 0 0 1 0 0 0 11 -1 0 0 0
  79. age 134 23 43 0 0 1 0 8 8 8 0 0 0 0 1 0 0 0 4 -1 0 0 0
  80. name 64 50 54 0 0 1 0 50 50 0 0 0 0 0 1 0 0 0 12 -1 0 0 0
  81. End of definition
  82.  
  83. */
  84.  
  85.  
  86. -- 配置 Extract 文件内容如下)
  87. GGSCI(MSsql)> EDIT PARAMS EXTA
  88.  
  89. EXTRACT EXTA
  90. SETENV ( NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK" )
  91. sourcedb Demo_ODBC userid ogguser password oggpsw
  92. TRANlogoPTIONS MANAGESECONDARYTRUNCATIONPOINT
  93. EXTTRAIL D:\ggs\dirdat\pr
  94. EOFDELAYCSECS 10
  95. table dbo.tab;
  96. table dbo.tab2;
  97.  
  98.  
  99. -- 添加 Extract 进程
  100. GGSCI(MSsql)> ADD EXTRACT EXTA,TRANLOG,BEGIN NOW
  101. GGSCI(MSsql)> ADD RMTTRAIL D:\ggs\dirdat\pr,EXTRACT EXTA
  102.  
  103.  
  104.  
  105. -- 配置 pump 文件(配置 REPLICAT 文件
  106. GGSCI(MSsql)> EDIT PARAMS PUMPA
  107.  
  108. extract PUMPA
  109. SETENV ( NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK" )
  110. sourcedb Demo_ODBC userid ogguser,password oggpsw
  111. rmthost 192.168.1.89,mgrport 7809,compress
  112. rmttrail D:\ggs\dirdat\pr
  113. EOFDELAYCSECS 10
  114. table dbo.tab;
  115. table dbo.tab2;
  116.  
  117.  
  118. -- 添加 pump 进程
  119. GGSCI(MSsql)> ADD EXTRACT PUMPA,EXTTRAILSOURCE D:\ggs\dirdat\pr,EXTRACT PUMPA
  120. -- 查看所有进程 或某个进程
  121. GGSCI(MSsql)> INFO ALL
  122. GGSCI(MSsql)> INFO MGR
  123.  
  124.  
  125. -- 启动进程
  126. GGSCI(MSsql)> START EXTA
  127. GGSCI(MSsql)> START PUMPA
  128.  
  129.  
  130. -- 查看数据库或表是否启用cdc
  131. SELECT name,is_tracked_by_cdc FROM Demo.sys.tables WHERE is_tracked_by_cdc = 1
  132. GO

/*####################################################################

## sql Server 初始化数据

#####################################################################*/

  1. -- 源: 初始提取配置
  2. GGSCI(MSsql)> EDIT PARAMS INEXT
  3.  
  4. SOURCEISTABLE
  5. sourcedb Demo_ODBC userid ogguser,password oggpsw
  6. RMTHOST 192.168.1.89,MGRPORT 7809
  7. RMTFILE D:\ggs\dirdat\ex
  8. TABLE dbo.tab;
  9. TABLE dbo.tab2;
  10.  
  11. -- 目标: 初始加载配置
  12. GGSCI(MSsql)> EDIT PARAMS INLOAD
  13.  
  14. SPECIALRUN
  15. END RUNTIME
  16. USERID scott,PASSWORD tiger
  17. EXTFILE D:\ggs\dirdat\ex
  18. SOURCEDEFS D:\ggs\dirdef\Demo_tabless.def
  19. MAP dbo.tab,target scott.tab;
  20. MAP dbo.tab2,target scott.tab2;
  21.  
  22.  
  23. -- 源: 提取数据到目标文件
  24. D:\ggs> extract paramfile dirprm\inext.prm reportfile dirrpt\inext.rpt
  25.  
  26.  
  27. -- 目标: 加载数据到表
  28. D:\ggs> replicat paramfile dirprm/inload.prm

/*####################################################################

## ORACLE 目标端配置

#####################################################################*/

  1. -- 检查点用于存储 Extract REPLICAT 进程的当前读/写位置
  2. GGSCI(MSsql)> DBLOGIN USERID scott,PASSWORD tiger
  3. GGSCI(MSsql)> ADD CHECKPOINTTABLE scott.chkpt
  4.  
  5. -- 配置同步进程
  6. GGSCI(MSsql)> EDIT PARAM MSREP
  7.  
  8. REPLICAT MSREP
  9. SETENV ( NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK" )
  10. USERID scott,PASSWORD tiger
  11. SOURCEDEFS D:\ggs\dirdef\Demo_tabless.def
  12. HANDLECOLLISIONS
  13. ASSUMetaRGETDEFS
  14. MAP dbo.tab,target scott.tab2;
  15.  
  16.  
  17. -- 添加进程
  18. GGSCI(MSsql)> ADD REPLICAT MSREP,CHECKPOINTTABLE scott.chkpt,EXTTRAIL ./dirdat/pr
  19.  
  20.  
  21. -- 启用进程
  22. GGSCI(MSsql)> START REPLICAT MSREP
  23.  
  24. -- 查看进程
  25. GGSCI(MSsql)> INFO ALL
  26. GGSCI(MSsql)> INFO MSREP

配置完成!!测试同步正常!!~~

(注意:此配置没有设置同步 DDL ,当然也可设置)


附图一: sql server 源端 OGG 进程信息



附图二: oracle 目标端 OGG 进程信息



附图三: oracle 目标端scott 表信息 (chkpt 及 chkpt_lox 为检查点记录创建的表)



参考:

Oracle GoldenGate 12c (12.1.2)

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

猜你在找的Oracle相关文章