Transact-SQL 分布式事务

在 Transact-SQL 中启动的分布式事务的结构相对比较简单:

  1. Transact-SQL 脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。
  2. 执行该语句的 SQL Server 数据库引擎 实例将成为事务中的主控服务器。
  3. 然后,脚本或应用程序要么对链接服务器执行分布式查询,要么对远程服务器执行远程存储过程。
  4. 当执行了分布式查询或远程过程调用后,主控服务器将自动调用 Microsoft 分布式事务处理协调器 (MS DTC) 来登记分布式事务中的链接服务器和远程服务器。
  5. 当脚本或应用程序发出 COMMIT 或 ROLLBACK 语句时,主控 SQL Server 实例将调用 MS DTC 来管理两阶段提交过程,或者通知链接服务器和远程服务器回滚它们的事务。

必需的 Transact-SQL 语句

用于控制分布式事务的 Transact-SQL 语句很少,因为多数工作都由 SQL Server 数据库引擎 和 MS DTC 在内部完成。在 Transact-SQL 脚本或应用程序中必需的 Transact-SQL 语句只是那些执行以下操作所需的语句:

  • 启动分布式事务。
  • 对链接服务器执行分布式查询,或对远程服务器执行远程过程调用。
  • 调用标准的 Transact-SQL COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION 或 ROLLBACK WORK 语句来完成事务。
    对于任一 Transact-SQL 分布式事务,用于处理 Transact-SQL 脚本或连接的数据库引擎 实例将自动调用 MS DTC 来协调事务的提交或回滚。

启动分布式事务

可以通过以下方式在 Transact-SQL 中启动分布式事务:

  • 使用 BEGIN DISTRIBUTED TRANSACTION 语句启动显式分布式事务。
    还可以对链接服务器执行分布式查询。所连接到的数据库引擎 实例将调用 MS DTC,以便用链接服务器来管理分布式事务。您还可以将数据库引擎 远程实例上的远程存储过程作为分布式事务的一部分来调用。
  • 当处理本地事务时,可执行分布式查询。
    如果 OLE DB 数据源支持 ITransactionJoin 接口,则即使查询是只读查询,该事务也会被提升为分布式事务。如果该数据源不支持 ItransactionJoin,则只允许只读语句。
  • 如果已经执行了 SET REMOTE_PROC_TRANSACTIONS ON,而且本地事务调用了另一个数据库引擎 实例上的远程存储过程,则该本地事务将被提升为分布式事务。
    数据库引擎 使用 MS DTC 与远程服务器协调事务。如果将 REMOTE_PROC_TRANSACTIONS 设置为 OFF,则对远程存储过程的调用将在本地事务的作用域之外执行。如果回滚本地事务,将不回滚由远程过程所完成的工作。由远程存储过程所做的工作将在该过程完成时提交,而不是在提交本地事务时提交。

REMOTE_PROC_TRANSACTIONS 选项是一个兼容性选项,该选项只影响对使用 sp_addserver 定义的远程服务器进行的远程存储过程调用。该选项不适用于对使用 sp_addlinkedserver 定义的链接服务器执行存储过程的分布式查询。有关分布式查询的详细信息,请参阅分布式查询

请参阅

其他资源

BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL)
ROLLBACK WORK (Transact-SQL)
COMMIT WORK (Transact-SQL)
SET REMOTE_PROC_TRANSACTIONS (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助