DBのカタログ
#catalog tcpip node HOST_NAME remote 192.168.0.159 server 50000; #catalog db LOCALDB at node NODE_NAME; #connect to LOCALDB user USER using PASS;
EXPORT/INPORT
- export
#cd EXPORT_FILE_PATH #db2move LOCALDB export -u USER -p PASS
- import
#db2 -tvf INPORT_FILE.DDL #db2move LOCALDB import -u USER -p PASS
DB2の接続を強制切断
#db2 force application ( 41408, 55458 ) application-handle
DBバックアップ/リストア
- バックアップ
#db2 stop (force) #db2 start dbm #db2 backup db LOCALDB to FILE_PATH
- リストア
#db2 stop (force) #db2 start dbm #db2 restore db LOCALDB from FILE_PATH
Cygwin環境で、DB2 9のコマンドを使う方法
Windows上のCygwin環境から直接DB2コマンドを実行してもうまく実行できません。それはDB2のコマンドを実行するために必要な環境変数の、DB2CLPとDB2PATHが設定されていないからです。
DB2PATHの方は、DB2を導入したディレクトリなので、SQLLIB¥の在るディレクトリを指定すれば良いのですが、DB2CLPの方はクライアントを区別するための値が入る変数で、何を指定すれば良いか分からずにいました。
- 「/.bashrc」に以下の設定を記述
#export DB2CLP=**$$** #export DB2PATH=C:¥¥SQLLIB
(この方法は、V9でしかちゃんと動かないようです)
DB2の文字コード設定
DB2の文字コードの扱いについて基本的なところを列挙してみます。
まず、DB2はデータベース作成時に"USING CODESET"で文字コードを指定します。表毎には変更できません(例外としてUTF-8以外で作成したデータベースの中にUnicodeの表を作成できる機能があります)。データは必ずそのコードページに変換されて格納されます。つまりSJISを指定して作成されたデータベースにはSJISのコードページで文字が格納されます。
例)
#CREATE DATABASE test USING CODESET IBM-943 TERRITORY JP COLLATE USING SYSTEM
クライアント環境のコードページがデータベースのコードページと異なる場合はDB2クライアントによってコードページ変換が行われます。そのためあまりクライアントはデータベースのコードページを意識する必要はありません。(もちろん変換できない文字などがある場合に問題が出るのですが)
クライアント環境のコードページはDB2クライアントによって自動判別されますが、基本的にOSの設定を継承します(たとえば最近のLinuxだとja_JP.UTF-8であるケースが多い)。それを変更したい場合はレジストリ変数のDB2CODEPAGEで上書きできます。
例)
#db2set DB2CODEPAGE=IBM-943
クライアントがJavaの場合は(JDBCドライバを使用している場合は)クライアントOSに関係なく、クライアントの文字コードはUTF-8と認識されます。
もし、クライアントのコードページがデータベースのコードページを表現できない場合(例:日本語EUCで作成したデータベースに、英語OS環境からアクセスした場合)、接続ができません。
例外として、UTF-8(Unicode)で作成したデータベースは、クライアントがどんなコードページでも接続できる事が保障されます。
以上を踏まえて、データベース作成時のコードページ選択基準をまとめると、
基本的に文字コード変換は起こらないのが一番なので、データベースを作成時に文字コードをクライアントのコードページに合わせるのが無難です。
Javaから利用するなら、UTF-8がお勧めです。
クライアント環境が特定できない、もしくは今後どうなるか分からない場合にはとりあえずUTF-8というのが汎用的に使えるので無難な選択です。ただし、日本語1文字あたり3バイト消費するので列サイズが問題になるケースでは別の文字コードを考慮すべきです。
説明を省略しているCOLLATEは文字のソート順の規定なのですが、UTF-8の場合はUCA400_NOが、それ以外ではSYSTEMがお勧めです。
- UTF-8での作成例:
#CREATE DATABASE mydb AUTOMATIC STORAGE YES #ON '/mydbpath/' #USING CODESET UTF-8 TERRITORY JP #COLLATE USING UCA400_NO #PAGESIZE 4096
- MS-SJIS(=IBM-943)での作成例:
#CREATE DATABASE TEST AUTOMATIC STORAGE YES #ON '/mydbpath/' #USING CODESET IBM-943 TERRITORY JP #COLLATE USING SYSTEM #PAGESIZE 4096
あと、このあたりの情報も参考になりそうです。
※8/8追記: この資料 (DM-03-037)も非常に参考になります。
実行回数が多いSQLをカタログキャッシュから読み出す
SYSIBMADM.TOP_DYNAMIC_SQL表(VIEW)は、V9から新しく追加されたもので、その名前の通り、パッケージキャッシュ上のデータから、実行したSQLの情報を表示させるためのものです。概念は簡単ですが非常に使い勝手が良いVIEWですね。たとえばNUM_EXECUTIONS列にはSQLを実行した回数が入っているので、
#SELECT SUBSTR(STMT_TEXT,1,50), NUM_EXECUTIONS #FROM SYSIBMADM.TOP_DYNAMIC_SQL #ORDER BY NUM_EXECUTIONS DESC
とするだけで、実行回数の多いSQLが順に表示できます。