none
关于事务 RRS feed

  • 问题

  • 第十一章  事务

    1、 概念

    2、 分为:数据库事务、本地事务(重):(想知道这是什么以及transcat的程序代码和作用)、分布式事务的实现



    还请高手指教~~

    2009年7月31日 14:07

答案

  • 对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一 次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。
    http://hi.baidu.com/2009ajun
    2009年7月31日 22:02
  • (1) 一次要执行两或多条 SQL 语句时。
    (2) 一次要写入多条记录到单一个数据表时。
    (3) 一次要写入多条记录到两或多个数据表时。
    (4) 写入数据库时,希望锁住 (Lock) 某些表的某几条记录,这段时间希望别人无法读或写这些记录时 (如: ERP 或进销存系统的「物料、库存」剩馀数量)。
    (5) 一次要写入多个数据库,或写入不同服务器或不同网域机器的数据库时 (分布式事务)。
    (6) 两边的数据库,一次性提交时,两边的写入能够一致,不是全部成功就是全部失败 (如: 银行 ATM 的某两个帐户的金额增减,一人转帐给另一人)。
    (7) 其他。

    请参考许多 ADO.NET 书籍或文件。

    Wizard 编程网 - 博客园
    2009年8月1日 8:23
  • Hi,小姑娘
      我来补充一下,给你推荐你个资料:
    事务相关的基础知识差不多的,只是具体平台对事务支持有所不同,但是.net 平台上事务的支持本质上依然是利用微软早期的事物机制,比如分布式事务底层海是借助MS DTC来实现。COM+,Enterprise Service,.Net framework 2.0,WCF,Linq 都有支持事物特性。微软平台上的技术或者框架,基本对事务的实现都是兼容的,只是在本身框架上做了扩展。
        下面是事物相关基本概念:

    【1】事务概念 :

          什么是事务呢?其实这个事一个数据库系统中的一个概念。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

          例如,银行转帐:通常包括两个操作:

    (1)从一个帐号A扣款;

    (2)使另一个帐号B增款。

        这两个操作要么都执行,要么都不执行。在银行系统里,数据库系统执行相关的命令来完成两个操作。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保证数据一致性。连个账号的金额不会出现错误。保证转账操作的正确完成。

    【2】事务属性:

        事务也有自己的特性。这个大家都非常的熟悉。相信每个数据库相关的书籍都会介绍事务的特性ACID。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性:
      <1>原子性:
      事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。比如转账事务中的两个操作,要么全执行,要么全部执行。

      <2>一致性:
      事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,A账户里10000元,B账户0元,转账成功以后。A和B账户的总额保持不变。还是10000元。不会因为转账成功就增加了总额。

      <3>隔离性:
      由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。串行执行事务:在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。
    两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现隔离。
       <4>持久性:

        WCF 支持分布式事务,也就是说事务可以跨越服务边界、进程、机器、网络,在多个客户端和服务之间存在。而与此对应的事务数据信息传播和管理的协议不同。

    【3】事务协议:

        WCF 使用不同的事务协议来控制事务执行范围(execution scope)。 事务协议的出现时为了实现分布式环境事务传播。
    1).Lightweight: 仅能在同一程序域的上下文中传递事务,无法跨越程序域和服务边界。只能在服务内部或外部适用,同时它也是性能最好的一种协议。不过这种协议似乎没什么用处,因为 WCF Framework 中没有任何一种 Binding 支持此协议。
    2).OleTx: 允许事务跨越程序域、进程或机器边界。使用 RPC 调用,采取 Windows 专用二进制格式。无法跨越防火墙,也不能和其他异种平台进行整合。多用于 Windows 体系的 Intranet 环境。


    3).WS-Atomic(WSAT): 和 OleTx 相似,同样允许事务跨越程序域、进程或机器边界。和 OleTx 不同,WSAT 是一种工业标准,采取 HTTP 协议,TEXT 编码,可以跨越防火墙。虽然 WSAT 也能用于 Intranet,但多数时候它用于 Internet 环境。

        事务协议的配置只有在事务传播的情况下才有意义。WCF在预定义绑定中实现了标准的WSAtomicTransaction(WS-AT)协议和Microsoft专有的OleTx协议,这些协议可以用来在消息中加入事务状态的信息。WS绑定可以使用多个WSAT事务协调器,跨越Internet。但是如果只有一个事务协调器,OleTx协议将是默认的协议。我们可以编程或者配置文件设置事务协议。

    <bindings>
       
    <netTcpBinding>
         
    <binding name = "TransactionalNetTCP"
           transactionFlow 
    = "true"
           transactionProtocol 
    = "WSAtomicTransactionOctober2004"
           
    />
       
    </netTcpBinding>
    </bindings>

    【4】事务管理器:

         分布式事务的实现要依靠第三方事务管理器来实现。他负责管理个个事务的执行情况。最后根据全部的事务执行结果,决定提交或者回滚整个事务。这个也就是通常所说的两阶段提交协议。通常来收事务管理器有3种:LTM、KTM、DTC。他们应用的场合不同。由于事务有本地和分布式事务的区别。所以三种协议使用的场合也不相同。下面依次详细介绍:

    【4.1】LTM:轻量级事务管理器,它只能管理本地事务,单个应用程序域中的事务,它根据轻量级事务协议来管理和实现两阶段提交协议。 LTM是一种高效的资源管理器。它只能管理本地事务。在.NET2.0中经常使用。WCF事务编程中我们可以使用其来管理本地事务。

    【4.2】KTM:在Vista核心中的新组件,其目的是方便进行大量的错误恢复工作,而且过程几乎是透明的,而KTM之所以可以做到这一点,是因为它可以作为事务客户端接入的一个事务管理器进行工作。与LTM一样, KTM只能管理一个本地服务的事务。而且不支持事务传播给别的服务。

    【4.3】DTC:.NET Framework 依靠 MTS/COM+ 服务来支持自动事务。COM+ 使用 Microsoft Distributed Transaction Coordinator (DTC) 作为事务管理器和事务协调器在分布式环境中运行事务。分布式事务协调器 (DTC) 服务可协调更新两个或多个受事务保护的资源的事务, 如数据库、消息队列、文件系统等等。这些受事务保护的资源可能位于单个计算机上,或分布在许多网络计算机上。DTC可以使用OleTx或者WSAT协议。WCF可以借助DTC实现分布式事务机制。DTC可以创建事务、传播事务信息、收集全部事务的结果、通知事务管理器提交或者回滚事务。

    参考文章:

    1.WCF分布式开发必备知识(3):Enterpise Services

    2.Sql Server数据库事务介绍(一)---什么是事务:http://blog.csdn.net/tjvictor/archive/2009/04/14/4074326.aspx

    3.什么是事务:http://zhidao.baidu.com/question/95477134.html;

    4.WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

    5.《Programming WCF Services 》;

    6.[WCF Transaction] 1. 基本概念,http://hi.baidu.com/feiji123/blog/item/3390d2196779be7ddbb4bd4f.html


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月3日 3:41
    版主
  • http://msdn.microsoft.com/zh-cn/library/ms190612.aspx
    这是MSDN中关于事务的一些介绍~但它主要是介绍SQL Server中的事务~有一定局限性~最好是看课本~


    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年8月4日 5:02
    版主

全部回复

  • 哈,您好,
    事务最重要的概念:ACID。相信教课书会讲的更好!

    2009年7月31日 14:16
  • 小妹没带教科书……我家和学校相差十万八千里(5555555555~~)

    能具体解释一下上面的问题么?
    2009年7月31日 14:42
  • 这不是三言两语能说清楚的。
    好在能上网,不如用baidu google bing等搜索网站搜一下吧。
    2009年7月31日 14:52
  • 对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一 次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。
    http://hi.baidu.com/2009ajun
    2009年7月31日 22:02
  • (1) 一次要执行两或多条 SQL 语句时。
    (2) 一次要写入多条记录到单一个数据表时。
    (3) 一次要写入多条记录到两或多个数据表时。
    (4) 写入数据库时,希望锁住 (Lock) 某些表的某几条记录,这段时间希望别人无法读或写这些记录时 (如: ERP 或进销存系统的「物料、库存」剩馀数量)。
    (5) 一次要写入多个数据库,或写入不同服务器或不同网域机器的数据库时 (分布式事务)。
    (6) 两边的数据库,一次性提交时,两边的写入能够一致,不是全部成功就是全部失败 (如: 银行 ATM 的某两个帐户的金额增减,一人转帐给另一人)。
    (7) 其他。

    请参考许多 ADO.NET 书籍或文件。

    Wizard 编程网 - 博客园
    2009年8月1日 8:23
  • Hi,小姑娘
      我来补充一下,给你推荐你个资料:
    事务相关的基础知识差不多的,只是具体平台对事务支持有所不同,但是.net 平台上事务的支持本质上依然是利用微软早期的事物机制,比如分布式事务底层海是借助MS DTC来实现。COM+,Enterprise Service,.Net framework 2.0,WCF,Linq 都有支持事物特性。微软平台上的技术或者框架,基本对事务的实现都是兼容的,只是在本身框架上做了扩展。
        下面是事物相关基本概念:

    【1】事务概念 :

          什么是事务呢?其实这个事一个数据库系统中的一个概念。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

          例如,银行转帐:通常包括两个操作:

    (1)从一个帐号A扣款;

    (2)使另一个帐号B增款。

        这两个操作要么都执行,要么都不执行。在银行系统里,数据库系统执行相关的命令来完成两个操作。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保证数据一致性。连个账号的金额不会出现错误。保证转账操作的正确完成。

    【2】事务属性:

        事务也有自己的特性。这个大家都非常的熟悉。相信每个数据库相关的书籍都会介绍事务的特性ACID。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性:
      <1>原子性:
      事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。比如转账事务中的两个操作,要么全执行,要么全部执行。

      <2>一致性:
      事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,A账户里10000元,B账户0元,转账成功以后。A和B账户的总额保持不变。还是10000元。不会因为转账成功就增加了总额。

      <3>隔离性:
      由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。串行执行事务:在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。
    两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现隔离。
       <4>持久性:

        WCF 支持分布式事务,也就是说事务可以跨越服务边界、进程、机器、网络,在多个客户端和服务之间存在。而与此对应的事务数据信息传播和管理的协议不同。

    【3】事务协议:

        WCF 使用不同的事务协议来控制事务执行范围(execution scope)。 事务协议的出现时为了实现分布式环境事务传播。
    1).Lightweight: 仅能在同一程序域的上下文中传递事务,无法跨越程序域和服务边界。只能在服务内部或外部适用,同时它也是性能最好的一种协议。不过这种协议似乎没什么用处,因为 WCF Framework 中没有任何一种 Binding 支持此协议。
    2).OleTx: 允许事务跨越程序域、进程或机器边界。使用 RPC 调用,采取 Windows 专用二进制格式。无法跨越防火墙,也不能和其他异种平台进行整合。多用于 Windows 体系的 Intranet 环境。


    3).WS-Atomic(WSAT): 和 OleTx 相似,同样允许事务跨越程序域、进程或机器边界。和 OleTx 不同,WSAT 是一种工业标准,采取 HTTP 协议,TEXT 编码,可以跨越防火墙。虽然 WSAT 也能用于 Intranet,但多数时候它用于 Internet 环境。

        事务协议的配置只有在事务传播的情况下才有意义。WCF在预定义绑定中实现了标准的WSAtomicTransaction(WS-AT)协议和Microsoft专有的OleTx协议,这些协议可以用来在消息中加入事务状态的信息。WS绑定可以使用多个WSAT事务协调器,跨越Internet。但是如果只有一个事务协调器,OleTx协议将是默认的协议。我们可以编程或者配置文件设置事务协议。

    <bindings>
       
    <netTcpBinding>
         
    <binding name = "TransactionalNetTCP"
           transactionFlow 
    = "true"
           transactionProtocol 
    = "WSAtomicTransactionOctober2004"
           
    />
       
    </netTcpBinding>
    </bindings>

    【4】事务管理器:

         分布式事务的实现要依靠第三方事务管理器来实现。他负责管理个个事务的执行情况。最后根据全部的事务执行结果,决定提交或者回滚整个事务。这个也就是通常所说的两阶段提交协议。通常来收事务管理器有3种:LTM、KTM、DTC。他们应用的场合不同。由于事务有本地和分布式事务的区别。所以三种协议使用的场合也不相同。下面依次详细介绍:

    【4.1】LTM:轻量级事务管理器,它只能管理本地事务,单个应用程序域中的事务,它根据轻量级事务协议来管理和实现两阶段提交协议。 LTM是一种高效的资源管理器。它只能管理本地事务。在.NET2.0中经常使用。WCF事务编程中我们可以使用其来管理本地事务。

    【4.2】KTM:在Vista核心中的新组件,其目的是方便进行大量的错误恢复工作,而且过程几乎是透明的,而KTM之所以可以做到这一点,是因为它可以作为事务客户端接入的一个事务管理器进行工作。与LTM一样, KTM只能管理一个本地服务的事务。而且不支持事务传播给别的服务。

    【4.3】DTC:.NET Framework 依靠 MTS/COM+ 服务来支持自动事务。COM+ 使用 Microsoft Distributed Transaction Coordinator (DTC) 作为事务管理器和事务协调器在分布式环境中运行事务。分布式事务协调器 (DTC) 服务可协调更新两个或多个受事务保护的资源的事务, 如数据库、消息队列、文件系统等等。这些受事务保护的资源可能位于单个计算机上,或分布在许多网络计算机上。DTC可以使用OleTx或者WSAT协议。WCF可以借助DTC实现分布式事务机制。DTC可以创建事务、传播事务信息、收集全部事务的结果、通知事务管理器提交或者回滚事务。

    参考文章:

    1.WCF分布式开发必备知识(3):Enterpise Services

    2.Sql Server数据库事务介绍(一)---什么是事务:http://blog.csdn.net/tjvictor/archive/2009/04/14/4074326.aspx

    3.什么是事务:http://zhidao.baidu.com/question/95477134.html;

    4.WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

    5.《Programming WCF Services 》;

    6.[WCF Transaction] 1. 基本概念,http://hi.baidu.com/feiji123/blog/item/3390d2196779be7ddbb4bd4f.html


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月3日 3:41
    版主
  • http://msdn.microsoft.com/zh-cn/library/ms190612.aspx
    这是MSDN中关于事务的一些介绍~但它主要是介绍SQL Server中的事务~有一定局限性~最好是看课本~


    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年8月4日 5:02
    版主