2017-08-09 84 views
1

我試圖從SourceDb(存在於本地計算機上)到TargetDb(存在於azure &上,可以從SSMS訪問)設置序列容器中的數據流任務。 每當我根據需要使用事務運行包時,我遇到了以下錯誤。用於分佈式事務的SSIS錯誤代碼DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER

錯誤:SSIS錯誤代碼DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。 AcquireConnection方法調用連接管理器「TargetDb」失敗,錯誤代碼爲0xC0202009。在此之前可能會發布錯誤消息,並提供更多關於爲什麼AcquireConnection方法調用失敗的信息。

它工作,如果我刪除該容器的交易。我已正確設置所有分佈式事務設置。我經歷了堆棧溢出的很多鏈接,但沒有爲我工作。請建議解決方案。

我也試過這個過程,通過在我的本地機器上恢復這兩個數據庫。它成功處理交易。包裝沒有任何問題。

回答

2

爲了在ssis中使用事務,您需要打開分佈式事務協調器。另一種方法是在execute sql任務中使用begin Transaction,並在控制流中設置retainsameconnection = True,並且所有需要在事務中執行的dft任務將在此之後執行,最後一個任務將是另一個執行sql任務並提交交易。 按照以下鏈接使用交易,無需在分佈式交易中使用交換機 - https://www.mssqltips.com/sqlservertip/3072/sql-server-integration-services-ssis-transactions-without-msdtc/

+0

不幸的是,DTC(由MSDTC服務控制)不能在Azure上使用。 –

+0

我已經用另一個替代方案更新了我的答案 – sam

+0

謝謝@sam它的工作。 – Pavvy

1

Azure無法參與與本地SQL Servers AFAIK的交易。

Limitations The following limitations currently apply to elastic database transactions in SQL DB:

  • Only transactions across databases in SQL DB are supported. Other X/Open XA resource providers and databases outside of SQL DB cannot participate in elastic database transactions. That means that elastic database transactions cannot stretch across on premises SQL Server and Azure SQL Databases. For distributed transactions on premises, continue to use MSDTC.
  • Only client-coordinated transactions from a .NET application are supported. Server-side support for T-SQL such as BEGIN DISTRIBUTED TRANSACTION is planned, but not yet available.
  • Transactions across WCF services are not supported. For example, you have a WCF service method that executes a transaction. Enclosing the call within a transaction scope will fail as a System.ServiceModel.ProtocolException.

有關分佈式事務和Azure的完整討論,請參閱this documentation at Microsoft

+0

謝謝。我沒有意識到這一點。 – Pavvy