程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLSERVER分布式事務使用實例

SQLSERVER分布式事務使用實例

編輯:關於SqlServer

復制代碼 代碼如下:
--BEGIN DISTRIBUTED TRANSACTION [transactionname]
--標志一個由分布式事務處理協調器MSDTC管理的TSQL分布式事務開始
--SERVER A服務器為主控服務器。當連接發出後續COMMIT TRANSACTION或
--ROLLBACK TRANSACTION語句時,主控服務器請求MSDTC在所涉及的服務器間管理
--分布式事務的完成

--SQLSERVER使用鏈接服務器或者遠程服務器作為分布式事務處理的平台,提供
--遠程存儲過程調用和分布式查詢


--當使用分布式事務進行一個遠程存儲過程調用和一個分布式查詢時,在SERVER A
--上發出BEGIN DISTRIBUTED TRANSACTION ,該連接調用SERVER B上的存儲過程
--和SERVER C上的另一個存儲過程,並且SERVER C上的存儲過程對SERVER D執行一個
--分布式查詢,則四個SQLSERVER服務器進入分布式事務中,SERVER A是該事務的創建者
--和控制服務器

--創建分布式事務,在本地和遠程數據庫同時刪除一條記錄,其中,遠程SQLSERVER
--的實例名稱為RemoteServer。本地和遠程數據庫同時提交或同時回滾該事務。
--注意,執行分布式查詢或調用存儲過程時,使用4部分名稱限定規則

--前提:本機的MSDTC和遠程機器的MSDTC服務要打開
--本機和遠程機器能互相ping通
--數據庫端口能互相telnet通
--創建一個鏈接服務器到遠程機器WIN7U-20130414Z
USE [GPOSDB]
GO
SELECT * FROM [SystemPara] WHERE [Name]='HDTPort'
SELECT * FROM [WIN7U-20130414Z].[GPOSDB].dbo.[SystemPara] WHERE [Name]='HDTPort'

 

USE [GPOSDB]
GO
BEGIN DISTRIBUTED TRANSACTION
--從本地數據庫刪除一條記錄
DELETE FROM [JOE].[GPOSDB].[DBO].[SystemPara]
WHERE [Name]='HDTPort'

--從遠程數據庫中刪除一條記錄
DELETE FROM [GPOSDB].[dbo].[SystemPara]
WHERE [Name]='HDTPort'

COMMIT TRAN
GO


--個人嘗試了下是由於在雙向的sql server訪問中采用了鏈式方式訪問(LinkedServer方式),
--遇到這種情況只需要將原來訪問對方數據庫的語句:
--select  *  from  linkedServerA.dbo.table1
--修改為:
--select  *  from  dbo.table1即可。
--標記下,以便以後解決。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved