在分布式应用程序中,不可避免地会经常使用到事务控制.事务有一个开头与一个结尾,它们指定了事务的边界,事务在其边界之内可以跨越进程与计算机.事务边界内的所有资源都参与同一个事务.要维护事务边界内资源间的一致性,事务必须具备 acid 属性,即原子性.一致性.隔离性与持续性.
本地事务与分布式事务 【程序编程相关:权限组件所缺的文件】
【推荐阅读:成为程序员要走的路{转}】
本地事务是其范围为单个可识别事务的数据资源的事务(例如,microsoft sql server 数据库或 msmq 消息队列).例如,当单个数据库系统拥有事务中涉及的所有数据时,就可以遵循 acid 规则.在 sql server 的情况下,由内部事务管理器来实现事务的提交与回滚操作. 【扩展信息:读书笔记之 C++ Primer(1)】
--------------------
分布式事务可以跨越不同种类的可识别事务的数据资源,并且可以包括多种操作(例如,从 sql 数据库检索数据.从 message queue server 读取消息以及向其他数据库进行写入).通过利用跨若干个数据资源来协调提交与中止操作以及恢复的软件,可以简化分布式事务的编程.microsoft distributed transaction coordinator (dtc) 就是一种这样的技术.它采用一个二阶段的提交协议,该协议可确保事务结果在事务中涉及的所有数据资源之间保持一致.dtc 只支持已实现了用于事务管理的兼容接口的应用程序.这些应用程序被称为资源管理器(有关此主题的详细信息,请参见 .net framework developer´s guide 中的 distributed transactions <" target=_blank>http://msdn.microsoft.com/library/en-us/cpguide/html/cpcondistributedtransactions.asp>; ),目前存在许多这样的应用程序,包括 msmq.microsoft sql server.oracle.sybase 等等.
数据库事务
-------------
如果调用一个在 begin transaction 与 commit/rollback transaction 语句中封装了所需操作的存储过程,您就可以在到数据库服务器的单个往返行程中运行事务,从而实现最佳性能.数据库事务还支持嵌套事务,这意味着您可以从一个活动事务中启动一个新事务.
在下面的代码片断中,begin transaction 语句开始了一个新事务.可以通过使用 commit transaction 语句将更改提交到数据库来结束事务,或者,在发生任何错误的情况下,通过使用 rollback transaction 语句将所有更改撤消来结束事务:
create procedure proc1
…
as
... 下一页