搜索
首页数据库mysql教程TIBCO ESB实战系列:TIBCO数据库适配器双向数据同步解决方案

作者:任成钢 来源:TechTarget中国 原文:http://www.searchsoa.com.cn/showcontent_48908.htm 【TechTarget中国原创】 首先声明,我不是某个厂商的托儿,只是就自己目前从事的咨询工作经验,希望能为大家提供一种参考。下面就给大家介绍一下一个基于TIBCO

作者:任成钢    来源:TechTarget中国
原文:http://www.searchsoa.com.cn/showcontent_48908.htm

 

【TechTarget中国原创】首先声明,我不是某个厂商的托儿,只是就自己目前从事的咨询工作经验,希望能为大家提供一种参考。下面就给大家介绍一下一个基于TIBCO数据库适配器的双向数据同步解决方案。

  工作原理

  TIBCO数据库适配器(TIBCO Adapter for Active Database),简称ADB,是一款非常优秀的关系型数据库数据发布与订阅适配器产品,结合TIBCO的其他应用集成产品(比如TIBCO BusinessWorks、TIBCO EMS等),能够通过简单的配置,就能够实现同构或者异构数据库之间的数据同步应用。TIBCO ADB的工作原理如下:

  ADB数据发布:

TIBCO ESB实战系列:TIBCO数据库适配器双向数据同步解决方案

  ADB在源数据表的数据库中,根据源表的格式建立发布表,并在源表上建立触发器,监测源表的数据变化(增删改),并将变化的数据插入到发布表中,ADB Agent会定时查询发布表(表中有一个发布状态标志,未发布的数据,即新数据状态为N),并将新插入发布表的数据发布出去(数据发布后,发布状态变为C)。发布的数据将由ADB Agent转换成消息发送给订阅方(TIBCO BW或者ADB订阅服务)。

  ADB数据订阅:

 TIBCO ESB实战系列:TIBCO数据库适配器双向数据同步解决方案

  ADB在目的数据表的数据库中,根据目的表的格式建立异常表,ADB Agent接收到发布方(TIBCO BW或者ADB发布服务)发送的消息,将其转换为数据,并根据数据中的操作标识(增删改),直接写入目的表中。当出现数据操作异常时,比如主键重复,数据类型错误等,造成目的表更新失败,会将错误的数据记录到异常表中。

  在配置ADB发布和订阅过程中,建立的表和触发器都由ADB自动完成,并提供脚本,用户可以根据需要进行修改。

  双向数据同步

  在进行数据同步类应用的实施过程中,经常会遇到双向同步的问题,比如两个数据库,任意一个数据库中的数据发生变化,都需要将数据同步给另一个库。这种情况下如果不进行限制,可能会出现数据同步循环问题,两边的数据不断的更新,不断的触发新的数据发布。幸运的是ADB提供了循环监测功能(Loop Detection),防止这种循环更新的发生。循环监测的原理如下:

  ADB在源表中增加了一个的特定字段(ADB_SOURCE),触发器会监测这个字段,如果该字段是由ADB的订阅服务更新的,则触发器不会将更新的数据插入发布表;如果该字段在数据更新时没有更新,则此数据是应用更新的,触发器会将数据插入到发布表,由发布服务进行发布。如下所示:

以下是引用片段:
CREATE OR REPLACE TRIGGER TRI_P_FILE AFTER INSERT OR DELETE OR UPDATE ON TAB_FILE
FOR EACH ROW
DECLARE
 updating_key_fields EXCEPTION;
BEGIN
 IF :NEW.ADB_SOURCE = 'T' THEN return;
 END IF;

 IF INSERTING THEN
 INSERT INTO P_STD_FILE_BACK VALUES (
  :NEW.FILE_ID,
  :NEW.FILE_NAME,
……
END TAB_FILE;
/

  利用这个新增的字段,限制触发器对发布表的更新,有效的限制了数据的循环更新问题。

  新的挑战

  但是在最近的一次实施中,遇到了新的问题。一家大型集团,有很多相对独立的子部门(公司),集团总部推广了一套系统,这套系统是各个单位(包括集团总部和子部门)独立部署的,并要求各个单位之间实现数据的实时/准实时同步,数据的更新可能发生在任何一个单位,其他的单位都需要接收到更新的数据并写入自己的数据库,形成双向同步。这种场景非常适合使用应用集成产品,我们向客户推荐了TIBCO BusinessWorks、TIBCO ADB,并使用TIBCO EMS作为消息服务器。但是在处理数据双向同步问题上,客户提出了更高的要求,这套系统已经开发并在部分单位运行了多年,按照TIBCO ADB默认的在源表增加字段的方式来处理双向同步情况,目前的系统可能会出现问题,他们也不想对现有的系统进行修改,所以要求不能修改源表的表结构。

  解决方案

  为了解决这个问题,我们提出了如下的解决方案:

  客户使用的数据库为Oracle数据库,基于Oracle的一些特性,我们不再使用增加字段的方式进行循环监测,改成采用区分用户的方式。即ADB操作Oracle数据表采用与业务系统不同的数据库用户,比如业务系统使用的数据库用户为business,ADB使用tibco。
然后对ADB生成的触发器脚本进行修改,加入如下(红色字体)的判断:

以下是引用片段:
CREATE OR REPLACE TRIGGER TRI_P_FILE AFTER INSERT OR DELETE OR UPDATE ON TAB_FILE
FOR EACH ROW
DECLARE
 updating_key_fields EXCEPTION;
BEGIN
 IF USER = 'TIBCO' THEN RETURN;
 END IF;
 IF INSERTING THEN
 INSERT INTO P_STD_FILE_BACK VALUES (
  :NEW.FILE_ID,
  :NEW.FILE_NAME,
……
END TAB_FILE;
/

  由此判断如果更新数据的用户是tibco,则当前数据时由ADB订阅服务进行更新的,不需要插入发布表进行发布(因为所有ADB订阅服务的数据来源都是其他的ADB发布服务);如果是非tibco用户,则数据是由业务系统进行更新的,需要插入发布表进行发布。

  通过上述方法,即可以不必修改数据结构实现双向数据同步的中的循环监测,避免循环更新。

  使用此种解决方案,要注意如下几个问题:

  首先要为ADB使用的数据库用户赋予CONNECT和RESOURCE角色,并赋予CREATE ANY TRIGGER权限

  其次要为ADB使用的用户赋予业务表的操作权限,比如:

以下是引用片段:
  grant select, insert, update, delete on  TAB_FILE  to TIBCO;

  该操作由业务系统用户执行

  然后为了更方便的再业务表上建立触发器,要为业务表建立同义词,比如:

以下是引用片段:
  create synonym TAB_FILE  for BUSINESS. TAB_FILE;

  该操作由ADB操作用户执行

  最后使用ADB操作用户执行由ADB生成的发布表、异常表和触发器的脚本。

  至此,双向数据同步解决方案就此完成,完美的解决了客户提出的问题。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
将用户添加到MySQL:完整的教程将用户添加到MySQL:完整的教程May 12, 2025 am 12:14 AM

掌握添加MySQL用户的方法对于数据库管理员和开发者至关重要,因为它确保数据库的安全性和访问控制。1)使用CREATEUSER命令创建新用户,2)通过GRANT命令分配权限,3)使用FLUSHPRIVILEGES确保权限生效,4)定期审计和清理用户账户以维护性能和安全。

掌握mySQL字符串数据类型:varchar vs.文本与char掌握mySQL字符串数据类型:varchar vs.文本与charMay 12, 2025 am 12:12 AM

chosecharforfixed-lengthdata,varcharforvariable-lengthdata,andtextforlargetextfield.1)chariseffity forconsistent-lengthdatalikecodes.2)varcharsuitsvariable-lengthdatalikenames,ballancingflexibilitibility andperformance.3)

MySQL:字符串数据类型和索引:最佳实践MySQL:字符串数据类型和索引:最佳实践May 12, 2025 am 12:11 AM

在MySQL中处理字符串数据类型和索引的最佳实践包括:1)选择合适的字符串类型,如CHAR用于固定长度,VARCHAR用于可变长度,TEXT用于大文本;2)谨慎索引,避免过度索引,针对常用查询创建索引;3)使用前缀索引和全文索引优化长字符串搜索;4)定期监控和优化索引,保持索引小巧高效。通过这些方法,可以在读取和写入性能之间取得平衡,提升数据库效率。

mysql:如何远程添加用户mysql:如何远程添加用户May 12, 2025 am 12:10 AM

ToaddauserremotelytoMySQL,followthesesteps:1)ConnecttoMySQLasroot,2)Createanewuserwithremoteaccess,3)Grantnecessaryprivileges,and4)Flushprivileges.BecautiousofsecurityrisksbylimitingprivilegesandaccesstospecificIPs,ensuringstrongpasswords,andmonitori

MySQL字符串数据类型的最终指南:有效的数据存储MySQL字符串数据类型的最终指南:有效的数据存储May 12, 2025 am 12:05 AM

tostorestringsefliceflicyInmySql,ChooSetherightDataTypeBasedyOrneOrneEds:1)USEcharforFixed-LengthStstringStringStringSlikeCountryCodes.2)UseVarcharforvariable-lengtthslikenames.3)USETEXTCONTENT.3)

mysql blob vs.文本:为大对象选择正确的数据类型mysql blob vs.文本:为大对象选择正确的数据类型May 11, 2025 am 12:13 AM

选择MySQL的BLOB和TEXT数据类型时,BLOB适合存储二进制数据,TEXT适合存储文本数据。1)BLOB适用于图片、音频等二进制数据,2)TEXT适用于文章、评论等文本数据,选择时需考虑数据性质和性能优化。

MySQL:我应该将root用户用于产品吗?MySQL:我应该将root用户用于产品吗?May 11, 2025 am 12:11 AM

No,youshouldnotusetherootuserinMySQLforyourproduct.Instead,createspecificuserswithlimitedprivilegestoenhancesecurityandperformance:1)Createanewuserwithastrongpassword,2)Grantonlynecessarypermissionstothisuser,3)Regularlyreviewandupdateuserpermissions

MySQL字符串数据类型说明了:选择适合您数据的合适类型MySQL字符串数据类型说明了:选择适合您数据的合适类型May 11, 2025 am 12:10 AM

mySqlStringDatatatPessHouldBechoseBeadeDataCharacteristicsAndUsecases:1)USECHARFORFIXED LENGTHSTRINGSTRINGSLIKECOUNTRYCODES.2)USEDES.2)usevarcharforvariable-lengtthstringstringstringstringstringstringstringslikenames.3)usebinaryorvarrinaryorvarinarydatalbonydatalgebgeenfopical.4)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中