##はじめに
現場で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) ②value(previous value for シーケンス名) |
①value(EXAMPLE_SEQ.PREVVAL) ②value(previous value for EXAMPLE_SEQ) |
シーケンス参照(次の値) | ①value(シーケンス名.NEXTVAL) ②value(next value for シーケンス名) |
①value(EXAMPLE_SEQ.NEXTVAL) ②value(next value for EXAMPLE_SEQ) |
シーケンス再設定 | alter sequence シーケンス名 restart with 開始番号 | alter sequence EXAMPLE_SEQ restart with 1 |
権限付与(表・ビュー・ニックネーム) | ①grant 表・ビュー・ニックネーム権限 on table テーブル名 to 権限単位 付与先 ②grant 表・ビュー・ニックネーム権限 on table テーブル名 to public |
①grant select,insert,update,delete on table EXAMPLE to role EXAMPLE_ROL ②grant select,insert,update,delete on table EXAMPLE to public |
権限付与(シーケンス) | ①grant シーケンス権限 on sequence シーケンス名 to 権限単位 付与先 ②grant シーケンス権限 on sequence シーケンス名 to public |
①grant usage on sequence EXAMPLE_SEQ to role EXAMPLE_ROL ②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 load from File.csv of del modefied by codepage=1208 delprioritychar warningcount 1 messages ./log.txt insert into EXAMPLE copy yes to /work/loadtmp ②区分化Load 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では、カタログでそのオブジェクトを記述する行が挿入、更新、または削除される。
そのためカタログ・オブジェクトは自動的に更新されてデータベースの最新の状態が反映された状態になっている。
###・一括件数取得
//テーブル一覧を取得し、変数に格納
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ではない。)
ご覧いただきありがとうございました!