LoginSignup
6
2

More than 5 years have passed since last update.

Javaエンジニアの私が開発中によく使うdb2コマンドの覚書

Last updated at Posted at 2017-11-10

使用頻度の高いdb2コマンド一覧

普段java開発をしていますが
開発の度に忘れがちなので使用頻度の高いdb2コマンドを羅列していきます。
この辺りのコマンドは早く覚えてしまいたい。

本校執筆時の環境は以下のとおりです
- Mac terminalからDocker内db2へアクセス
- DB2 v11.1.0.0

開始、ログイン、ログアウト、停止

  • DBのインスタンス自体を起動する際
    db2start

  • ログイン
    db2 connect to DATABASE_NAME user USER_NAME using PASSWORD

ローカル環境ならまだ良いけどお客様環境とかでusingしない
パスワードがコンソールに丸見えなのでusing PASSWORDなしで
その後の会話形式で別途パスワードを入力しログインする
  • DBとの接続解除
    db2 connect reset

  • db2へ接続しているアプリケーションを全て強制切断
    db2 force application all

ローカル環境ならまだ良いけどお客様環境とかで(ry
  • DBのインスタンス自体を停止する際
    db2stop

クエリ発行

  • fileファイルを指定して実行

    (以下はカレントディレクトリにfile.ddlファイルがある前提)

    db2 -tvf file.ddl

  • とにかく値(1行、1列)を取得
    db2 "select 1 from sysibm.dual"
    db2 "select 1 from sysibm.sysdummy1" --sysdummy1の方が一般的?
    db2 "values 1"

  • とにかく値(1行、n列)を取得。,区切りでn列を指定。
    db2 "select 1,2 from sysibm.dual"
    db2 "values 1,2"

  • とにかく値(n行、n列)を取得。()でn行を指定。
    db2 "values (1,2),(3,4)"
    #これはできない,dualは1行テーブルのため
    db2 "select (1,2),(3,4) from sysibm.dual"

oracleスキーとしてはdualを使いたくなりましたが
valuesの汎用性はんぱない。

※今回のような任意の値を取得する方法を標準SQLではvaluesを採用しているようです
 INSERT句の values の句ですね。
 当たり前かもしれませんが1クエリで複数行INSERTとかいけるのですね。。。

INSERT INTO user_table
  VALUES  (1, 'user1', 18, hoge@gmail.com,1)
         ,(2, 'user2', 20, fuga@gmail.com,2);

設定、各種確認

  • クエリタイムアウトの設定(SELECT INSERT UPDATE DELETE等含む)
    db2 update db cfg for DATABASE_NAME using locktimeout タイムアウト時間(秒)
初期値は-1です。
この場合「ロックが GRANT される」か「デッドロックが発生する」までロックを待ちます
そのため適宜秒数指定をした方がよいと思います
執筆時点でのIBM Knowledge Centerを見ると
「トランザクション処理 (OLTP) 環境では、30 秒が初期値として適当」とのことです
ロックテストを行いたい場合に数秒単位に縮めるなど適宜設定すると良いと思います
尚、DB再起動が必要です
※「オンライン構成パラメーター」でないため
  • db2設定値確認
    db2 get db cfg for DB_NAME show detail

  • db2にアクセスしているアプリケーションの一覧確認
    db2 list applications

  • 現在接続しているdbの確認
    db2 "values current server"

  • dbの一覧
    db2 list db directory

  • tableの一覧
    db2 list tables

  • tableのレイアウト確認
    db2 describe table TABLE_NAME

  • 特定tableのPK(ユニークキー,外部キーも混在)の調べ方
    db2 "select * from syscat.keycoluse where tabname = 'TABLE_NAME' order by colseq"

  • 特定tableのPK,ユニークキー,外部キーの調べ方(t1.typeで判別)
    db2 "select t1.type, t2.* from syscat.tabconst t1, syscat.keycoluse t2 where t1.tabname = 'TABLE_NAME' and t1.constname = t2.constname order by t1.constname, t2.colseq"

6
2
2

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
6
2