質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

1回答

9425閲覧

db2 における自動コミットについて

hirhir

総合スコア11

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2017/07/04 10:12

db2の自動コミットについて質問させてください。
私の理解では、"db2 list command options"コマンドで-cの設定を確認して、"ON"になっていれば、自動コミットになっていると理解しています。
しかし、delete文では自動コミットされているようですが、insert文では、commitを発行しないと反映されていないようです。

これは、なぜでしょうか。ご存知の方がいらっしゃいましたら教えてください。
よろしくお願いします。

###db2 list commnand optionsの結果。
XXX$ db2 list command options

コマンド行プロセッサーのオプション設定

バックエンド処理待ち時間 (秒) (DB2BQTIME) = 1
バックエンド接続の再試行カウント (DB2BQTRY) = 60
要求キュー待ち時間 (秒) (DB2RQTIME) = 5
入力キュー待ち時間 (秒) (DB2IQTIME) = 5
コマンド・オプション (DB2OPTIONS) =

オプション 説明 現在の設定


-a SQLCA を表示する OFF
-b 自動バインド ON
-c 自動コミット ON
-d XML 宣言を検索して表示する OFF
-e SQLCODE/SQLSTATE を表示する OFF
-f 入力ファイルから読み込む OFF
-i XML データをインデント表示する OFF
-j システム呼び出しの戻りコード OFF
-l 履歴ファイルにコマンドのログをとる OFF
-m 影響を受ける行数を表示する OFF
-n 改行文字を除去する OFF
-o 出力を表示する ON
-p 対話式入力プロンプトを表示する ON
-q 空白文字と改行を保持する OFF
-r 出力を報告書ファイルに保管する OFF
-s コマンド・エラーで実行を停止する OFF
-t ステートメントの終了に文字を設定する OFF
-v 現行コマンドをエコーする OFF
-w FETCH/SELECT 警告メッセージを表示する ON
-x 列見出しの印刷を抑制する OFF
-z 出力ファイルにすべての出力を保管する OFF

###DB2のバージョン
v10.5.0.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SVC34

2017/07/04 21:31

「しかし、delete文では自動コミットされているようですが、insert文では、commitを発行しないと反映されていないようです。」これはどうやって確認しているのでしょうか。
hirhir

2017/07/05 05:59

コメントありがとうございます。実際にDB2 clpを使用して、delete文、insert文を打ったあとに、別セッションでselect count(*)して確認しました。deleteはcommitは打たなくても件数が減り、insertはcommitを打たないと件数が増えませんでした。。。
SVC34

2017/07/05 07:12 編集

同じバージョンで試してみましたが、こちらの環境ではINSERTもCOMMITなしで反映されています。状況が再現するDDL、データとSQLを実行順序が分かるように記載してみてください。
hirhir

2017/07/08 04:32

コメントありがとうございます。1つ分かった事があります。db2のインストールしてあるlinuxにログインして、db2CLP経由でdelete文、insert文を発行すると、どちらもauto commitされます。しかし、db2クライアント(dBeaver)からjdbc経由で発行したdelete文及びinsert文はautocommitではありませんでした。jdbc接続の時のautocommitの設定は、別にあるのでしょうか??
hirhir

2017/07/08 04:43

java.sql.Connectionオブジェクトの中に、setAutoCommit(boolean)メソッドがあるのを見つけました。dbeaverの内部では、ここを"false"としているという事ですかね。そして、db2 list command optionsは、db2 CLPによるコマンド発行に関するオプションを設定しているという事でしょうか。
guest

回答1

0

ベストアンサー

大体状況が分かったので回答に。

結論としては、クライアントであるDBeaver側で自動コミットがOFFになっているためと思われます。

自動コミットの設定はDB全体に共通のものではなく、クライアント側でコネクション毎に別々に設定するものです。これは一般的に他のRDBMSでも同様です。CLPのlist commnand optionsで確認できる設定は、デフォルトの設定を反映してはいますがこれを実行しているCLPのコネクション固有のものです(自動コミット以外の設定値も含め)。

DBeaverは使ったことないですが、JDBCで接続しているのであればコメントされているとおりDBeaverがsetAutoCommit()で自動コミットモードを指定しているはずです。設定の確認、変更は以下のようにすれば出来るようです。

You can toggle auto-commit mode and transactions isolation level in the main toolbar or main menu “Database”.

投稿2017/07/08 05:34

編集2017/07/08 06:04
SVC34

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirhir

2017/07/15 01:21

丁寧な回答をいただきありがとうございます。とても勉強になりました!! 言うまでもないですが、ベストアンサーに選ばさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問