はじめに
DB2を使用しているうちに確認やメンテナンス等に使えそうなSQL・コマンドをまとめておきます。
統計情報の更新日時を取得するSQL
1 2 3 4 | -- テーブルの統計情報 SELECT TABSCHEMA, TABNAME, STATS_TIME FROM SYSCAT.TABLES WHERE TYPE = 'T' -- インデックスの統計情報 SELECT TABSCHEMA, TABNAME, INDNAME, COLNAMES, STATS_TIME FROM SYSCAT.INDEXES |
テーブルの場合はSYSCAT.TABLESビュー、インデックスの場合はSYSCAT.INDEXESビューに格納されています。それぞれの抽出項目STATS_TIMEに最後に統計情報を取得した日時が登録されています。DB2のパフォーマンスが落ちてきたけど最後に統計情報を取得したのはいつなのかな?となった時に使ってください。 TABSCHEMAはスキーマ名TABNAMEにはテーブル名が入っています。特定のテーブルの統計情報取得日時が確認したい場合は条件を指定してください。
インデックスの確認SQL
1 2 | SELECT TABNAME, INDNAME, COLNAMES FROM SYSCAT.INDEXES WHERE TABNAME = 'T_TABNAME' |
インデックスの確認はSYSCAT.INDEXESビューを参照します。INDNAME項目がインデックス名、COLNAMES にインデックスの構成項目が登録されています。テーブル名で抽出すればどのテーブルにどんなインデックスがはられているかすぐに確認することができます。
ビューを構成するSQLを確認するSQL
1 | SELECT VARCHAR(TEXT, 20000) FROM SYSCAT.VIEWS WHERE VIEWNAME = 'TEST_VIEW' |
ビューを構成するSQLを確認するにはSYSCAT.VIEWSビューを参照します。TEXTという項目にビューを構成するSQLが格納されています。VARCHARに変換しているのですがTEXT項目の型はCLOB型なのでCSEなどのデータベースビューワでは文字を表示できないものもあります。VARCHAR型に変換することで文字列としてSQLを確認することができます。
パッケージの状態を確認するSQL
1 | SELECT * FROM SYSCAT.PACKAGES WHERE PKGSCHEMA = 'OWNER' |
パッケージの状態を確認するにはSYSCAT.PACKAGESビューを参照します。バインド日付を確認したり、リバインドが必要でないか確認したりできます。条件はスキーマ名を指定しています。目的のパッケージが抽出できなかった場合にはそのスキーマにバインドされていません。
テーブルの複製に必要な DDLを抽出するコマンド
1 | db2look -d owner -e -t T_TABNAME -o T_TABNAME_DDL.sql |
今あるテーブルと同じものを作成するためのSQLを抽出できるコマンドがDB2にはあります。それがdb2lookコマンドです。オプションはそれぞれ以下になります。
-d : DB名
-e : データベースの複製に必要な DDL ファイルを抽出
-t : テーブル名
-o : 出力ファイル名
開発環境と同じテーブルを本番環境に作成しなければならない場合、またはその逆をしなければならない場合にとても役に立ちます。