1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQLServerで分散トランザクションを利用するための手順(補足記事)

Last updated at Posted at 2022-09-06

概要

SQLServerで分散トランザクションを利用するためにはいくつかの設定が必要です。
この手順が少し複雑だと感じたため、今回この記事で補足をしようと思います。
基本的な手順は、後述する前提条件にある記事を参考にしています。
またSQL Serverを提供しているMicrosoftの公式ドキュメントIBMのドキュメントでも解説されており、この記事はそれらを私なりに補足しながらわかりやすくまとめなおしたものになります。

正確な情報は一次情報である公式ドキュメントを参考ください

記事にしようと思った経緯

  • 分散トランザクションに関するドキュメントが少ないこと
  • 公式ドキュメントは補足事項が少ないと感じたこと
  • SQLServerのバージョンが古い場合の対応方法がわからなかったこと

対象者

この記事では、主に下記の方が対象者となります。

  • (SQLServerで)分散トランザクションを検討中の方
  • 実装してみたが、SQLServerの設定をしておらず詰まった方

環境情報

項目 対象情報
OS Windows
ライブラリ atomikos
言語 Java
フレームワーク SpringBoot

参考記事・前提条件

手順はこちらの記事を参考にしています。
★1つのトランザクションで複数のDB(OracleとSQL Server)を更新するアプリケーションでAtomikosを利用してみた

分散トランザクションの実装方法についてまとめた私の記事です。
comming soon..

こちらは、下記の手順3で詰まった場合に参考になったGitHub issue上でのやり取りです。
翻訳すると、xa_install.sqlに関する情報のやり取りが確認できます。
sp_sqljdbc_xa_install と新しいドライバーリリースについて [GitHub issue]

手順

前提条件となる[★参考記事]を基に下記手順を行ってみてください。

  1. コンポーネントサービスからDTC(分散トランザクションコーディネーター)のXAトランザクションを有効にする
  2. SQL Server 構成マネージャーを起動し、SQL Serverのサービスを再起動させる
  3. sys.sp_sqljdbc_xa_installを実行し、分散トランザクションが利用できるようになる権限を付与する

SQL Server 2017以降の環境だと上記手順のみで分散トランザクションが正常に実装・実行できると思われます。
その場合は、これより下の手順は不要となります。

分散トランザクションを利用できる権限を付与する(手順3 別パターン)

SQLServerのバージョンが古いなどの理由で、sys.sp_sqljdbc_xa_installが存在せず、【手順3】が実行できない場合は下記手順が必要です。
実はここからが、私が記事にして伝えたかったことになります。
(私はSQLServer2012の環境で作業を行っていたため、下記の方法で行っています)

この部分の手順については、公式ドキュメントにも一部記載がありますのでご一読ください。

権限付与の手順

  1. MicrosoftSQL Server JDBC DriverのダウンロードページからJDBC Driverをダウンロードする
  2. ダウンロードしたzipファイルを解凍し、内部のxa ディレクトリ配下に、xa_install.sqlsqljdbc_xa.dll のファイルがあることを確認する
  3. sqljdbc_xa.dllを分散トランザクションを使用する SQL Server インスタンス上の/Binn配下にコピーする
    例えば、C:\Program Files\Microsoft SQL Server\MSSQLFOGEFOGE\MSSQL\Binnに配置します
    MSSQLFOGEFOGEの部分は実際にはinstanceNameが入ると思います
  4. xa_install.sqlをMicrosoft SQLServer Management Studioやコマンドプロンプトなどで実行する
  5. プログラムを実行して挙動を確認する

ここまで実施することで、分散トランザクションは正常に動作すると思います。

補足

手順を何も行っていない時点でプログラムを実行すると、下記のエラーメッセージが表示されました。(期待値の参考までに)

XA コントロール接続を作成できませんでした。エラー: "ストアド プロシージャ 'master..xp_sqljdbc_xa_init_ex'が見つかりませんでした。"

また、手順2番目終了時点でプログラムを実行すると、下記のエラーメッセージが表示されました。

SQLServerException: XA コントロール接続を作成できませんでした。エラー: "接続は閉じられています。"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?