天天看點

分布式查詢和分布式事務

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Microsoft&reg; SQL Server&#8482; 允許建立與稱為連結伺服器的 OLE DB 資料源的連結。在連結到 OLE DB 資料源之後,可以:

從 OLE DB 資料源引用行集,作為 Transact-SQL 語句中的表。

将指令傳遞給 OLE DB 資料源,并包含結果行集,作為 Transact-SQL 語句中的表。 每個分布式查詢都可以引用多個連結的伺服器,而且可以對每個連結的伺服器分别執行更新或讀取操作。單個分布式查詢可以對某些連結的伺服器執行讀取操作,并且對其它連結的伺服器執行更新操作。通常情況下,每當某個事務可能更新多個連結伺服器中的資料時,Microsoft SQL Server 都要求相應的 OLE DB 提供程式支援分布式事務。是以,連結伺服器上所支援的查詢類型取決于 OLE DB 提供程式中對事務的支援級别。OLE DB 為事務管理定義了兩個可選的接口:

ITransactionLocal 支援 OLE DB 資料源中的本地事務。

ITransactionJoin 允許提供程式聯結包含其它資料總管的分布式事務。

所有支援 ITransactionJoin 的提供程式也都支援 ITransactionLocal。

如果在連接配接是自動送出模式時執行分布式查詢,則應用以下規則:

對于不支援 ItransactionLocal 的提供程式,隻允許執行讀取操作。

對于支援 ITransactionLocal 的提供程式,允許執行所有更新操作。

主要 SQL Server 會自動調用每個參與更新操作的連結的伺服器中的 ITransactionLocal,以啟動本地事務,并在語句執行成功時送出或在語句執行失敗時復原。

如果分布式查詢是針對分布式分區視圖或者是在連接配接為顯式或隐性事務時執行,則應用下列規則:

對于不支援 ITransactionJoin 的提供程式,隻允許執行讀取操作。不支援任何事務或隻支援 ITransactionLocal 的提供程式不能參與更新操作。

如果 SET XACT_ABORT 設定為 ON,則對于支援 ITransactionJoin 的任意提供程式都允許執行所有的更新操作。主要 SQL Server 會自動調用每個參與更新操作的連結伺服器中的 ITransactionJoin,以便在分布式事務中登記該伺服器。然後當主要伺服器表示要送出或復原事務時,MS DTC 将送出或者復原。

如果 SET XACT_ABORT 設定為 OFF,則連結伺服器還必須支援嵌套事務,才能對其執行更新操作。當會話已經有一個現有事務時,如果提供程式支援調用 ITransactionLocal::StartTransaction,則支援嵌套事務。這使 SQL Server 得以復原分布式查詢中的單個語句,而不是復原整個事務。

上述規則意味着提供程式的下列限制不支援嵌套事務:僅在 XACT_ABORT 選項設定為 ON 時,分布式事務中才允許更新操作。

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>