AttunityOracleCDC.pdf
如何使用CDC 对Oracle 数据进行导入
SSIS 介绍
我们知道,对于Oracle 里的数据,我们可以使用SSIS 来把数据导入到SQL Server 中,SSIS 开发相
当的简单。下面是一个开发的例子。
1. Oracle 数据库服务器服务器为 OSERVER.CONTOSO.COM,下面是TNSNAMES.ORA 配置文件:
2. 我们在另外一台服务器BI2012 上,安装SQL Server 2012 ,并安装Oracle 客户端以及
Runtime: 【注意,这里要装32 位的客户端以及runtime,因为开发环境Visual Studio 是
32 位应用】,实际应用可以使用64 位客户端/runtime 。
3. 在BI2012 这台服务器上,运行SQL Server Data Tools 工具,这个工具其实就是Visual Studio
开发环境。是SQL Server 2012 自带的工具。
4. 我们新建一个项目,取名为OracleSSIS,类型是Integration Services Project,如下图所示:
5. 随后,我们创建一个针对Oracle 的OLE DB Source :并且设定连接如下连接属性:
6. 点击OK,然后下拉,选择我们需要从Oracle 获取的表,这里,选择HR.EMPLOYEES 这张
表格。 【先确认Oracle 能成功连接】
7. 随后,建立一个OLEDB Destination,并把源和目的连接起来。
8. 在SQL Server 的数据库上,建立一个表,表名为EMP,类型如下:
9. 双击之前的OLEDB DESTINATION,设定目的为SQL Server:
10. 并选定目的表为EMP:
11. 并且设定好Oracle 表和SQL 表的列(Column)映射关系:
12. 一个很简单的SSIS 流程就定义好了。
13. 我们运行该流程,会显示107 行数据传送完毕。
14. 我们在SQL Server 端,进行查询,能发现这些数据已经完全导入:
15. 在真正的生产环境中,我们可以通过SQL Server Agent, 设定运行时间,在晚上的时候,运
行该流程。
增量传输
SSIS 运行速度很快。根据benchmark 的测试结果,半个小时能导入1T 数据。通常是在凌晨的时候
运行。不会对业务有造成影响。但是有些客户可能还是希望只获取增量的数据,而不是每次重新
导入数据。针对这种需求,
1. 我们可以使用SSIS 里的Incremental Loads,具体可参考以下文档:
/articles/Integration+Services+(SSIS)/76395/
实施IncrementalLoads 需要对SSIS 的流程进行一定的开发工作,需要检测到哪些行是增加的,哪
些行是变化的,哪些行是删除的。
2. 如果数据源是SQL Server 的话,我们可以使用日志传输模式。日志传输的原理如下。每隔
一段时间,从主服务器上,对数据库做日志备份,然后拷贝到副服务器上,并对数据库做
日志恢复操作。副服务器上的数据库会处于RESTORING/Standby 状态。
日志传输的设定非常简单,只需要点选设定即可,再需要提供一个共享目录,用来存放增
量日志备份。然后目的数据库定期从该共享目录获取增量日志备份,在目的数据库上做恢
复。
设定好以后,副数据库上,数据库会处于Standby/Read-Only 状态。数据库只读不能写。
随后,我们即可在这个副本数据库上,进行数据的读取工作。【注意,当副本数据库在做
日志恢复的时刻,数据库是不可读的。我们需要避免日志恢复点上,对副本数据库进行读
操作】
3. 针对Oracle 数据库,我们可以使用SQL Server 2012 自带的Attunity Oracle CDC
Attunity Oracle CDC 运行机制如下图所示:
a. 首先对这两个软件进行安装
b. 运行Chance Data Capture Service Configuration for Oracle by Attunity
c. 选择“Prepare SQL Server”,连接进入BI2012 数据库服务器,自动做准备工作。
d. 选择New Service,配置一个CDC 服务,我们命名为OracleCDC
e. 服务创建成功:
f. 运行Change Data Captur