BEGINDISTRIBUTEDTRANSACTION
指定一個由Microsoft分散式事務處理協調器(MSDTC)管理的Transact-SQL分散式事務的起始。
語法
BEGINDISTRIBUTEDTRAN[SACTION]
[transaction_name|@tran_name_variable]
引數
transaction_name
是使用者定義的事務名,用於跟蹤MSDTC實用工具中的分散式事務。transaction_name必須符合識別符號規則,但是僅使用頭32個字元。
@tran_name_variable
是使用者定義的一個變數名,它含有一個事務名,該事務名用於跟蹤MSDTC實用工具中的分散式事務。必須用char、varchar、nchar或nvarchar資料型別宣告該變數。
註釋
執行BEGINDISTRIBUTEDTRANSACTION語句的伺服器是事務建立人,並且控制事務的完成。當連線發出後續COMMITTRANSACTION或ROLLBACKTRANSACTION語句時,主控伺服器請求MSDTC在所涉及的伺服器間管理分散式事務的完成。
有兩個方法可將遠端SQL伺服器登記在一個分散式事務中:
分散式事務中已登記的連線執行一個遠端儲存過程呼叫,該呼叫引用一個遠端伺服器。
分散式事務中已登記的連線執行一個分散式查詢,該查詢引用一個遠端伺服器。
例如,如果在ServerA上發出BEGINDISTRIBUTEDTRANSACTION,該連線呼叫ServerB上的儲存過程和ServerC上的另一個儲存過程,並且ServerC上的儲存過程對ServerD執行一個分散式查詢,那麼四個SQL伺服器都進入分散式事務中了。ServerA是該事務的建立者和控制伺服器。
分散式事務Transact-SQL涉及的連線並不獲取可以傳給另一個連線的事務物件,從而也不能用該方法顯式登記在分散式事務中。遠端伺服器登記到事務中的唯一方法是成為遠端儲存過程呼叫或分散式查詢的目標。
sp_configureremoteproctrans選項控制對本地事務中的遠端儲存過程呼叫是否自動使本地事務被提升為由MSDTC管理的分散式事務。連線層SET選項REMOTE_PROC_TRANSACTIONS可用於替代由sp_configureremoteproctrans建立的伺服器預設值。啟用本選項後,遠端儲存過程呼叫會使一個本地事務提升為分散式事務。建立MSDTC事務的連線成為該事務的建立人。COMMITTRANSACTION初始化一個MSDTC協調的提交。如果啟用了sp_configureremoteproctrans選項,本地事務中的遠端儲存過程呼叫將被自動保護,成為分散式事務的一部分,而不需要重寫應用程式以便專門使用BEGINDISTRIBUTEDTRANSACTION以替代BEGINTRANSACTION。
在本地事務中執行一個分散式查詢時,如果目標OLEDB資料來源支援ItransactionLocal,則該事務被自動提升為分散式事務。如果目標OLEDB資料來源不支援ItransactionLocal,則在分散式查詢中只允許只讀操作。
關於分散式事務環境和處理的更多資訊,請參見Microsoft分散式事務處理協調器文件。
許可權
預設情況下,任何有效使用者都擁有BEGINDISTRIBUTEDTRANSACTION許可權。
示例
本例在本地和遠端資料庫上更新作者的姓。本地和遠端資料庫將同時提交或同時回滾本事務。
說明除非正在執行Microsoft?SQLServer?的計算機上當前裝有MSDTC,否則本例會產生錯誤資訊。關於安裝MSDTC的更多資訊,請參見Microsoft分散式事務處理協調器文件。
USEpubs
GO
UPDATEauthors
SETau_lname="McDonald"WHEREau_id="409-56-7008"
EXECUTEremote.pubs.dbo.changeauth_lname"409-56-7008","McDonald"
COMMITTRAN
BEGINDISTRIBUTEDTRANSACTION
指定一個由Microsoft分散式事務處理協調器(MSDTC)管理的Transact-SQL分散式事務的起始。
語法
BEGINDISTRIBUTEDTRAN[SACTION]
[transaction_name|@tran_name_variable]
引數
transaction_name
是使用者定義的事務名,用於跟蹤MSDTC實用工具中的分散式事務。transaction_name必須符合識別符號規則,但是僅使用頭32個字元。
@tran_name_variable
是使用者定義的一個變數名,它含有一個事務名,該事務名用於跟蹤MSDTC實用工具中的分散式事務。必須用char、varchar、nchar或nvarchar資料型別宣告該變數。
註釋
執行BEGINDISTRIBUTEDTRANSACTION語句的伺服器是事務建立人,並且控制事務的完成。當連線發出後續COMMITTRANSACTION或ROLLBACKTRANSACTION語句時,主控伺服器請求MSDTC在所涉及的伺服器間管理分散式事務的完成。
有兩個方法可將遠端SQL伺服器登記在一個分散式事務中:
分散式事務中已登記的連線執行一個遠端儲存過程呼叫,該呼叫引用一個遠端伺服器。
分散式事務中已登記的連線執行一個分散式查詢,該查詢引用一個遠端伺服器。
例如,如果在ServerA上發出BEGINDISTRIBUTEDTRANSACTION,該連線呼叫ServerB上的儲存過程和ServerC上的另一個儲存過程,並且ServerC上的儲存過程對ServerD執行一個分散式查詢,那麼四個SQL伺服器都進入分散式事務中了。ServerA是該事務的建立者和控制伺服器。
分散式事務Transact-SQL涉及的連線並不獲取可以傳給另一個連線的事務物件,從而也不能用該方法顯式登記在分散式事務中。遠端伺服器登記到事務中的唯一方法是成為遠端儲存過程呼叫或分散式查詢的目標。
sp_configureremoteproctrans選項控制對本地事務中的遠端儲存過程呼叫是否自動使本地事務被提升為由MSDTC管理的分散式事務。連線層SET選項REMOTE_PROC_TRANSACTIONS可用於替代由sp_configureremoteproctrans建立的伺服器預設值。啟用本選項後,遠端儲存過程呼叫會使一個本地事務提升為分散式事務。建立MSDTC事務的連線成為該事務的建立人。COMMITTRANSACTION初始化一個MSDTC協調的提交。如果啟用了sp_configureremoteproctrans選項,本地事務中的遠端儲存過程呼叫將被自動保護,成為分散式事務的一部分,而不需要重寫應用程式以便專門使用BEGINDISTRIBUTEDTRANSACTION以替代BEGINTRANSACTION。
在本地事務中執行一個分散式查詢時,如果目標OLEDB資料來源支援ItransactionLocal,則該事務被自動提升為分散式事務。如果目標OLEDB資料來源不支援ItransactionLocal,則在分散式查詢中只允許只讀操作。
關於分散式事務環境和處理的更多資訊,請參見Microsoft分散式事務處理協調器文件。
許可權
預設情況下,任何有效使用者都擁有BEGINDISTRIBUTEDTRANSACTION許可權。
示例
本例在本地和遠端資料庫上更新作者的姓。本地和遠端資料庫將同時提交或同時回滾本事務。
說明除非正在執行Microsoft?SQLServer?的計算機上當前裝有MSDTC,否則本例會產生錯誤資訊。關於安裝MSDTC的更多資訊,請參見Microsoft分散式事務處理協調器文件。
USEpubs
GO
BEGINDISTRIBUTEDTRANSACTION
UPDATEauthors
SETau_lname="McDonald"WHEREau_id="409-56-7008"
EXECUTEremote.pubs.dbo.changeauth_lname"409-56-7008","McDonald"
COMMITTRAN
GO