DB2のTIPS

これまで、今の現場で見つけたDB2のTIPSを備忘録として書いておく。

1.カーソルからのロード

db2 "declare cur cursor for select * from table"
db2 "load from cur of cursor insert into table2 nonrecoverable"
これでファイルを介さずにロードができる。

2.ストアド内でのDB2コマンドの実行

ストアドプロシジャー内で発行できるSQLはいわゆるSQL言語だけで、
ロードやインポート、エクスポートなどはDB2コマンドなので実行できない。
しかしADMIN_CMDというルーチンを介して実行できる。

call ADMIN_CMD('RUNSTATS ON TABLE TAB1 AND INDEXES ALL')

ロードコマンドも実行できるが、ストアド内で定義したカーソルを入力として実行は
できない模様。
load from (select * from tab1) insert into tab2 nonrecoverable
ならできる。

3.名前付きパイプを利用したEXPORT/IMPORT

=============================
mknod pipe1 p
exp(){
db2 connect to db user uname using passwd
db2 "export to pipe1 of del select * from tab1"
db2 terminate
}
imp(){
db2 "connect to db user uname using passwd"
db2 "import from pipe1 of del commitcount 20000 insert_update into tab2"
db2 terminate
}

exp &
imp
=============================
上記のシェルを実行すればインポートでもファイルなしでデータの転送ができる。
インポートの場合はINSERT_UPDATEができるのがいい。
COMMITCOUNTで行数を指定して、アクティブログサイズに合わせて大量データ
のINSERT_UPDATEができる。

DB2のバージョンによってはEXPORTでファイルクローズでエラーが出るが
無視してもOK。(FIXが出ている模様)