什么是SQL Server 分布式事务以及包含了什么?


  本文标签:SQL Server 分布式事务

  以下的文章主要介绍的是SQL Server 分布式事务的概念,以及对SQL Server 分布式事务所包括的项目描述,我们大家都知道SQL Server 数据库的分布式事务主要是涉及来自两个或多个源的资源的事务  。

  Microsoft® SQL Server™ 2000 支持分布式事务,使用户得以创建事务来更新多个 SQL Server 数据库和其它数据源  。

  分布式事务包括:

  资源管理器

  控制分布式事务所涉及的每个资源的软件称为资源管理器  。SQL Server 分布式事务由各个资源管理器内的本地事务组成  。每个资源管理器必须能够与分布式事务内的所有其它资源管理器相协调,以提交或回滚自己的本地事务  。SQL Server 可以作为分布式事务内的资源管理器工作,并遵从用于分布式事务处理的 X/Open XA 规范  。

  事务管理器

  提交或回滚分布式事务由称为事务管理器的软件组件控制  。事务管理器与每个资源管理器相协调,确保一起提交或回滚所有组成分布式事务的本地事务  。Microsoft 分布式事务处理协调器 (MS DTC) 服务如事务管理器一样工作  。MS DTC 遵从用于分布式事务处理的 X/Open XA 规范  。

  两阶段提交 (2PC)

  需要进行特殊的提交处理,以防止在管理跨越多个资源管理器的事务时出现问题  。当刷新日志缓冲区使其可用时,提交大事务可能需要相对较长的时间  。提交进程本身还可能遇到错误,需要强行回滚  。

  如果事务管理器只是请求每个资源管理器提交,则可能从一些资源管理器返回成功状态,然后从某个资源管理器得到错误信息  。这会导致冲突,因为所有SQL Server 分布式事务都应回滚,而部分事务已提交  。两阶段提交通过将提交分成两相可以解决此问题:

  准备

  事务管理器给每个资源管理器发送一个准备提交的请求  。然后,每个资源管理器执行完成提交进程所需的所有大量占用资源的操作,如刷新所有日志缓冲区  。资源管理器只保留维护事务完整性所需的最少的锁,然后给事务管理器返回成功状态  。

  提交

  如果所有资源管理对发给它们的准备请求返回成功状态,事务管理器将给每个资源管理器发送提交命令  。然后,每个资源管理器快速将事务记录为已完成,并释放上次控制的资源  。如果有任何资源管理器对准备请求返回错误信息,事务管理器将给每个资源管理器发送回滚命令  。

  有几种方法可以使应用程序在分布式事务内包括 SQL Server 2000:

  如果应用程序有本地事务并且发出分布式查询,本地事务将升级到分布式事务  。

  发出 BEGIN DISTRIBUTED TRANSACTION 语句  。

  如果应用程序有本地事务并且将 REMOTE_PROC_TRANSACTIONS 选项设置为>

  使用用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驱动程序的应用程序,可以使用 OLE DB 方法或 ODBC 函数让 SQL Server 连接联接由应用程序启动的SQL Server 分布式事务  。

  SQL server对全文目录执行调查和清除任务敬业的IT人 2008-2-27 22:25:00 在本示例中,将执行典型的调查和清除任务  。假设您已连接到 pubs 数据库,全文服务已经启动,并且正在处理虚构的 writers 表和 books 表  。

  1.通过执行下列存储过程,以获取一份已链接到 pubs 数据库的所有全文目录的列表:

  

  1. sp_help_fulltext_catalogs 

  因为 pubs 数据库是当前数据库,该存储过程将为链接到 pubs 数据库的所有全文目录返回下列元数据:

  全文目录的名称和整数标识符

  全文目录根目录

  全文目录填充状态

  链接到此全文目录的表的数目

  与上述存储过程稍有不同的另一个存储过程(在其中指定了全文目录的名称参数)可以为单个全文目录返回这方面的信息  。

  

  2.执行下列存储过程,以获取一份已为全文处理而启用的数据库中所有表的列表:

  1. sp_help_fulltext_tables 

  此存储过程为每个表返回下列元数据:

  由两部分组成的表名

  用作表的全文键的列的整数标识符

  用于对全文键列施加唯一约束的索引的名称

  表的全文状态

  表的全文目录名

  支持与此存储过程稍有不同的其它两种存储过程  。如果指定了 fulltext_catalog_name 参数,将为与该全文目录链接的所有表返回这方面的信息  。如果同时指定了 catalog_name 参数和 table_name 参数,或者仅指定了 table_name 参数,则为该表返回这些信息  。

  3.执行下列存储过程,以获取一份已为全文处理而启用的数据库中所有表的列表:

  1. sp_help_fulltext_columns 

  此存储过程将为每个列返回下列元数据:

  列中由两部分组成的表名

  列的名称和整数标识符

  与此存储过程稍有不同的一种存储过程(在其中指定了表名参数)可以为单个表返回这方面的信息  。

  经过编译的列表会指出一些问题  。除 mytable 表外不再有任何表使用 mycatalog 全文目录,而 mytable 表不再有任何可被查询的全文列  。

  

  

  4.执行下列存储过程,以取消将 mytable 表注册为用于全文处理:

  

  

  1. sp_fulltext_table MyTable, drop 

  这将除去该表有关全文索引的元数据  。直至下一次完全填充或除去全文目录之前,现有的全文索引将保持原样  。但它也保持为不使用状态  。有关更多信息,请参见 sp_fulltext_table  。

  

  5.通过执行下列存储过程,从文件系统中除去 mycatalog 全文目录并从系统表中除去其元数据:

  

  

  1. sp_fulltext_catalog MyCatalogue, drop 

  

  必须完成步骤 4 才能除去全文目录,因为必须更新其文本目录的元数据才能删除所有全文索引  。

  

  

  在文件系统中至少存在一个不再有相应的 SQL Server 元数据的全文目录  。这种现象的原因通常是因为删除了某个数据库  。

  

  

  6.通过执行下列存储过程,从文件系统中删除所有在 SQL Server 中不再有元数据的全文目录:

  

  

  1. sp_fulltext_service Clean_Up 

  MixedUpCtlg 全文目录的结构与当前在 SQL Server 中为它记录的元数据不匹配  。当全文目录正在被除去,或者数据库正在被除去并且 Microsoft 搜索服务不在运行时,就可能发生这种情况  。除去操作会更改与全文目录相关的元数据,但无法完成该操作,因为 Microsoft 搜索服务没有运行  。

  这将导致 SQL Server 中的全文元数据与文件系统中相关的物理全文目录之间不一致  。通过唤醒调用 sp_fulltext_service 上的清除操作可以纠正这种不一致  。(Microsoft 搜索服务必须正在运行  。)

  

  7.执行下列存储过程,以重建(但不重新填充)MixedUpCtlg 全文目录:

  

  

  1. sp_fulltext_catalog MixedUpCtlg, Rebuild 

  带有 ENABLE 选项的 sp_fulltext_database 存储过程可以用于重建所有已知的全文目录  。

  

  8.执行下列存储过程,以启动对 MixedUpCtlg 全文目录的完全填充:

  

  

  1. sp_fulltext_catalog MixedUpCtlg, start_full 

  上述的相关内容就是对SQL Server 分布式事务的概念的描述,希望会给你带来一些帮助在此方面  。