關於SQL Server 2000和SQL Server 2005分散式交易能否協同工作的測試

來源:互聯網
上載者:User
server|分布式

關於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.TEST2005COMMIT TRAN/****** INSERT DATA TO REMOTE SERVER ******/SET XACT_ABORT ONBEGIN DISTRIBUTED TRAN    INSERT [YUKON\DW].ADVENTUREWORKS.DBO.TEST2005(DES)    SELECT 'A'COMMIT TRAN/****** DELETE REMOTE SERVER'S DATA ******/ SET XACT_ABORT ONBEGIN DISTRIBUTED TRAN    DELETE FROM  [YUKON\DW].ADVENTUREWORKS.DBO.TEST2005 COMMIT TRAN /****** UPDATE REMOTE SERVER'S DATA ******/SET XACT_ABORT ONBEGIN 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間不同版本間的分散式交易能夠協同工作。


 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.