DISTRICT 37

なにか

DB2のautocommit設定

DB2は自動コミットがデフォルトでONになっているので、うっかり更新してしまって泣くこともしばしば。ということで自動コミット(auto-commit)の設定方法。

auto-commitのデフォルト設定

DDLでもDMLでもCLI実行時にauto-commmit関連の設定を変えることで対応ができる。 IBM Knowledge CenterによるとCLI実行時に、下記の通りにオプションを読み込んで設定するとの事。

  1. デフォルト・オプションを設定します。
  2. DB2OPTIONS を読み取って、デフォルトを一時変更します。
  3. コマンド行を読み取って、DB2OPTIONS を一時変更します。
  4. UPDATE COMMAND OPTIONS からの入力を、最終的な対話式一時変更として受け入れます。

デフォルト設定は以下のコマンドで確認できる

db2 ? options

確認するのにヘルプコマンドを使うのが気持ち悪いが、これで出てくる値がデフォルト。自動コミットはONとなっている。

オプション  説明                                       現在の設定
------  ----------------------------------------  ---------------
(略)
  -c    自動コミット                              ON
(略)

このデフォルト設定は頑張ったけどどうも変えられないので、2か3で対応したらいい。4はよくわからんので割愛。

DB2OPTIONSの設定

DB2環境変数としてDB2OPTIONSを設定することでデフォルトを上書きできる。なので、この対応でとりあえずは完了かと。

まずはDB2OPTIONSの確認。

db2 list command options

DB2OPTIONSの確認とか言いながらcommand optionsと打つのがまた気持ち悪い。

オプション  説明                                       現在の設定
------  ----------------------------------------  ---------------
(略)
  -c    自動コミット                              ON
(略)

変更前ならデフォルト設定と同じ値が設定されているはず。次のコマンドでこの値を更新する。

db2set DB2OPTIONS=+c

これで自動コミットをOFFに設定できる。DB2OPTIONS=に続いた「-c」でONにして「+c」でOFFにするというまたまた直観的ではない気持ち悪い設定。これでDB2OPTOINSを確認すると確かに自動コミットがOFFになっているのがわかる。

オプション  説明                                       現在の設定
------  ----------------------------------------  ---------------
(略)
  -c    自動コミット                              OFF
(略)

コマンド発行時に設定

例えばUPDATEのSQLとかを書く時に設定ができる。ここでDB2OPTIONで設定した値をさらに上書きできる。

db2 +c update your_table set cl1 = 'foo'

updateの前に「+c」を付けることで自動コミットをOFFにできる。DB2OPTIONSと同様に「-c」で自動コミットをONにすることも可能。実質ここの設定が王様になるので本来はSQLを打つ時にこれを設定すクセをつけるべきなんだろうと思う。まぁこれはSQLにおけるDB2の方言なので、他のRDBMSに応用できないから別にいいですね。

auto-commitに限らず他のオプションも同様の対応でいいかと。