DB2で列のサイズを変える

DB2でのVARCHAR型の列のサイズの変更は
ALTER TABLEの ALTER COLUMN で SET DATA TYPE VARCHARというのを使います。
書式は
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0000888.html
を参照してもらいたいですが
掻い摘んでしまえばこんな感じ

db2 "ALTER TABLE テーブル名 ALTER COLUMN カラム名(列名) SET DATA TYPE VARCHAR(変更したいサイズ)"

懸念することは、表が馬鹿デカくなっていたりすると
実行に時間がかかってしまうんじゃないかということ。。
もし、時間がかかってしまうのならサービスを停止して・・、、
と、考えただけでも苦痛です。。


手元になぜかやったらめったらデータが入っているサーバがあるので
このテスト環境でまずは試してみましょう。



検証:

レコード数を調べる

$ db2 "SELECT substr(TABNAME,1,40) as tablename, CARD FROM SYSCAT.TABLES  where TABNAME='xxxxx' "

TABLENAME                                CARD                
---------------------------------------- --------------------
xxxxx                                                22556224


現状のテーブルスキーマ

$ db2 describe table xxxxx

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
PATH1                           SYSIBM    VARCHAR                     64     0 Yes   
PATH2                           SYSIBM    VARCHAR                     64     0 Yes   
PATH3                           SYSIBM    VARCHAR                     64     0 Yes   

列名PATH3のサイズを変更(timeコマンド付で実行)

$ time db2 "ALTER TABLE xxxxx ALTER COLUMN PATH3 SET DATA TYPE VARCHAR(80)"
DB20000I  The SQL command completed successfully.

real    0m0.109s
user    0m0.002s
sys     0m0.094s

一瞬で完了!
めがっさ早いにょろ(ww



変更後のテーブルスキーマ

$ db2 describe table xxxxx

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
PATH1                           SYSIBM    VARCHAR                     64     0 Yes   
PATH2                           SYSIBM    VARCHAR                     64     0 Yes   
PATH3                           SYSIBM    VARCHAR                     80     0 Yes   

結論:
DB2 ALTER TABLE ALTER COLUMNでの変更に要する時間は列数には影響がない

ので、本番稼働中にやっちゃってもいいんじゃないかな〜