Db2 の表の一覧は db2 list tables、列の定義は db2 describe table で出します。どちらも CLP のコマンドで、DB に接続してから打ちます。
まず見る(結論)
db2 connect to sample
db2 list tables for schema DB2INST1
db2 describe table DB2INST1.EMPLOYEE
- 引数なしの
list tablesは接続ユーザーと同じ名前のスキーマしか出さない。SET CURRENT SCHEMAを変えても結果は同じだった for schemaのスキーマ名は小文字で書いても通る- 既定値や制約まで見るなら
SYSCAT.COLUMNSかdb2look
症状 → 原因 → 対処(逆引き)
| 症状 | よくある原因 | まず打つ手 |
|---|---|---|
list tables に目当ての表が無い |
表が別スキーマにある | list tables for schema <スキーマ> |
for schema を付けても 0 件・エラーなし |
スキーマ名の綴り違い(存在しないスキーマでもエラーにならない) | SYSCAT.TABLES を TABSCHEMA ごとに数える |
describe table が SQL0100W で 0 件 |
表が無い・スキーマ違い・"employee" のように引用符で小文字指定 |
スキーマ付き・大文字で指定する |
SYSCAT.TABLES を LIKE '%emp%' で引くと 0 件 |
カタログの名前は大文字 | LIKE '%EMP%' |
CARD が -1 |
統計が採られていない(行数ではない) | 行数は SELECT COUNT(*) |
list tables の Type 列は T=表、V=ビュー、A=別名、S=MQT です。list tables for all はシステムカタログまで出すので、SAMPLE では 565 件になりました。
SQL で引く
-- スキーマごとの表の数(アプリのスキーマを探す)
SELECT TABSCHEMA, COUNT(*) FROM SYSCAT.TABLES
WHERE TABSCHEMA NOT LIKE 'SYS%' GROUP BY TABSCHEMA;
-- 列の定義(COLNO は 0 から。KEYSEQ が入っている列が主キー)
SELECT COLNO, COLNAME, TYPENAME, LENGTH, SCALE, NULLS, DEFAULT, KEYSEQ
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = 'DB2INST1' AND TABNAME = 'EMPLOYEE'
ORDER BY COLNO;
CREATE 文の形で欲しいときは db2look -d sample -e -t EMPLOYEE -z DB2INST1 です。
それでも分からないとき(実機ログつきの詳解)
DESCRIBE SELECT で式の型を見る方法、db2look -t が表を参照するビューや関数まで出力する点は、Zennのフル記事にまとめています。
関連: Db2で表があるのに見つからない(SQL0204N) / PostgreSQLのテーブル一覧 / MySQLのテーブル一覧
この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。