DB2 4 min read

Db2でテーブル一覧と列の定義を確認する ― list tablesに表が出ないときの逆引き

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のフル記事にまとめています。

▶ Zennで続きを読む(無料)

Db2のLIST TABLESとDESCRIBE TABLE ― 表が出ない・SQL0100Wになるときとdb2lookでの確認


実機ログつきの詳解を読む →

関連: Db2で表があるのに見つからない(SQL0204N) / PostgreSQLのテーブル一覧 / MySQLのテーブル一覧

この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。

現場で引ける Db2 の教科書

現場で引ける!Db2実践エンジニア・バイブル

Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。

アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。

Zennで読む →