概述

数据库与数据库之间的同步,是EAI(企业应用整合)非常普遍的需求,BizTalk作为企业ESB平台,以SOA的架构方式来实现异构系统之间的整合,今天我们就来介绍如何使用BizTalk的适配器来实现数据库与数据库之间的数据同步。

在本篇文章当中,我以SQL Server到SQL Server之间同步来举例,用到了BizTalk的WCF-SQL适配器。

在这里说明一下,若需要与其他数据库进行同步,如SQL Server到Oracle、Oracle到IBM DB2的实现方式大体相同,只是所选用的适配器与连接配置有少许不同而已。

简单步骤我就直接用文字来描述了,之前的很多文章贴过简单步骤的贴图,在这里只把关键步骤的截图贴出来,废话不多说,直接切入正题。

示例程序

场景介绍

场景非常简单,我们要实现的就是将源表中的3条数据通过BizTalk导入到目标表当中。

使用WCF-SQL获取源数据表中的信息

  • 在Visual Studio 2010中创建BizTalk解决方案,并命名为SQL_TO_SQL;
  • Add Generated Items选择Consume Adapter Service点击Add;
  • 选择sqlBinding并点击右边的Configure按钮;
  • Security选项卡中,选择SQL Server的安全认证方式,在这里我们用Username认证方式,填写用户名和密码;
  • URI Properties选项卡中配置ServerlocalhostInitialCatalog为数据库TestDBInboundIdTestID
    说明一下InboundId,在这里我们采用轮询的方式来获取SQL源数据表当中的数据,选择这种方式我们必须指定InboundId来确保命名空间是唯一的,这个InboundId不能与其他的项目中的InboundId重复。
  • Binding Properties选项卡中,配置InboundOperation Type选择TypedPollingPolledDataAvailable StatementSELECT COUNT(1) FROM Source_TablePollingStatementSELECT Source_ID,Source_Name,Source_Time FROM Source_Table;
    InboundOperationType – 属性有几种类型可选:Polling,TypedPolling,Notification。
    Polling是轮询方式,但是这种方式是不带架构的,TypedPolling也是轮询方式,这种方式可以带出架构。Notification是用于数据有变化时进行相关通知。
    如果需要轮询数据,又要能刷出数据架构,需要采用TypedPolling方式。
    PollingIntervalInSecond – 轮询间隔时间。
    PolledDataAvailableStatement – 执行轮询的条件,这里一般是个select语句,这条语句应该返回一个单个的结果集,只要这个结果集的第一行第一列必须有值(如果是空结果集会报错),应该是个大于等于0的整数值。如果这个值大于0则执行下面PollingStatement指定的SQL命令真正的开始轮询的操作。如果这个值等于0,则轮询语句不执行。
    PollingStatement – 轮询命令,可以是SQL语句,也可以是存储过程。

  • Select Contract type中选择Service (Inbound operations),并选择TypedPolling

  • 可以看到在项目中生成了2个文件,1个是根据前面设置的轮询命令生成的Schema,1个是可以导入到BizTalk的接收位置和端口的XML绑定文件;

使用WCF-SQL向目标数据表插入数据

  • Add Generated Items选择Consume Adapter Service点击Add;
  • 选择sqlBinding并点击右边的Configure按钮;
  • Security选项卡中,选择SQL Server的安全认证方式,在这里我们用Username认证方式,填写用户名和密码;
  • URI Properties选项卡中配置ServerlocalhostInitialCatalog为数据库TestDBInboundIdTestID
  • Binding Properties选项卡中我们不需要配置TypedPolling,应当将其恢复为初始状态;

  • 配置好之后选择Tables当中的Destination_Table表并添加Insert操作,在Filename Prefix处可为其设置命名前缀,这个地方不是必须填的,但是我们在这里将其设置为INSERTDES以保证文件命名更加整洁;

  • 配置完成后,可以看到在项目中生成了4个文件,3个是根据前面设置的Insert命令生成的Schema,1个是可以导入到BizTalk的接收位置和端口的XML绑定文件;
  • 对该解决方案进行编译。

创建并配置BizTalk业务流程

  • 添加BizTalk Orchestration文件并将其命名为Orchestration_SQLtoSQL
  • Orchestration View中右键Messages->New Message添加消息,将其命名为Msg_GetData,并设置Message TypeSQL_TO_SQL.TypedPolling_TestID.TypedPolling

  • 按照上述方法创建另一个消息,命名为Msg_SendData,将Message Type设置为SQL_TO_SQL.INSERTDESTableOperation_dbo_Destination_Table.Insert

  • 创建好接收消息和发送消息之后,按照如下图所示搭建业务流程并配置数据表之间的映射关系;

部署并配置BizTalk应用程序

  • 右键BizTalk解决方案对其进行部署,发布到BizTalk管理控制台当中,在控制台当中找到所发布的BizTalk的应用程序,右键点击Configure...
  • Host选择BizTalkServerApplication
  • 配置接收端口
  • 将接收端口命名为GetSQLPort,并新建接收位置,配置其接收位置为WCF-SQL适配器,接收管道选择XMLReceive
  • 在WCF-SQL右侧点击Configure...配置适配器属性,配置内容与在Visual Studio中需保持一致,ServerlocalhostInitialCatalogTestDBInboundIdTestID,最后生成的URI为mssql://localhost//TestDB?InboundId=TestID
  • Binding选项卡中的配置见Visual Studio中接收端口的配置;
  • Other选项卡中选择User account方式来配置登陆信息;
  • 配置发送端口
  • 将发送端口命名为SendSQLPort,选择WCF-SQL适配器,发送管道使用默认的PassThruTransmit,同样点击Configure...来配置WCF-SQL适配器;
  • 在这里要注意,发送端口不用配置InboundId这一项,生成的URI最终应为mssql://localhost//TestDB?才是正确的;
  • Binding选项卡中暂不做任何配置;
  • Credentials选项卡中配置数据库登录信息,并且该登录用户必须拥有目标数据表的写权限
  • 配置完成后点击OK并启动BizTalk应用程序,其运行结果如下图所示,至此我们已经成功地将源数据表中的数据导入到目标表当中了,这里我们设置的轮询时间间隔为30秒一次,可根据业务需求作出相应的配置,并且该Demo不仅仅局限于SQL到SQL之间的同步,若想与其他数据库同步,则在配置时选用其它数据库的适配器即可,如:WCF-OracleDB

转载于:https://www.cnblogs.com/hainange/archive/2011/07/15/6153594.html

通过BizTalk WCF适配器实现异构数据库/系统间的数据同步相关推荐

  1. Redis 缓存数据库使用 Redis-Shake 做数据同步

    目录 Redis 缓存数据库使用 Redis-Shake 做数据同步 Redis-shake 简介 Redis-Shake 同步的五种模式 基本原理 部署过程 同步模式 restore 模式 dump ...

  2. scada与MySQL连接_SCADA系统与实时数据库数据同步

    关键词:SCADA,实时数据库,同步工具 摘要:本文介绍了力控SCADA平台软件eForceCon如何与实时数据库通讯,将大量的实时数据库写入到实时数据库中,集中管理数据,方便数据检索与分析. 1 概 ...

  3. 银行应用系统间的数据交换

    在核心业务系统与外围系统之间批量交互数据是银行应用系统中最常见的任务之一,由于通常要受到多方面因素的制约,这是一个十分复杂而且耗费精力的工作.本文对其中的技术困难和应对策略进行了总结. 尽管目前银行正 ...

  4. 达梦数据库:mysql -dm数据同步dmhs工具搭建

    达梦技术社区: https://eco.dameng.com 注意 Dmhs对mysql的 支持:表的ddl 操作,注释,索引,数据同步,支持装载和增量同步: 对于其它对象如触发器,函数,存储过程,不 ...

  5. 美团外卖MySQL数据库_美团DB数据同步到数据仓库的架构与实践

    背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据( ...

  6. 大数据催生智慧园区_杭州经纬智慧园区如何实现各系统间信息数据集中关联、一站管控...

    随着全球物联网.移动互联网.云计算等新一轮信息技术迅速发展和深入应用,"智慧园区"建设已成为大势所趋.未来的智慧园区是基于地上地下一体化的地理信息技术,实现园区的全面透彻感知.泛在 ...

  7. python实现指定数据库指定表的数据同步(监听binlog)

    话不多说直接上代码,简单实现,具体功能请根据业务场景自行调整 from pymysqlreplication import BinLogStreamReader from pymysqlreplica ...

  8. 实时监控Mysql等数据库变化_进行数据同步_了解Debezium_--Debezium工作笔记001

    1. Debezium是一个开源项目 2.为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台 3.安装并且配置Debezium去监控你的数据库,应用就可以消 ...

  9. Linux系统间文件双向同步搭建Unison版

    一.Unison简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件 ...

最新文章

  1. 一图带你入门Linux 存储I/O栈
  2. STM32的USB相关资料(转载)
  3. MySQL优化INSERT的性能
  4. Java中length,length(),size()的区别
  5. 一步步编写操作系统 65 标准调用约定stdcall 汇编实战
  6. php查百度收录,php检查页面是否被百度收录,可整合到后台
  7. slope one算法matlab,求助我这个寻峰算法该怎么提高灵敏度
  8. 高通driver模块编译方法
  9. Linux动态库soname的使用(转载)
  10. 转行做调度,你准备好了吗
  11. Abaqus之地应力平衡分析步 Geostatic step
  12. VTK系列57_VTK对几何体网格细化(多分辨率处理)
  13. Establishing SSL
  14. 服务器里面增加单页网站,如何设计完美的单页网站
  15. rimraf node_modules 删除报错 rimraf : 无法加载文件
  16. Arduino - 继电器
  17. 10.3_word2vec-pytorch
  18. 通过python smtplib库添加右抄送和密送人
  19. cad标注桩号lisp_CAD插件标桩号的AutoLISP程序语言求解释并译成中文,谢谢
  20. 什么叫VI、及VI的设计规范

热门文章

  1. osx+配置+php扩展,Mac系统升级到10.9(mavericks)时安装php扩展问题解决
  2. java 类编译_Java类编译、加载、和执行机制
  3. jinja2模板注入_Flask jinja2 模板注入思路总结
  4. artcore html5,值得收藏的25款免费响应式网页模板_CSS_网页制作
  5. 一个CXF集成SPRING的WEBSERVICE完整实例
  6. js中比较到期时间和当前时间
  7. Python学习笔记:爬取网页图片
  8. 【BZOJ1236】KPSUM,记数类问题(乱搞)
  9. 2017.9.19 禁忌 失败总结
  10. java 形参 实参_java 形参是父类实参是子类的问题