在SQL Server 2017 中,當Alwasyon group啟用了DTC_SUPPORT = PER_DB, 會導致無法建立replicaiton.

stswordman發表於2018-02-27

當Alwasyon group啟用了DTC_SUPPORT = PER_DB, 會導致無法建立replicaiton.無法修改已經存在的replication.

 

原因:

噹噹Alwasyon group啟用了DTC_SUPPORT = PER_DB,任何對於DMV的查詢都被認為是'user xact'.

這回導致下面的語句失敗

begin tran

save tran tran1
select*Fromsys.tables

 

  The 3933 error

'Cannot promote the transaction to a distributed transaction because there is an active save point in this transaction'

 

Replication的建立/修改語句中大量包含了這種格式的語句,會導致其失敗

Workaround

===

1)啟用 start up trace flag 8580。(Impact:對於系統資料庫的語句會被當成常規的Transaction處理,而非DTC transaction,所以當Failover發生時,會影響正在執行的DTC transaction 可能會導致資料的不一致)

或者

2)在進行操作前暫時將DTC_Support關閉,之後再啟用。(如果操作時Failover發生,會影響正在執行的DTC transaction,所以建議在downtime時進行該操作)

 

ALTER AVAILABILITY GROUP dbName SET (     DTC_SUPPORT = none   );

 

相關文章