適用対象: SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio (19 以降のバージョン) の場合
SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
分散トランザクションは、さまざまな方法で異なる Microsoft SQL システムに対して作成できます。
ODBC ドライバーがオンプレミスの SQL Server 用 MSDTC を呼び出す
Microsoft 分散トランザクション コーディネーター (MSDTC) を使用すると、アプリケーションは SQL Server の 2 つ以上のインスタンスにわたってトランザクショントランザクションを拡張またはできます。 分散トランザクションは、2 つのインスタンスが別々のコンピューターでホストされている場合でも機能します。
MSDTC はオンプレミスの Microsoft SQL Server 用にインストールされていますが、Microsoft の Azure SQL Database クラウド サービスでは使用できません。
MSDTC は、C++ プログラムが分散トランザクションを管理するときに、OPEN Database Connectivity (ODBC) 用の SQL Server Native Client ドライバーによって呼び出されます。 Native Client ODBC ドライバーには、Open Group Distributed Transaction Processing (DTP) XA 標準に準拠したトランザクション マネージャーがあります。 このコンプライアンスは MSDTC によって必要です。 通常、すべてのトランザクション管理コマンドは、この Native Client ODBC ドライバーを介して送信されます。 順序は次のとおりです。
C++ Native Client ODBC アプリケーションは、自動コミット モードをオフにして、 SQLSetConnectAttr を呼び出してトランザクションを開始します。
アプリケーションは、コンピューター A 上の SQL Server X 上の一部のデータを更新します。
アプリケーションは、コンピューター B の SQL Server Y 上の一部のデータを更新します。
- SQL Server Y の更新が失敗した場合、両方の SQL Server インスタンスでコミットされていないすべての更新がロールバックされます。
最後に、SQL_COMMIT または SQL_ROLLBACK オプション SQLEndTran (1)を呼び出して、トランザクションを終了します。
(1)
分散トランザクションは 1 つだけ
C++ Native Client ODBC アプリケーションが分散トランザクションに参加しているとします。 次に、アプリケーションは 2 つ目の分散トランザクションに参加します。 この場合、SQL Server Native Client ODBC ドライバーは元の分散トランザクションから離れ、新しい分散トランザクションに参加します。
詳細については、「 DTC プログラマー リファレンスを参照してください。
クラウド内の SQL Database の C# の代替手段
MSDTC は、Azure SQL Database または Azure Synapse Analytics ではサポートされていません。
ただし、SQL Database 用に分散トランザクションを作成するには、C# プログラムで .NET クラス System.Transactions.TransactionScope を使用します。
他のプログラミング言語
次の他のプログラミング言語では、SQL Database サービスでの分散トランザクションのサポートが提供されない場合があります。
- ODBC ドライバーを使用するネイティブ C++
- Transact-SQL を使用したリンク サーバー
- JDBC ドライバー