使用頻度の高いdb2コマンド一覧
普段java開発をしていますが
開発の度に忘れがちなので使用頻度の高いdb2コマンドを羅列していきます。
この辺りのコマンドは早く覚えてしまいたい。
本校執筆時の環境は以下のとおりです
- Mac terminalからDocker内db2へアクセス
- DB2 v11.1.0.0
開始、ログイン、ログアウト、停止
DBのインスタンス自体を起動する際
db2startログイン
db2 connect toDATABASE_NAME
userUSER_NAME
usingPASSWORD
ローカル環境ならまだ良いけどお客様環境とかでusingしない
パスワードがコンソールに丸見えなのでusing PASSWORDなしで
その後の会話形式で別途パスワードを入力しログインする
DBとの接続解除
db2 connect resetdb2へ接続しているアプリケーションを全て強制切断
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 forDATABASE_NAME
using locktimeout タイムアウト時間(秒)
初期値は-1です。
この場合「ロックが GRANT される」か「デッドロックが発生する」までロックを待ちます
そのため適宜秒数指定をした方がよいと思います
執筆時点でのIBM Knowledge Centerを見ると
「トランザクション処理 (OLTP) 環境では、30 秒が初期値として適当」とのことです
ロックテストを行いたい場合に数秒単位に縮めるなど適宜設定すると良いと思います
尚、DB再起動が必要です
※「オンライン構成パラメーター」でないため
db2設定値確認
db2 get db cfg for DB_NAME show detaildb2にアクセスしているアプリケーションの一覧確認
db2 list applications現在接続しているdbの確認
db2 "values current server"dbの一覧
db2 list db directorytableの一覧
db2 list tablestableのレイアウト確認
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"