SQL Server 2016 では、AlwaysOn で DTC (分散トランザクション) がサポートされるとアナウンスされています。
これに関連する情報を軽くまとめてみたいと思います。
2016/4/15 追記
最新の情報を確認したところ、Windows Server 2012 R2 に KB?3090973 をインストールすることで、DTC がサポートされるらしいです。
Availability Groups must be running on Windows Server 2016 or Windows Server 2012 R2. For Windows Server 2012 R2, you must install the update in KB3090973 available at https://support.microsoft.com/en-us/kb/3090973.
SQL Server 2014 までの制限については、データベース ミラーリングまたは AlwaysOn 可用性グループではサポートされない複数データベースにまたがるトランザクション (SQL Server) に記載されています。
# データベース ミラーリングおよび複数データベースにまたがるトランザクション を見たほうが日本語はわかりやすいかもしれません。
ここに、複数のデータベースにまたがるトランザクションとDTC についての利用制限が記載されています。
ほかにも
Not-Supported: AGs With DTC/Cross-Database Transactions / [SQL Server] 高可用性ソリューションについて / データベースミラーリングをクロスデータベース トランザクション または分散トランザクションと併用する場合の問題 でも、この件について触れられています。
細かな動作については、
- データベースミラーリング(DBM)利用時のアプリケーション設計・実装の注意点データベースミラーリング(DBM)利用時のアプリケーション設計・実装の注意点
- Understanding Cross-Database Transactions in SQL Server
が参考になります。
# 日本語 PDF は赤間さん資料だったかと。
この制限が SQL Server 2016 の High Availability Enhancements として緩和されるようになります。
これについては、SQL Server 2016 の情報が公開された時からアナウンスが行われていたのですが、最近になって、
AlwaysOn Availability Groups supports distributed transactions and the DTC on Windows Server 2016. For more information, see SQL Server 2016 Support for DTC and AlwaysOn Availability Groups.
というように情報が追記されたようです。
DTC サポートについては、Windows Server 2016 + SQL Server 2016 の組み合わせで実現されるようで、Windows Server 2012 R2 では制限の緩和は行われていないようです。
# SQL Server の機能ではなく、OS の機能に依存しているのでしょうかね。
設定の方法については SQL Server 2016 Support for DTC and AlwaysOn Availability Groups に記載されています。
SQL Server 2016 Support for DTC and AlwaysOn Availability Groups
Cross-database transactions are supported with AlwaysOn Availability Groups beginning with SQL Server 2016 Community Technology Preview 2 (CTP2). The following requirements must be met:
- Availability groups must be running on Windows Server 2016 Technical Preview 2.
- Availability groups must be created with the CREATE AVAILABILITY GROUP command and the WITH DTC_SUPPORT = PER_DB clause. You cannot currently alter an existing availability group.
AlwaysOn 可用性グループを作成する際に、DTC サポートについての設定をすることができ、作成時に有効にすることで設定をすることができます。
# 現状は、作成時にのみ設定ができ、作成後の変更はできません。
実際の動作をシミュレートするスクリプトは作成ができていないのですが、高可用性の環境を構築するにあたっては重要なポイントとなるかと思いますので、この辺のキャッチアップは重要ですね。