分享
 
 
 

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

王朝mssql·作者佚名  2006-05-12
窄屏简体版  字體: |||超大  

关于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 2005的AdventureWorks数据库中使用如下脚本创建表,此表用于以后的MSDTC的插入,删除,更改及查询测试:

CREATE TABLE DBO.TEST2005

(

ID1 INT IDENTITY(1,1),

DES VARCHAR(100)

)

2. 在SQL Server 2000的Pubs数据库中使用如下脚本创建表,此表用于以后的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 目录下,可以看到已经有一个叫misdbs01的linked 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\DW的linked 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 Server2000的Provider.

4. 结论

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有