web-dev-qa-db-ja.com

リンクサーバーの分散トランザクションを有効にするにはどうすればよいですか?

System i Access ODBC Driverを使用して、IBM Iseriesシステム上のdb2データベースを指すリンクサーバーを持つSQL Server 2012インスタンスがあります。

分散トランザクションを有効にしようとしています。このプロバイダーは IBMのドキュメント に従ってそれらをサポートしていると思います(そのリンクを誤解している場合を除きます)。

次のクエリを実行しています。

BEGIN TRANSACTION
    UPDATE LINKEDSERVER.LINKEDDATABASE.SCHEMANAME.TABLENAME SET COLUMN = VALUE

    SELECT CAST('qwerty' as integer) -- we want an error here so the transaction fails
COMMIT TRANSACTION

次のエラーが発生します。

リンクサーバー "LINKEDSERVER"のOLE DBプロバイダー "MSDASQL"がメッセージ "[IBM] [System i Access ODBC Driver] Enlist with DTC phase failed。2"を返しました。メッセージ7391、レベル16、状態2、2行目リンクサーバー "LINKEDSERVER"のOLE DBプロバイダー "MSDASQL"が分散トランザクションを開始できなかったため、操作を実行できませんでした。

このエラーに関して私が行ったすべての調査は、分散トランザクションをdisableさせたいが、機能させたくない人々と出会いました。リンクサーバーのプロパティで[分散トランザクションのプロモーションを有効にする]をtrueに設定しました。

これを機能させる方法はありますか?

編集:詳細情報/更新。私はこれをあきらめて、助けを待つ準備ができていました。Windowsログでこれに気づいたとき:

XAトランザクションが無効になっているときに、呼び出し元がXAリソースを登録しようとしました。

MSDTCの設定を変更する方法を教えてくれた this link が見つかりました。設定を試してサーバーを再起動した後、動作が開始されました(種類)(特に、ネットワークDTCアクセスを有効にし、インバウンド/アウトバウンド/ XAトランザクションを有効にします)。

enter image description here

現在、クエリは実行され、期待どおりにコミット/ロールバックされますが、一部の時間には機能するように見えますが、それ以外の場合はエラーになります。エラーは:

リンクサーバー "LINKEDSERVER"のOLE DBプロバイダー "MSDASQL"がメッセージ "[IBM] [System i Access ODBC Driver] Internal driver error。"を返しました。

EDIT2:今ではもうまったく機能していません。エラーメッセージ:

リンクサーバー "LINKEDSERVER"のOLE DBプロバイダー "MSDASQL"がメッセージ "ODBCドライバーが新しいトランザクションを開始できませんでした。"を返しました。 OLEリンクサーバー "LINKEDSERVER"のDBプロバイダー "MSDASQL"がメッセージ "[Microsoft] [ODBC Driver Manager] Illegal operation while while a transaction server component transaction"を返しました。

5
Mansfield

ローカルDTCプロパティの設定に加えて、プログラムDistributed Transaction Coordinatorが通過できるように、両方のマシンでファイアウォールを開く必要があります。

Allow Distributed Transaction Coordinator to communicate through Windows Firewall

クエリエディターウィンドウでT-SQLをテストする場合は、Microsoftの提案に従ってXACT_ABORTを必ずオンにしてください。

ほとんどのOLE DBプロバイダー(SQL Serverを含む)に対して暗黙的または明示的なトランザクションのデータ変更ステートメントに対してXACT_ABORTをONに設定する必要があります。このオプションが不要なのは、プロバイダーがネストされたトランザクションをサポートしている場合のみです。 。

私の場合、ローカルDTCプロパティの場合、必要なものは DTC Settings

5
DVu

DTCおよびSQL Browserサービスが正しいサービスアカウントで実行されていることを確認してください。

詳細な構成のヘルプについては、次のMS-BOLリンクも確認してください。

SQL Serverで分散トランザクションを使用するための推奨MSDTC設定

このツールを使用して、システムに適切なMSDTC構成があるかどうかを確認できます。

2012ベストプラクティスアナライザー

最後だが大事なことは

XAトランザクションについて

試行中のサンプルクエリをお知らせください。

0
Anup Shah