1

與此相關的問題的過程:Executing a stored procedure inside BEGIN/END TRANSACTION交易調用存儲的另一個數據庫

我打電話通過的BizTalk我的存儲過程。因爲BizTalk正在創建TRANSACTION,所以我的存儲過程沒有TRANSACTION處理。但是,我必須調用BizTalk調用的另一個存儲過程。但第二個存儲過程是針對同一個MSSQL實例中的另一個數據庫調用的。

MS SQL是否意識到這個跨數據庫過程調用並執行第二個存儲過程的回滾?

  • 的跨數據庫存儲過程失敗:

    如果會發生什麼?

  • 外部存儲過程在調用交叉數據庫存儲過程之後失敗?

回答

2

如果您使用的是WCF-Custom,例如使用sqlBinding,則可以在WCF適配器配置中指定TRANSACTION ISOLATION LEVEL。當然,您可以將其設置爲您想要的狀態。

僅供參考:默認情況下,BizTalk服務器中的此設置爲Serializable隔離級別。

實際上,您的WCF適配器在使用事務時將啓動分佈式事務,並且本質上將支持事務跨數據庫甚至跨服務器。根據你在SQL中的確切做法,這可能會也可能不會被支持。例如,通過某些提供商的某些有限的鏈接服務器不支持它。

另一個例子是,在AlwaysOn可用性組跨數據庫事務是最高支持,幷包括SQL服務器2016(解釋:https://blogs.msdn.microsoft.com/alwaysonpro/2014/01/06/not-supported-ags-with-dtccross-database-transactions/) 據說,這個(在AlwaysOn的AG的跨數據庫事務)將從SQL Server 2017開始支持。

TLDR;如果您正在使用分佈式事務並且未使用任何異常情況(如傳統鏈接服務器提供程序或AlwaysOn可用性組),則可以按預期方式進行操作。

+1

是否僅在接收位置上提供transactionIsolationLevel設置,並且只能通過添加sqlAdapterInboundTransactionBehavior行爲? https://msdn.microsoft.com/en-us/library/dd788041.aspx – Dijkgraaf

+0

更正接收位置​​是唯一可用的方式,包括「環境事務」的設置。我確信這是關於發送端口的,因此我沒有提到這一點,所以非常好! –

+0

很好的解釋。所以我們有AlwaysOn的SQL Server 2014。所以我的跨數據庫程序不支持事務處理,對嗎? – Mario

相關問題