【まとめ】決定版！現場でよく使うDb2コマンド集

##はじめに
現場でDb2を使っており、よく使うコマンドを纏めました。

##コマンド

架空でDB名などは以下としておきます。
DB名     ：「QIITADB」
スキーマ名：「UPALLNIGHT」
テーブル名：「EXAMPLE」

| 用途             |     コマンド       |      使用例      |
|:--------------|:----------------------|:------------------|
| DB接続|connect to DB名|connect to QIITADB|
|DB切断　|terminate　|-　 |
|スキーマ設定　|set schema スキーマ名　|set schema UPALLNIGHT|
|スキーマ参照　|values(current schema)　|-　|
|日時変換　|timestamp_format('値','日時書式')　|select timestamp_format('2019/10/01 12:00:00','YYYY/MM/DD HH24:MI:SS') from EXAMPLE|
|テーブル一覧　|list tables for schema スキーマ名　|list tables for schema UPALLNIGHT　|
|テーブル構成参照　|describe table テーブル名　|describe table EXAMPLE|
|テーブル構成コピー　|create table 新テーブル名 as (select文) definition only　|create table NEW_EXAMPLE as (select * from EXAMPLE) definition only　|
|TRUNCATE　|truncate table テーブル名 immediate　|truncate table EXAMPLE immediate　|
|Export　|export to ファイル名 of del modified by timestampformat="日時書式" codepage=コードページ select文|export to File.csv of del modified by timestampformat="YYYYMMDDHHMMSS.UUUUUU" codepage=1208 select * from UPALLNIGHT.EXAMPLE|
|Import(全データ削除)　|import from /dev/null of del replace into テーブル名　|import from /dev/null of del replace into UPALLNIGHT.EXAMPLE|
|Import　|import from ファイル名 of del modified by timestampformat="日時書式" codepage=コードページ delprioritychar 登録タイプ into テーブル名　|import from File.csv of del modified by timestampformat="YYYYMMDDHHMMSS.UUUUUU" codepage=1208 delprioritychar insert into UPALLNIGHT.EXAMPLE|
|インデックス確認　|describe indexes for table テーブル名 show detail　|describe indexes for table EXAMPLE show detail　|
|シーケンス参照(現在値)　|①value(シーケンス名.PREVVAL)<br>②value(previous value for シーケンス名)　|①value(EXAMPLE_SEQ.PREVVAL)<br>②value(previous value for EXAMPLE_SEQ)|
|シーケンス参照(次の値)　|①value(シーケンス名.NEXTVAL)<br>②value(next value for シーケンス名)　|①value(EXAMPLE_SEQ.NEXTVAL)<br>②value(next value for EXAMPLE_SEQ)|
|シーケンス再設定　|alter sequence シーケンス名 restart with 開始番号　|alter sequence EXAMPLE_SEQ restart with 1　|
|権限付与(表・ビュー・ニックネーム)　|①grant 表・ビュー・ニックネーム権限 on table テーブル名 to 権限単位 付与先<br>②grant 表・ビュー・ニックネーム権限 on table テーブル名 to public |①grant select,insert,update,delete on table EXAMPLE to role EXAMPLE_ROL<br>②grant select,insert,update,delete on table EXAMPLE to public|
|権限付与(シーケンス)　|①grant シーケンス権限 on sequence シーケンス名 to 権限単位 付与先<br>②grant シーケンス権限 on sequence シーケンス名 to public　|①grant usage on sequence EXAMPLE_SEQ to role EXAMPLE_ROL<br>②grant usage on sequence EXAMPLE_SEQ to public|
|Runstats　|runstats on table テーブル名 with distribution and detailed indexes all　|runstats on table EXAMPLE with distribution and detailed indexes all　|
|Reorg　|reorg table テーブル名 [index インデックス名]|reorg table EXAMPLE [index EXAMPLE_IND]　|
|Reorgペンディング確認　|select VARCHAR(TABSCHEMA,30) as TABSCHEMA, VARCHAR(TABNAME,30) as TABNAME, REORG_PENDING, NUM_REORG_REC_ALTERS from SYSIBMADM.ADMINTABINFO where REORG_PENDING = 'Y' |-　|
|Reorgペンディング解除　|reorg table テーブル名|reorg table EXAMPLE |
|Load　|load from ファイル名 of del lobs from lobファイルディレクトリ名/ modefied by timestampformat="YYYYMMDDHHMMSS.UUUUUU" codepage=コードページ delprioritychar warningcount 1 messages メッセージファイル名 登録タイプ into テーブル名 copy yes to tmpディレクトリ名 nonrecoverable indexing mode incremental partitioned db config mode partition_and_load part_file_location パーティション作業用ディレクトリ/ output_dbpartnums(1 to 最大区分数) isolate_part_errs no_location　|①通常Load<br>load from File.csv of del modefied by codepage=1208 delprioritychar warningcount 1 messages ./log.txt insert into EXAMPLE copy yes to /work/loadtmp <br>②区分化Load<br>load from File.csv of del modefied by codepage=1208 delprioritychar warningcount 1 messages ./log.txt insert into EXAMPLE copy yes to /work/loadtmp indexing mode incremental partitioned db config mode partition_and_load part_file_location /data/work/ output_dbpartnums(1 to 18) isolate_part_errs no_location|
|Loadペンディング確認　|select TABSHEMA, TABNAME, STATUS, ACCESS_MODE from SYSCAT.TABLES where STATUS <>'N' or ACCESS_MODE<>'F'　|-　|
|Loadペンディング解除　|load from /dev/null of del terminate into テーブル名　|load from /dev/null of del terminate into EXAMPLE　|
|テーブル一括取得 |select TABNAME from SYSCAT.TABLES where TYPE='T' and TABSCHEMA ='スキーマ名' order by TABSCHEMA,TABNAME |select TABNAME from SYSCAT.TABLES where TYPE='T' and TABSCHEMA ='UPALLNIGHT' order by TABSCHEMA,TABNAME  |
|ビュー一括取得 |select TABNAME from SYSCAT.TABLES where TYPE='V' and TABSCHEMA ='スキーマ名' order by TABSCHEMA,TABNAME |select TABNAME from SYSCAT.TABLES where TYPE='V' and TABSCHEMA ='UPALLNIGHT' order by TABSCHEMA,TABNAME |

##おまけ

###・カタログとは？？
DB2 が制御するデータに関する情報が格納されている表集合の総称。
カタログ・ビュー（SYSCAT、SYSSTAT ビュー）とテーブルの集合で構成されている。
カタログ・ビューには、表、ビュー、 索引など DB2 のオブジェクトに関する情報が含まれている。
オブジェクトを作成、変更、またはドロップすると、DB2では、カタログでそのオブジェクトを記述する行が挿入、更新、または削除される。
そのためカタログ･オブジェクトは自動的に更新されてデータベースの最新の状態が反映された状態になっている。


###・一括件数取得

```db2
//テーブル一覧を取得し、変数に格納
tab_list=`db2 -x "select TABSCHEMA ||'.'|| TABNAME from SYSCAT.TABLES where TYPE='T' and TABSCHEMA ='UPALLNIGHT' order by TABSCHEMA,TABNAME"`

//変数を元にすべてのテーブル件数を取得
date;for tab in ${tab_list};do db2 -x "select ${tab},count(1) from ${tab}";done;date

//このパターンは、REORGやRUNTATS、データ削除にも利用可能
date;for tab in ${tab_list};do db2 -v "runstats on table ${tab} with distribuion and detailed indexes all;done;date
```

###・Db2オプション
先頭のマイナス(-)はオプションをONへ、プラス(+)はオプションをOFFにする。


|    オプション          |     用途       | 
|:--------------|:----------------------|
|-c |自動コミットON |
|-e|SQLCODEまたはSQLSTATEを表示 |
|-f |コマンド入力を標準入力ではなくファイルから読み取り |
|-m |INSERT/UPDATE/DELETE/MERGEの影響を受ける行数を表示 |
|-o|出力データ及びメッセージを標準衆力に表示 |
|-t |セミコロンをステートメント終了文字として使用 |
|-v |コマンド・テキストを標準出力へエコー |
|-x|列名などのヘッダーなしでデータを戻す |
|-z |すべての出力をファイルにリダイレクト |

###・コードページ種類
UTF-8　⇒　1208
SJIS　⇒　943
load,imoportする際は、取り込みファイルの文字コードに合わせて指定する。
DBの文字コードを指定するのではない。

##おわりに
Db2を使っている方はあまり聞いたことありませんが、少しでもお役に立てれば。
(ちなみにDb2の正式名称bは小文字です。DB2ではない。)

ご覧いただきありがとうございました！