直播中
從 OLE DB 數(shù)據(jù)源引用行集,作為 Transact-SQL 語(yǔ)句中的表。
將命令傳遞給 OLE DB 數(shù)據(jù)源,并包含結(jié)果行集,作為 Transact-SQL 語(yǔ)句中的表。
每個(gè)分布式查詢都可以引用多個(gè)鏈接的服務(wù)器,而且可以對(duì)每個(gè)鏈接的服務(wù)器分別執(zhí)行更新或讀取操作。單個(gè)分布式查詢
可以對(duì)某些鏈接的服務(wù)器執(zhí)行讀取操作,并且對(duì)其它鏈接的服務(wù)器執(zhí)行更新操作。通常情況下,每當(dāng)某個(gè)事務(wù)可能更新多
個(gè)鏈接服務(wù)器中的數(shù)據(jù)時(shí),Microsoft SQL Server 都要求相應(yīng)的 OLE DB 提供程序支持分布式事務(wù)。因此,鏈接服務(wù)器上
所支持的查詢類型取決于 OLE DB 提供程序中對(duì)事務(wù)的支持級(jí)別。OLE DB 為事務(wù)管理定義了兩個(gè)可選的接口:
ITransactionLocal 支持 OLE DB 數(shù)據(jù)源中的本地事務(wù)。
ITransactionJoin 允許提供程序聯(lián)結(jié)包含其它資源管理器的分布式事務(wù)。
所有支持 ITransactionJoin 的提供程序也都支持 ITransactionLocal。
如果在連接是自動(dòng)提交模式時(shí)執(zhí)行分布式查詢,則應(yīng)用以下規(guī)則:
對(duì)于不支持 ItransactionLocal 的提供程序,只允許執(zhí)行讀取操作。
對(duì)于支持 ITransactionLocal 的提供程序,允許執(zhí)行所有更新操作。
主控 SQL Server 會(huì)自動(dòng)調(diào)用每個(gè)參與更新操作的鏈接的服務(wù)器中的 ITransactionLocal,以啟動(dòng)本地事務(wù),并在語(yǔ)句執(zhí)
行成功時(shí)提交或在語(yǔ)句執(zhí)行失敗時(shí)回滾。
如果分布式查詢是針對(duì)分布式分區(qū)視圖或者是在連接為顯式或隱性事務(wù)時(shí)執(zhí)行,則應(yīng)用下列規(guī)則:
對(duì)于不支持 ITransactionJoin 的提供程序,只允許執(zhí)行讀取操作。不支持任何事務(wù)或只支持 ITransactionLocal 的提供
程序不能參與更新操作。
如果 SET XACT_ABORT 設(shè)置為 ON,則對(duì)于支持 ITransactionJoin 的任意提供程序都允許執(zhí)行所有的更新操作。主控
SQL Server 會(huì)自動(dòng)調(diào)用每個(gè)參與更新操作的鏈接服務(wù)器中的 ITransactionJoin,以便在分布式事務(wù)中登記該服務(wù)器。然
后當(dāng)主控服務(wù)器表示要提交或回滾事務(wù)時(shí),MS DTC 將提交或者回滾。
如果 SET XACT_ABORT 設(shè)置為 OFF,則鏈接服務(wù)器還必須支持嵌套事務(wù),才能對(duì)其執(zhí)行更新操作。當(dāng)會(huì)話已經(jīng)有一個(gè)現(xiàn)有
事務(wù)時(shí),如果提供程序支持調(diào)用 ITransactionLocal::StartTransaction,則支持嵌套事務(wù)。這使 SQL Server 得以回滾
分布式查詢中的單個(gè)語(yǔ)句,而不是回滾整個(gè)事務(wù)。
上述規(guī)則意味著提供程序的下列限制不支持嵌套事務(wù):僅在 XACT_ABORT 選項(xiàng)設(shè)置為 ON 時(shí),分布式事務(wù)中才允許更新操
作。