关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试
信息来源:softj Blog[b][font=Arial][size=15pt]MS DTC Report [/size][/font][/b]
[size=10pt][font=Arial][color=#223355]1.[/color][/font][color=windowtext] [/color][color=#223355][font=Arial]MS DTC [/font][font=宋体]背景[/font][/color][/size]
[size=10pt][font=Arial][color=#223355]2.[/color][/font][color=windowtext] [/color][color=#223355][font=Arial]MSDTC [/font][font=宋体]测试目的[/font][/color][/size]
[size=10pt][font=Arial][color=#223355]3.[/color][/font][color=windowtext] [/color][color=#223355][font=Arial]MSDTC [/font][font=宋体]测试环境[/font][/color][/size]
[size=10pt][font=Verdana][color=#223355]3.1[/color][/font][color=windowtext] [/color][font=宋体][color=#223355]本次验证测试环境:[/color][/font][/size]
[size=10pt][font=Verdana][color=#223355]3.2[/color][/font][color=windowtext] [/color][font=宋体][color=#223355]环境配置[/color][/font][/size]
[size=10pt][font=Verdana][color=#223355]3.3[/color][/font][color=windowtext] [/color][color=#223355][font=宋体]验证[/font][font=Verdana]MSDTC[/font][/color][/size]
[size=10pt][font=Verdana][color=#223355]3.4[/color][/font][color=windowtext] [/color][font=宋体][color=#223355]创建验证用表[/color][/font][/size]
[size=10pt][font=Arial][color=#223355]4.[/color][/font][color=windowtext] [/color][color=#223355][font=Arial]Linked Server[/font][font=宋体]测试[/font][/color][/size]
[size=10pt][font=Arial][color=#223355]5.[/color][/font][color=windowtext] [/color][font=宋体][color=#223355]结论[/color][/font][/size]
[b][font=Arial][size=12pt]1. [/size][/font][/b][b][font=Arial][size=12pt]MS DTC [/size][/font][/b][b][font=宋体][size=12pt]背景[/size][/font][/b][b][/b]
[font=Verdana][size=10pt][font=宋体]主持结婚典礼的牧师先问新娘和新郎[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]愿意此人成为您的配偶吗?[/font][/size][/font][font=Verdana][size=10pt]” [/size][/font][font=Verdana][size=10pt][font=宋体]如果他们都回答[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]愿意[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=宋体][font=Verdana][size=10pt],牧师就会宣布他们结婚。[/size][/font][/font]
[font=Verdana][size=10pt][font=宋体]这个情景说明了事务的基本原理:几个独立的实体必须达成一致。如果任何一方不同意,交易就会失败。一旦同意后,事务就会发生。[/font][/size][/font][font=Verdana][size=10pt]Microsoft Distributed Transaction Coordinator (MS? DTC) [/size][/font][font=Verdana][size=10pt][font=宋体]为[/font][/size][/font][font=Verdana][size=10pt] COM [/size][/font][font=Verdana][size=10pt][font=宋体]结构的其它组件执行这项事务协调任务。在[/font][/size][/font][font=Verdana][size=10pt]MS DTC[/size][/font][font=宋体][font=Verdana][size=10pt],执行者被称为事务管理器。在执行事务保护资源的事务中,其参与者(如关系数据库)被称为资源管理器。[/size][/font][/font]
[font=Verdana][size=10pt][font=宋体]应用程序通过调用事务管理器的[/font][/size][/font][font=Verdana][size=10pt] Begin Distributed Transaction [/size][/font][font=Verdana][size=10pt][font=宋体]方法开始事务。这样可创建一个代表事务的事务对象。然后应用程序会调用资源管理器来完成事务工作。当某个资源管理器首先代表某个事务工作时,会通过调用事务管理器[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]登记[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体]到该事务中。随着事务的发展,事务管理器会跟踪每个登记到该事务中的资源管理器。当应用程序成功地完成事务的工作后,它会调用[/font][/size][/font][font=Verdana][size=10pt] MS DTC [/size][/font][font=Verdana][size=10pt][font=宋体]来[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]提交[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体]事务。然后[/font][/size][/font][font=Verdana][size=10pt] MS DTC [/size][/font][font=Verdana][size=10pt][font=宋体]会仔细检查[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]两阶段[/font][/size][/font][font=Verdana][size=10pt]” “[/size][/font][font=Verdana][size=10pt][font=宋体]提交协议[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体],使所有已登记的资源管理器都提交。两阶段提交协议可确保所有的资源管理器提交此事务,或全都放弃此事务。在第一阶段,[/font][/size][/font][font=Verdana][size=10pt]MS DTC [/size][/font][font=Verdana][size=10pt][font=宋体]询问每个资源管理器是否[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]准备[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体]提交。如果所有参与者都回答[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]是[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体],那么在第二阶段[/font][/size][/font][font=Verdana][size=10pt] MS DTC [/size][/font][font=Verdana][size=10pt][font=宋体]将向所有参与者广播提交信息。如果事务的任何部分失败,或资源管理器响应准备请求失败,或资源管理器响应[/font][/size][/font][font=Verdana][size=10pt]“[/size][/font][font=Verdana][size=10pt][font=宋体]否[/font][/size][/font][font=Verdana][size=10pt]”[/size][/font][font=Verdana][size=10pt][font=宋体],。则调用[/font][/size][/font][font=Verdana][size=10pt] Abort [/size][/font][font=宋体][font=Verdana][size=10pt]事务方法,该方法可以撤消事务的操作[/size][/font][/font]
[b][font=Arial][size=12pt]2. [/size][/font][/b][b][font=Arial][size=12pt]MSDTC [/size][/font][/b][b][font=宋体][size=12pt]测试目的[/size][/font][/b][b][/b]
[font=Verdana][size=10pt][font=宋体]通过进行[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=Verdana][size=10pt][font=宋体]和本机[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=Verdana][size=10pt][font=宋体]实例间及和其它独立[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=Verdana][size=10pt][font=宋体]计算机的分布式事务的测试来验证[/font][/size][/font][font=Verdana][size=10pt]SQL Server[/size][/font][font=宋体][font=Verdana][size=10pt]不同版本间分布式事务的兼容性及可行性。[/size][/font][/font]
[color=blue]
[/color][b][font=Arial][size=12pt]3. [/size][/font][/b][b][font=Arial][size=12pt]MSDTC [/size][/font][/b][b][font=宋体][size=12pt]测试环境[/size][/font][/b][b][/b]
[color=#223355][b][font=Verdana][size=10pt]3.1 [/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]本次验证测试环境:[/font][/size][/font][/b][/color][b][/b]
[font=Wingdings][size=10pt]? [/size][/font][font=Verdana][size=10pt][font=宋体]一台真正的计算机[/font][/size][/font][font=Verdana][size=10pt](SQL Server 2000) [/size][/font]
[font=Wingdings][size=10pt]? [/size][/font][font=Verdana][size=10pt][font=宋体]一台虚拟机[/font][/size][/font][font=Verdana][size=10pt]([/size][/font][font=Verdana][size=10pt][font=宋体]装有[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=Verdana][size=10pt][font=宋体]默认实例及[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=Verdana][size=10pt][font=宋体]命名实例[/font][/size][/font][font=Verdana][size=10pt]) [/size][/font]
[font=Wingdings][size=10pt]? [/size][/font][font=Verdana][size=10pt][font=宋体]测试工具[/font][/size][/font][font=Verdana][size=10pt]:DTCTest &DTCPing [/size][/font]
[color=#223355][b][font=Verdana][size=10pt]3.2 [/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]环境配置[/font][/size][/font][/b][/color][b][/b]
[font=Verdana][size=10pt]1.[/size][/font][font=宋体][font=Verdana][size=10pt]关闭两台计算机的防火墙[/size][/font][/font]
[font=Verdana][size=10pt]2.[/size][/font][font=Verdana][size=10pt][font=宋体]打开[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=Verdana][size=10pt][font=宋体]服务器端的[/font][/size][/font][font=Verdana][size=10pt]TCP[/size][/font][font=Verdana][size=10pt][font=宋体]监听[/font][/size][/font]
[font=Verdana][size=10pt][font=Verdana][size=10pt]3.[/size][/font][font=Verdana][size=10pt][font=宋体]打开[/font][/size][/font][font=Verdana][size=10pt]SQL Server2005[/size][/font][font=Verdana][size=10pt][font=宋体]远程连接[/font][/size][/font]
[font=Verdana][size=10pt][font=Verdana][size=10pt] 4. [/size][/font][font=Verdana][size=10pt][font=宋体]如下设置[/font][/size][/font][font=Verdana][size=10pt]MSDTC[/size][/font]
[font=Verdana][size=10pt][color=#223355][b][font=Verdana][size=10pt]3.3 [/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]验证[/font][/size][/font][/b][/color][b][font=Verdana][size=10pt]MSDTC[/size][/font][/b][b][/b]
[font=Verdana][size=10pt][font=宋体]首先使用[/font][/size][/font][font=Verdana][size=10pt]DTC Test[/size][/font][font=Verdana][size=10pt][font=宋体]来验证两台计算机[/font][/size][/font][font=Verdana][size=10pt]DTC[/size][/font][font=Verdana][size=10pt][font=宋体]是不是工作正常,在两台计算机上各建一个[/font][/size][/font][font=Verdana][size=10pt]ODBC Datasource,[/size][/font][font=Verdana][size=10pt][font=宋体]在命令行下运行DTCTEST[/font][/size][/font]
[font=宋体][size=10pt]确认[/size][/font][font=Verdana][size=10pt]MSDTC[/size][/font][font=宋体][size=10pt]工作正常[/size][/font]
[color=#223355][b][font=Verdana][size=10pt]3.4 [/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]创建验证用表[/font][/size][/font][/b][/color][b][/b]
[font=Arial][size=8pt]1. [/size][/font][font=宋体][size=8pt]在[/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=宋体][size=10pt]的[/size][/font][font=Verdana][size=10pt]AdventureWorks[/size][/font][font=宋体][size=10pt]数据库中使用如下脚本创建表[/size][/font][font=Verdana][size=10pt],[/size][/font][font=宋体][size=10pt]此表用于以后的[/size][/font][font=Verdana][size=10pt]MSDTC[/size][/font][font=宋体][size=10pt]的插入,删除,更改及查询测试:[/size][/font]
[size=8pt]CREATE[/size][size=8pt] [color=blue]TABLE[/color] DBO[color=gray].[/color]TEST2005 [/size]
[size=8pt]( [/size]
[size=8pt]ID1 [color=blue]INT[/color] [color=blue]IDENTITY[/color][color=gray]([/color]1[color=gray],[/color]1[color=gray]), [/color][/size]
[size=8pt]DES [color=blue]VARCHAR[/color][color=gray]([/color]100[color=gray]) [/color][/size]
[size=8pt])[/size][b][/b]
[font=Arial][size=8pt]2. [/size][/font][font=宋体][size=8pt]在[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]的[/size][/font][font=Verdana][size=10pt]Pubs[/size][/font][font=宋体][size=10pt]数据库中使用如下脚本创建表[/size][/font][font=Verdana][size=10pt],[/size][/font][font=宋体][size=10pt]此表用于以后的[/size][/font][font=Verdana][size=10pt]MSDTC[/size][/font][font=宋体][size=10pt]的插入,删除,更改及查询测试:[/size][/font]
[font=Arial][size=8pt]
[/size][/font][size=8pt]CREATE[/size][size=8pt] [color=blue]TABLE[/color] DBO[color=gray].[/color]TEST2000 [/size]
[size=8pt]( [/size]
[size=8pt]ID1 [color=blue]INT[/color] [color=blue]IDENTITY[/color][color=gray]([/color]1[color=gray],[/color]1[color=gray]), [/color][/size]
[size=8pt]DES [color=blue]VARCHAR[/color][color=gray]([/color]100[color=gray]) [/color][/size]
[size=8pt])[/size][b][/b]
[font=Arial][size=8pt]
[/size][/font][b][font=Arial][size=12pt]4. [/size][/font][/b][b][font=Arial][size=12pt]Linked Server[/size][/font][/b][b][font=宋体][size=12pt]测试[/size][/font][/b][b][/b]
[b][font=Verdana][size=10pt]4.1 [/size][/font][/b][b][font=Verdana][size=10pt] SQL Server2005[/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]中加入[/font][/size][/font][/b][b][font=Verdana][size=10pt]SQL Server 2000 [/size][/font][/b][font=宋体][b][font=Verdana][size=10pt]链接服务器,并进行相应的测试[/size][/font][/b][b][/b][/font]
[font=宋体][size=8pt]在[/size][/font][font=Verdana][size=10pt]SQl Server 2005[/size][/font][font=宋体][size=10pt]中,使用向导或者以下脚本来创建一个[/size][/font][font=Verdana][size=10pt]Linked Server[/size][/font][font=宋体][size=10pt],使此[/size][/font][font=Verdana][size=10pt]Linked Server[/size][/font][font=宋体][size=10pt]指向[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]数据库[/size][/font][font=Verdana][size=10pt]misdbs01[/size][/font]
[size=8pt]/****** Object: LinkedServer [MISDBS01] Script Date: 10/27/2005 17:39:33 ******/ [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_addlinkedserver[/color] @server [color=gray]=[/color] N[color=red]'MISDBS01'[/color][color=gray],[/color] @srvproduct[color=gray]=[/color]N[color=red]'SQL Server' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'collation compatible'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'data access'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'true' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'dist'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'pub'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'rpc'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'rpc out'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'sub'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'connect timeout'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'0' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'collation name'[/color][color=gray],[/color] @optvalue[color=gray]=null [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'lazy schema validation'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'false' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'query timeout'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'0' [/color][/size]
[size=8pt]GO [/size]
[size=8pt]EXEC[/size][size=8pt] master[color=gray].[/color]dbo[color=gray].[/color][color=maroon]sp_serveroption[/color] @server[color=gray]=[/color]N[color=red]'MISDBS01'[/color][color=gray],[/color] @optname[color=gray]=[/color]N[color=red]'use remote collation'[/color][color=gray],[/color] @optvalue[color=gray]=[/color]N[color=red]'true' [/color][/size]
[size=10pt]
[/size][font=Verdana][size=10pt][font=宋体]在[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=Verdana][size=10pt][font=宋体]中展开对象浏览器到[/font][/size][/font][font=Verdana][size=10pt]Linked Server [/size][/font][font=Verdana][size=10pt][font=宋体]目录下,可以看到已经有一个叫[/font][/size][/font][font=Verdana][size=10pt]misdbs01[/size][/font][font=Verdana][size=10pt][font=宋体]的[/font][/size][/font][font=Verdana][size=10pt]linked server[/size][/font][font=Verdana][size=10pt][font=宋体]存在,下面对此[/font][/size][/font][font=Verdana][size=10pt]linked server[/size][/font][font=Verdana][size=10pt][font=宋体]进行验证。验证步骤将分别用[/font][/size][/font][font=Verdana][size=10pt]SELECT,DELETE,UPDATE,INSERT[/size][/font][font=Verdana][size=10pt][font=宋体]来对[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000 [/size][/font][font=Verdana][size=10pt][font=宋体]中[/font][/size][/font][font=Verdana][size=10pt]PUBS[/size][/font][font=Verdana][size=10pt][font=宋体]数据库下的[/font][/size][/font][font=Verdana][size=10pt]test2000[/size][/font][font=宋体][font=Verdana][size=10pt]进行相应操作。[/size][/font][/font]
[size=10pt][/size]
[size=8pt]/****** [/size]
[size=8pt]RETRIVE DATA FROM REMOTE SERVER [/size]
[size=8pt] ******/ [/size]
[size=8pt] [/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]SELECT[/color] [color=gray]*[/color] [color=blue]FROM[/color] MISDBS01[color=gray].[/color]PUBS[color=gray].[/color]DBO[color=gray].[/color]TEST2000 [/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]
[/size][size=8pt]/****** [/size]
[size=8pt]INSERT DATA TO REMOTE SERVER [/size]
[size=8pt] ******/ [/size]
[size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]INSERT[/color] MISDBS01[color=gray].[/color]PUBS[color=gray].[/color]DBO[color=gray].[/color]TEST2000[color=gray]([/color]DES[color=gray]) [/color][/size]
[size=8pt] [color=blue]SELECT[/color] [color=red]'A' [/color][/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]
[/size][size=8pt]/****** [/size]
[size=8pt]DELETE REMOTE SERVER'S DATA [/size]
[size=8pt] ******/ [/size]
[size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]DELETE[/color] [color=blue]FROM[/color] MISDBS01[color=gray].[/color]PUBS[color=gray].[/color]DBO[color=gray].[/color]TEST2000 [/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]
[/size][size=8pt]/****** [/size]
[size=8pt]UPDATE REMOTE SERVER'S DATA [/size]
[size=8pt] ******/ [/size]
[size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]UPDATE[/color] MISDBS01[color=gray].[/color]PUBS[color=gray].[/color]DBO[color=gray].[/color]TEST2000 [/size]
[size=8pt] [color=blue]SET[/color] DES[color=gray]=[/color][color=red]'B' [/color][/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[font=宋体][size=10pt]同理验证[/size][/font][font=Verdana][size=10pt]YUKON\DW[/size][/font][font=宋体][size=10pt]连接本地的[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]默认实例,也是成功的。[/size][/font]
[font=Verdana][size=10pt]
[/size][/font][font=宋体][size=10pt]上面的测试全部正常工作,由此可见测试可见[/size][/font][font=Verdana][size=10pt]MSDTC[/size][/font][font=宋体][size=10pt]是能够正常工作的,从[/size][/font][font=Verdana][size=10pt]Linked Server[/size][/font][font=宋体][size=10pt]的创建脚本中我们也可以发现其实[/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=宋体][size=10pt]中使用的[/size][/font][font=Verdana][size=10pt]SQL Native Client provider[/size][/font][font=宋体][size=10pt]来连接[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]的,参照[/size][/font][font=Verdana][size=10pt]MSDN[/size][/font][font=宋体][size=10pt]中的如下描述,我们可以知道能够正常成功是正常的:[/size][/font]
[font=Verdana][size=8pt]The following table shows the OLE DB providers that have been tested with SQL Server distributed queries. All these providers support being referenced in a SELECT statement by specifying a pass-through query in the OPENQUERY and OPENROWSET functions. [/size][/font]
[font=Verdana][size=8]
[/size][/font][table=98%][tr][td=1,1,72][b][font=Arial][size=8pt]Data source [/size][/font][/b]
[/td][td=1,1,92][b][font=Arial][size=8pt]Provider name [/size][/font][/b]
[/td][td=1,1,72][b][font=Arial][size=8pt]Use in four-part names [/size][/font][/b]
[/td][td=1,1,121][b][font=Arial][size=8pt]Use in pass-through queries and commands [/size][/font][/b]
[/td][td=1,1,101][b][font=Arial][size=8pt]Use in INSERT, UPDATE, or DELETE [/size][/font][/b]
[/td][td=1,1,105][b][font=Arial][size=8pt]Use in distributed transactions [/size][/font][/b]
[/td][/tr][tr][td=1,1,72][font=Arial][size=8pt]SQL Server 7.0 or later [/size][/font]
[/td][td=1,1,92][font=Arial][size=8pt]Microsoft SQL Native Client OLE DB Provider [/size][/font]
[/td][td=1,1,72][font=Arial][size=8pt]Yes [/size][/font]
[/td][td=1,1,121][font=Arial][size=8pt]Yes [/size][/font]
[/td][td=1,1,101][font=Arial][size=8pt]Yes [/size][/font]
[/td][td=1,1,105][align=left][align=left][font=Arial][size=8pt]Yes [/size][/font]
[/td][/tr][/table][/align][/align][size=10pt]
[/size][size=10pt]
[/size][b][font=Verdana][size=10pt]4.2 [/size][/font][/b][b][font=Verdana][size=10pt]SQL Server2000[/size][/font][/b][b][font=Verdana][size=10pt][font=宋体]中加入[/font][/size][/font][/b][b][font=Verdana][size=10pt]SQL Server 2005 [/size][/font][/b][font=宋体][b][font=Verdana][size=10pt]链接服务器,并进行相应的测试[/size][/font][/b][b][/b][/font]
[font=宋体][size=10pt]先在[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]企业管理器或者直接使用[/size][/font][font=Verdana][size=10pt]T-SQL[/size][/font][font=宋体][size=10pt]语句新增加一个[/size][/font][font=Verdana][size=10pt]Linked Server,[/size][/font][font=宋体][size=10pt]此[/size][/font][font=Verdana][size=10pt]Linked Server[/size][/font][font=宋体][size=10pt]指向[/size][/font][font=Verdana][size=10pt]SQL Server 2005. [/size][/font]
[font=Verdana][size=10pt][font=宋体]在[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=Verdana][size=10pt][font=宋体]中展开对象浏览器到[/font][/size][/font][font=Verdana][size=10pt]Linked Server [/size][/font][font=Verdana][size=10pt][font=宋体]目录下,可以看到已经有一个叫[/font][/size][/font][font=Verdana][size=10pt]YUKON\DW[/size][/font][font=Verdana][size=10pt][font=宋体]的[/font][/size][/font][font=Verdana][size=10pt]linked server[/size][/font][font=Verdana][size=10pt][font=宋体]存在,下面对此[/font][/size][/font][font=Verdana][size=10pt]linked server[/size][/font][font=Verdana][size=10pt][font=宋体]进行验证。验证步骤将分别用[/font][/size][/font][font=Verdana][size=10pt]SELECT,DELETE,UPDATE,INSERT[/size][/font][font=Verdana][size=10pt][font=宋体]来对[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005 [/size][/font][font=Verdana][size=10pt][font=宋体]中[/font][/size][/font][font=Verdana][size=10pt]AdventureWorks[/size][/font][font=Verdana][size=10pt][font=宋体]数据库下的[/font][/size][/font][font=Verdana][size=10pt]test2005[/size][/font][font=宋体][font=Verdana][size=10pt]进行相应操作。[/size][/font][/font]
[size=10pt]
[/size][size=8pt]/****** [/size]
[size=8pt]RETRIVE DATA FROM REMOTE SERVER [/size]
[size=8pt] ******/ [/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]SELECT[/color] [color=gray]*[/color] [color=blue]FROM[/color] [YUKON\DW][color=gray].[/color]ADVENTUREWORKS[color=gray].[/color]DBO[color=gray].[/color]TEST2005 [/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]/****** [/size]
[size=8pt]INSERT DATA TO REMOTE SERVER [/size]
[size=8pt] ******/ [/size]
[size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]INSERT[/color] [YUKON\DW][color=gray].[/color]ADVENTUREWORKS[color=gray].[/color]DBO[color=gray].[/color]TEST2005[color=gray]([/color]DES[color=gray]) [/color][/size]
[size=8pt] [color=blue]SELECT[/color] [color=red]'A' [/color][/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]/****** [/size]
[size=8pt]DELETE REMOTE SERVER'S DATA [/size]
[size=8pt] ******/ [/size]
[size=8pt]
[/size][size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]DELETE[/color] [color=blue]FROM[/color] [YUKON\DW][color=gray].[/color]ADVENTUREWORKS[color=gray].[/color]DBO[color=gray].[/color]TEST2005 [/size]
[size=8pt]COMMIT[/size][size=8pt] [color=blue]TRAN [/color][/size]
[size=8pt]
[/size][size=8pt]/****** [/size]
[size=8pt]UPDATE REMOTE SERVER'S DATA [/size]
[size=8pt] ******/ [/size]
[size=8pt]SET[/size][size=8pt] [color=blue]XACT_ABORT[/color] [color=blue]ON [/color][/size]
[size=8pt]BEGIN[/size][size=8pt] [color=blue]DISTRIBUTED[/color] [color=blue]TRAN [/color][/size]
[size=8pt] [color=blue]UPDATE[/color] [YUKON\DW][color=gray].[/color]ADVENTUREWO[/size][size=10pt]RKS[color=gray].[/color]DBO[color=gray].[/color]TEST2005 [/size]
[size=8pt] SET DES=’B’[/size]
[size=10pt]COMMIT[/size][size=10pt] [color=blue]TRAN[/color][/size]
[font=宋体][size=10pt]由上面的测试可以看出由本机[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]连接链接到[/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=宋体][size=10pt]的过程也是成功的,其实现在是使用的[/size][/font][font=Verdana][size=10pt]SQLOLEDB[/size][/font][font=宋体][size=10pt]来进行联接的。[/size][/font]
[font=宋体][size=10pt]同理验证由其它计算的[/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=宋体][size=10pt]连接链接到此[/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=宋体][size=10pt]实例,经过验证,也是可以正常工作的,可见[/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=宋体][size=10pt]依然在这方面支持[/size][/font][font=Verdana][size=10pt]SQL Server2000[/size][/font][font=宋体][size=10pt]的[/size][/font][font=Verdana][size=10pt]Provider. [/size][/font]
[size=10pt]
[/size][b][font=Arial][size=12pt]4. [/size][/font][/b][b][font=宋体][size=12pt][color=#223355]结论[/color][/size][/font][/b][b][/b]
[font=Verdana][size=10pt][font=宋体]可见[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2000[/size][/font][font=Verdana][size=10pt][font=宋体]和[/font][/size][/font][font=Verdana][size=10pt]SQL Server 2005[/size][/font][font=Verdana][size=10pt][font=宋体]间不同版本间的分布式事务能够协同工作。[/font][/size][/font]
[/size][/font][/size][/font][/size][/font]
页:
[1]