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 Server7.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间不同版本间的分布式事务能够协同工作。