关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试

 

关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试

MS DTC Report

1.      MS DTC 背景

2.      MSDTC 测试目的

3.      MSDTC 测试环境

3.1            本次验证测试环境:

3.2            环境配置

3.3            验证MSDTC

3.4            创建验证用表

4.      Linked Server测试

5.      结论

 

 

1.        MS DTC 背景

主持结婚典礼的牧师先问新娘和新郎愿意此人成为您的配偶吗?如果他们都回答愿意,牧师就会宣布他们结婚。

这个情景说明了事务的基本原理:几个独立的实体必须达成一致。如果任何一方不同意,交易就会失败。一旦同意后,事务就会发生。Microsoft Distributed Transaction Coordinator (MS? DTC) COM 结构的其它组件执行这项事务协调任务。在MS DTC,执行者被称为事务管理器。在执行事务保护资源的事务中,其参与者(如关系数据库)被称为资源管理器。

应用程序通过调用事务管理器的 Begin Distributed Transaction 方法开始事务。这样可创建一个代表事务的事务对象。然后应用程序会调用资源管理器来完成事务工作。当某个资源管理器首先代表某个事务工作时,会通过调用事务管理器登记到该事务中。随着事务的发展,事务管理器会跟踪每个登记到该事务中的资源管理器。当应用程序成功地完成事务的工作后,它会调用 MS DTC 提交事务。然后 MS DTC 会仔细检查两阶段” “提交协议,使所有已登记的资源管理器都提交。两阶段提交协议可确保所有的资源管理器提交此事务,或全都放弃此事务。在第一阶段,MS DTC 询问每个资源管理器是否准备提交。如果所有参与者都回答,那么在第二阶段 MS DTC 将向所有参与者广播提交信息。如果事务的任何部分失败,或资源管理器响应准备请求失败,或资源管理器响应,。则调用 Abort 事务方法,该方法可以撤消事务的操作

2.        MSDTC 测试目的

通过进行SQL Server 2005和本机SQL Server 2000实例间及和其它独立SQL Server 2000计算机的分布式事务的测试来验证SQL Server不同版本间分布式事务的兼容性及可行性。

 

3.        MSDTC 测试环境

3.1   本次验证测试环境:

?         一台真正的计算机(SQL Server 2000)

?         一台虚拟机(装有SQL Server 2000默认实例及SQL Server 2005命名实例)

?         测试工具:DTCTest &DTCPing

3.2   环境配置

1.关闭两台计算机的防火墙

2.打开SQL Server 2005服务器端的TCP监听

3.打开SQL Server2005远程连接

       4.        如下设置MSDTC

3.3   验证MSDTC

首先使用DTC Test来验证两台计算机DTC是不是工作正常,在两台计算机上各建一个ODBC Datasource,在命令行下运行DTCTEST

确认MSDTC工作正常

3.4   创建验证用表

1.        SQL Server 2005AdventureWorks数据库中使用如下脚本创建表,此表用于以后的MSDTC的插入,删除,更改及查询测试:

CREATE TABLE DBO.TEST2005

(

ID1 INT IDENTITY(1,1),

DES VARCHAR(100)

)

2.        SQL Server 2000Pubs数据库中使用如下脚本创建表,此表用于以后的MSDTC的插入,删除,更改及查询测试:

 

CREATE TABLE DBO.TEST2000

(

ID1 INT IDENTITY(1,1),

DES VARCHAR(100)

)

 

4.        Linked Server测试

4.1                  SQL Server2005中加入SQL Server 2000 链接服务器,并进行相应的测试

SQl Server 2005中,使用向导或者以下脚本来创建一个Linked Server,使此Linked Server指向SQL Server 2000数据库misdbs01

/****** Object:  LinkedServer [MISDBS01]    Script Date: 10/27/2005 17:39:33 ******/

EXEC master.dbo.sp_addlinkedserver @server = N'MISDBS01', @srvproduct=N'SQL Server'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'collation compatible', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'data access', @optvalue=N'true'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'dist', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'pub', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'rpc', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'rpc out', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'sub', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'connect timeout', @optvalue=N'0'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'collation name', @optvalue=null

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'lazy schema validation', @optvalue=N'false'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'query timeout', @optvalue=N'0'

GO

EXEC master.dbo.sp_serveroption @server=N'MISDBS01', @optname=N'use remote collation', @optvalue=N'true'

 

SQL Server 2005中展开对象浏览器到Linked Server 目录下,可以看到已经有一个叫misdbs01linked server存在,下面对此linked server进行验证。验证步骤将分别用SELECT,DELETE,UPDATE,INSERT来对SQL Server 2000 PUBS数据库下的test2000进行相应操作。

 

/******

RETRIVE DATA FROM REMOTE SERVER

 ******/

 

BEGIN DISTRIBUTED TRAN

    SELECT * FROM MISDBS01.PUBS.DBO.TEST2000

COMMIT TRAN

 

/******

INSERT DATA TO REMOTE SERVER

 ******/

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    INSERT MISDBS01.PUBS.DBO.TEST2000(DES)

    SELECT 'A'

COMMIT TRAN

 

/******

DELETE REMOTE SERVER'S DATA

 ******/

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    DELETE FROM  MISDBS01.PUBS.DBO.TEST2000

COMMIT TRAN

 

/******

UPDATE REMOTE SERVER'S DATA

 ******/

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    UPDATE  MISDBS01.PUBS.DBO.TEST2000

    SET DES='B'

COMMIT TRAN

同理验证YUKON/DW连接本地的SQL Server 2000默认实例,也是成功的。

 

上面的测试全部正常工作,由此可见测试可见MSDTC是能够正常工作的,从Linked Server的创建脚本中我们也可以发现其实SQL Server 2005中使用的SQL Native Client provider来连接SQL Server 2000的,参照MSDN中的如下描述,我们可以知道能够正常成功是正常的:

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.

 

Data source

Provider name

Use in four-part names

Use in pass-through queries and commands

Use in INSERT, UPDATE, or DELETE

Use in distributed transactions

SQL Server 7.0 or later

Microsoft SQL Native Client OLE DB Provider

Yes

Yes

Yes

Yes

 

 

4.2       SQL Server2000中加入SQL Server 2005 链接服务器,并进行相应的测试

先在SQL Server 2000企业管理器或者直接使用T-SQL语句新增加一个Linked Server,Linked Server指向SQL Server 2005.

 

 

SQL Server 2000中展开对象浏览器到Linked Server 目录下,可以看到已经有一个叫YUKON/DWlinked server存在,下面对此linked server进行验证。验证步骤将分别用SELECT,DELETE,UPDATE,INSERT来对SQL Server 2005 AdventureWorks数据库下的test2005进行相应操作。

 

/******

RETRIVE DATA FROM REMOTE SERVER

 ******/

BEGIN DISTRIBUTED TRAN

    SELECT * FROM [YUKON/DW].ADVENTUREWORKS.DBO.TEST2005

COMMIT TRAN

/******

INSERT DATA TO REMOTE SERVER

 ******/

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    INSERT [YUKON/DW].ADVENTUREWORKS.DBO.TEST2005(DES)

    SELECT 'A'

COMMIT TRAN

/******

DELETE REMOTE SERVER'S DATA

 ******/

 

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    DELETE FROM  [YUKON/DW].ADVENTUREWORKS.DBO.TEST2005

COMMIT TRAN

 

/******

UPDATE REMOTE SERVER'S DATA

 ******/

SET XACT_ABORT ON

BEGIN DISTRIBUTED TRAN

    UPDATE [YUKON/DW].ADVENTUREWORKS.DBO.TEST2005

     SET DES=’B’

COMMIT TRAN

由上面的测试可以看出由本机SQL Server 2000连接链接到SQL Server 2005的过程也是成功的,其实现在是使用的SQLOLEDB来进行联接的。

同理验证由其它计算的SQL Server 2000连接链接到此SQL Server 2005实例,经过验证,也是可以正常工作的,可见SQL Server 2005依然在这方面支持SQL Server2000Provider.

 

4.        结论

可见SQL Server 2000SQL Server 2005间不同版本间的分布式事务能够协同工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值