Integration Services 学习(8):事务

 

  事务,在数据库开发与应用中,发挥了重要的作用,但在Integration Services 包开发过程中,我们还一直没有提到过这个概念,它是不是还是如此,能让各数据库兄弟和睦相处,团结一致,同进退、共存亡呢?
  没错,哪里有DB活动,哪里就有Transaction 参与,SSIS包也不例外。
  在Integration Services 包中,数据库事务有以下几方面的功能:
  (1)将几项任务的结果集收集到事务中,以确保数据一致的更新。
  (2)确保对多台数据库服务器进行一致的更新。
  (3)确保对不同种类数据库进行一致的更新,比如Ms Sql Server 、Oracle、MySql 等.
  (4)也可以在单个包中,执行几个相互独立的事务。
  ......
  看来Transaction 这东东,在SSIS包中,还功莫大焉。大家听起来,似乎是王婆卖瓜。下面我们来看一看,如何在SSIS包中启用Transaction ?
  Integration Services 中的事务是基于容器的,包括包、For循环、Foreach 循环、序列容器等,如果容器启用了事务,默认情况下,该容器的子容器以及容器的组件对象,都自动继承父级或者祖先级容器的事务。在这些容器中,都有一个共同的属性TransactionOption,以表明该容器是否支持事务。如图:

 

  Required:指示该容器启用一个事务,如果其父容器启用了事务,则自动联接该事务;相反,父容器没有启用事务,则该容器会启动自已的事务。

  Supported:指示容器不启动事务,但是如果父容器启动了事务,它会自动联接该事务;相反,父容器没有启动事务,它不会启动自已的事务。

  NotSupported:指示容器不启动事务,也不联接现有事务。也就是说即使父容器启动了事务,他不会联接该事务,也不会启动自已的事务。

  下面我们用一个实例来说明在Integration services 开发,如何启动事务?

  首先我们在数据库中建立一张表,通过设置各容器的不同属性,看看其中的数据会发生什么样的变化?  

  

 

  然后在Sql Server Business Intelligence Development Studio 中创建一个包,如图:

  包中有四个SQL执行,它们执行的SQL命令如下: 

 

  很明显,前三个SQL 任务会执行成功,第四个SQL任务会执行失败,各对象的TransactionOption 属性设置如下:

  包:TransactionOption =Required;4个SQL任务的TransactionOption =Supported。

  点击[Development],结果如下:

 

  我们回到DB中去看一看表中的结果,

 

  一条记录也没有,说明Transaction 起作用了,如果其它设置都不变,修改”任务AA”的属性TransactionOption =NotSupported,再次运行,就有一条记录了,如图:

 

  上面是以包为容器,容器中四个SQL任务,它们对事务的响应情况。

  下面,我们再看一看另一种情况:包中有两个序列容器,一个For 循环,四个SQL任务(执行的SQL命令不变),它们的关系如图所示: 

 

 

  通过测试,每一个对象 TransactionOption 值的不同的设置,其结果也炯异 

S-AS-BFor 容器AABBCCDD结果记录数结果记录
RequiredSupportedSupportedSupportedSupportedSupportedSupported0 
RequiredRequiredRequiredSupportedSupportedSupportedSupported0 
RequiredRequired

NotSupported

SupportedSupportedSupportedSupportedAA、BB
Required

NotSupported

RequiredSupportedSupportedSupportedSupported3AA、BB、CC
SupportedRequiredRequiredSupportedSupportedSupportedSupported2AA、BB

  最后,我们再看一看在包嵌套的情况下,事物又怎么样了呢?如图所示:

 

   对于包 A 和包 C,TransactionOption 设置为 Required。

  对于包 B 和包 D 以及任务执行包 B、执行包 D 和执行包 F,TransactionOption 设置为 Supported。 

  对于包 E 以及任务执行包 C 和执行包 E,TransactionOption 设置为 NotSupported。

  只有包 B、包 D 和包 F 可以从它们的父包继承事务。 

  包 B 和包 D 继承包 A 启动的事务。 

  包 F 继承包 C 启动的事务。 

  包 A 和包 C 控制它们自己的事务。 

  包 E 不使用事务。

   通过上面的分析,SSIS中的事务是非常灵活的,其控制的粒度可粗可细,可以多个包共享一个事务,也可以一包共存多个事物,这就为我们的开发,带来非常大的灵活性,只要我们善加应用,将会发挥重大的作用。

  最后有两点注意事项,特别提醒一下:

  1、Integration Services 包中启用事务,如果包中的数据流任务,跨越多个服务器,或者是不同类型的数据库,则每台服务器中的MSDTC 分布式事务服务必须开启,否则将会出错。对于安装在Linux 或者 Unix 服务器的数据库,没有MSDTC服务,将会发生什么情况,我还没测试过,如果哪位朋友有经历过,请不吝赐教,在下先谢了。

  2、说到事务,就离不开事务的隔离级别(IsolationLevel),SSIS对象中,也有这个属性,但是缺省值为Serializable, 这是一个要求比较高的隔离级别,如果使用不当,将会对系统性能产生比较大的影响。而在Sql Server 数据库中,缺省的隔离级别为:Read Commited,希望大家要注意。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Integration 是一个基于 Spring 框架的集成框架,它提供了一种简单、灵活、可扩展的方式来实现不同系统之间的通信和数据交换。它支持多种通信协议和数据格式,包括 HTTP、JMS、TCP、UDP、FTP、SMTP 等,同时也支持多种数据转换和处理方式,如 XML、JSON、CSV、JAXB、XSLT、Groovy 等。Spring Integration 的核心概念是消息,它将不同系统之间的通信和数据交换抽象为消息的发送和接收,通过消息通道和消息处理器来实现消息的传递和处理。Spring Integration学习曲线较为陡峭,但是它的功能非常强大,可以帮助我们快速构建复杂的集成应用。 ### 回答2: Spring Integration 是一个用于基于消息的应用程序的轻量级集成框架。它提供了一种简单,灵活且可扩展的方法来实现不同系统之间的通信和集成。Spring Integration 可以帮助开发人员将繁琐的集成逻辑抽象出来,从而简化应用程序的开发和维护。 Spring Integration 是基于 Spring 框架的,可以无缝地与 Spring 的其他组件(如 Spring Boot 和 Spring MVC)集成。它采用了面向对象的设计原则,以及基于事件驱动的编程模型。它提供了一系列的消息处理组件,包括通道、端点、消息转换器和消息适配器,以及用于构建流程和传输协议的各种支持。通过这些组件的组合和配置,开发人员可以轻松地构建复杂的消息传递和集成方案。 Spring Integration 提供了许多与消息相关的模块,包括消息通道,消息转换器和消息适配器等等。它还提供了内置的支持来处理常见的集成模式,如传输,路由,过滤和转换等。这使得开发人员可以快速地构建出具有高可用性、可靠性和可监控性的集成方案。 Spring Integration 还提供了许多与外部系统集成相关的模块,如与 JMS、AMQP、Web Services 等的集成。这些模块使得与传统和现代化系统之间的集成变得更加容易。 总的来说,Spring Integration 提供了一种简单而强大的方式来实现应用程序间的通信和集成。它具有灵活性、可扩展性和可维护性,并通过提供各种集成模式和支持来简化复杂的集成方案的开发。无论是构建传统的集成应用程序还是现代化的微服务架构,Spring Integration 都是一个不错的选择。 ### 回答3: Spring Integration 是一个用于构建企业级应用程序的开源集成框架。它提供了一种简单而灵活的方式,将不同应用程序和组件连接起来,以实现异步消息发送和接收,远程调用,事务管理等功能。 Spring Integration 的教程主要包括以下内容: 1. 环境配置:首先,需要配置好开发环境,包括安装 Java 和 Spring Framework,以及下载 Spring Integration 的相关依赖库。 2. 概念和架构:了解 Spring Integration 的基本概念和核心架构,如消息通道,消息适配器,消息处理器等。 3. 配置方式:学习如何使用 XML 配置文件或 Java 代码来定义 Spring Integration 的消息流程和组件之间的关系。 4. 消息通道:掌握不同类型的消息通道,如直接通道,队列通道和发布/订阅通道,并了解它们的特点和适用场景。 5. 消息处理器:学习如何编写消息处理器,包括转换器,过滤器,聚合器和路由器,以实现对消息的转换,过滤,聚合和路由等操作。 6. 消息适配器:掌握如何使用消息适配器与外部系统进行集成,如 JMS 适配器,邮件适配器和 Web 服务适配器等。 7. 消息传输:了解 Spring Integration 如何支持不同的消息传输协议和中间件,如 TCP/IP,RabbitMQ,Apache Kafka 等。 8. 测试和调试:学习如何编写测试用例,以验证集成流程的正确性,并掌握如何使用日志和调试工具快速定位和排查问题。 9. 实例和案例:通过实际的示例和案例,加深对 Spring Integration 的理解和应用能力。 通过学习 Spring Integration 教程,可以帮助开发人员更好地理解和掌握该框架的使用方法,并在实际项目中快速构建可靠和高效的集成应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值