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が出ている模様)
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が出ている模様)