事务,在数据库开发与应用中,发挥了重要的作用,但在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 开发,如何启动事务?

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

CREATE TABLE [dbo].[Test1](

    [ID] [smallint] NULL,
    [str] [varchar](50) NULL
) ON [PRIMARY]

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

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

 
INSERT INTO [Test1]([ID],[str])
SELECT              1,'AA'
INSERT INTO [Test1]([ID],[str])
SELECT              2,'BB'
INSERT INTO [Test1]([ID],[str])
SELECT              3,'CC'
INSERT INTO [Test1]([ID],[str])
SELECT              'DD','DD'  ――制造一个错误.
 

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

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

  点击[Development],结果如下:

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

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

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

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

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

S-A S-B For 容器 AA BB CC DD 结果记录数 结果记录
Required Supported Supported Supported Supported Supported Supported 0  
Required Required Required Supported Supported Supported Supported 0  
Required Required

NotSupported

Supported Supported Supported Supported AA、BB
Required

NotSupported

Required Supported Supported Supported Supported 3 AA、BB、CC
Supported Required Required Supported Supported Supported Supported 2 AA、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,希望大家要注意。

/***********************************************************************************************
 *【Author】:游子吟
 *【Date】:2013年07月02日
 *【URL】:http://www.cnblogs.com/invinboy/archive/2010/02/05/1662989.html
 *【Notice】:
 *1、本文为原创技术文章,首发博客园个人站点。
 *2、转载和引用请注明作者及出处。
 *3、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
 *4、本声明为文章一部分,转载和引用必须包括在原文中。
 ***********************************************************************************************/

SSIS 学习(8):事务【转】的更多相关文章

  1. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  2. SSIS 学习(3):数据流任务(下)【转】

    前一篇文章SSIS 学习(2):数据流任务(上), 介绍了如何创建一个简单的ETL包,如何通过一个简单的数据流任务,将一个文本文件的数据导入到数据库中去.这些数据都保持了它原有的本色,一个字符不 多, ...

  3. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  4. SSIS 学习之旅 序章 和 简介

    SSIS 学习之旅目录: 第一章: SSIS 学习之旅 第一个SSIS 示例(一) 第二章: SSIS 学习之旅 第一个SSIS 示例(二) 第三章: SSIS 学习之旅 数据同步 第四章: SSIS ...

  5. SSIS 学习之旅 FTP访问类

    这章把脚本任务访问FTP的方法 全部给大家. 控件的使用大家如果有不懂得可以看下我之前的文章.第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上) 第二章:SSIS 学习之旅 第一个SSIS ...

  6. SSIS 学习之旅 FTP文件传输-脚本任务

    这一章主要讲解一下用脚本怎么把CSV文件抛送到FTP服务器上 设计:   通过Demon库的Users表数据生成CSV文件.   生成后的CSV文件抛送到FTP指定目录下. 控件的使用这里就不做详细讲 ...

  7. SSIS 学习之旅 FTP文件传输-FTP任务

    这一章主要讲解一下FTP控件. 设计:   通过Demon库的Users表数据生成CSV文件.   生成后的CSV文件抛送到FTP指定目录下. 其他控件的使用这里就不做详细讲解了.大家如果有不懂得可以 ...

  8. SSIS 学习之旅 数据同步

    这一章 别人也有写过但是我觉得还是写写比较好.数据同步其实就是想仿照 数据库的发布订阅功能 第一章:SSIS 学习之旅 第一个SSIS 示例(一)(上) 第二章:SSIS 学习之旅 第一个SSIS 示 ...

  9. MySQL学习——管理事务

    MySQL学习——管理事务 摘要:本文主要学习了使用DCL语句管理事务的操作. 了解事务 什么是事务 事务是一组逻辑处理单位,可以是执行一条SQL语句,也可以是执行几个SQL语句. 事务用来保证数据由 ...

随机推荐

  1. GCC4.8对new和delete的参数匹配新要求

    一段通信协议的代码,早年在GCC 4.4.VS2013下编译都挺好的,移植到GCC 4.8 ,为C++ 11做准备,在编译的时候发现问题 源代码省略后的版本如下: class Zerg_App_Fra ...

  2. HDU 5752 Sqrt Bo (数论)

    Sqrt Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5752 Description Let's define the function f ...

  3. HDU 2045 不容易系列之(3)—— LELE的RPG难题 (递推)

    题意:略. 析:首先是假设前n-2个已经放好了,那么放第 n 个时,先考虑一下第 n-1 放的是什么,那么有两种情况. 如果n-1放的是和第1个一样的,那么第 n 个就可以在n-2的基础上放2个,也就 ...

  4. type=INNODB和engine=INNODB的区别

    我在网站下载了一份源码,学习中, 发现type=INNODB,这个数据库引擎老实出错,,后来才一查资料才是: 在MYSQL5.5及以后版本中type=InnoDB 由ENGINE=InnoDB 代替. ...

  5. iOS-default.png启动图片

    我在xcode5下写的代码,我下载了iOS6的模拟器,我用iOS6和iOS7的模拟器切换运行,有的时候可以运行有的时候不可以运行,报错: 2013-11-17 16:49:04.049 sim[474 ...

  6. CentOS服务器配置发送邮件服务

    CentOS服务器配置发送邮件服务 lsb_release -a 查看linux系统版本 在CentOS6以上版本自带mailx版本12.4 rpm -qa | grep mailx 查看系统自带的m ...

  7. ObjC-观察者模式

    观察者模式是设计模式的一种,又称为发布者/订阅者模式,其定义了一种一对多的关系,多个观察者可以监听一个对象.当该对象的状态发生改变时,会通知所有的观察者,观察者会自己进行更新. 观察者模式能够将观察者 ...

  8. php 处理高并发的思路

    1.nginx 服务器,提高网站服务器并发性能 2.控制大文件的下载,减少CPU的消耗. 3.对于sql查询做缓存. 4.静态页面文件缓存. 5.CND缓存静态文件, 6.反向代理到多个服务器,用来分 ...

  9. Keil C51基本数据类型

  10. Middleware课程01-概述

    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程序或独立系统的软件.相 ...