DB2のautocommit設定
DB2は自動コミットがデフォルトでONになっているので、うっかり更新してしまって泣くこともしばしば。ということで自動コミット(auto-commit)の設定方法。
auto-commitのデフォルト設定
DDLでもDMLでもCLI実行時にauto-commmit関連の設定を変えることで対応ができる。 IBM Knowledge CenterによるとCLI実行時に、下記の通りにオプションを読み込んで設定するとの事。
- デフォルト・オプションを設定します。
- DB2OPTIONS を読み取って、デフォルトを一時変更します。
- コマンド行を読み取って、DB2OPTIONS を一時変更します。
- 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に限らず他のオプションも同様の対応でいいかと。