Db2 で表を CSV に出すときは EXPORT ... OF DEL を使います。既定のままだと次のように出ます。
$ db2 "export to /tmp/emp.del of del select EMPNO, FIRSTNME, LASTNAME, HIREDATE, SALARY, BONUS, COMM from employee"
$ head -1 /tmp/emp.del
"000010","CHRISTINE","HAAS",19950101,+0152750.00,+0001000.00,+0004220.00
まず見る(結論)
db2 "export to /tmp/emp.csv of del
modified by codepage=1208 decplusblank striplzeros datesiso
select * from employee"
症状 → 原因 → 対処(逆引き)
| 症状 | 原因 | 対処 |
|---|---|---|
日本語が化ける(0x1A になる)。rc=0 |
CLP のコードページが UTF-8 でない(LANG=C、cron など) |
modified by codepage=1208 |
数値が +0152750.00 |
DECIMAL は符号とゼロ埋めつきで出る | decplusblank striplzeros(先頭に空白が1つ残る) |
日付が 19950101 |
DATE の既定は区切りなし | datesiso |
時刻が 2026-10-27-11.28.14.487530 |
TIMESTAMP の既定は Db2 形式 | timestampformat="YYYY-MM-DD HH:MM:SS" |
| 見出し行が無い | EXPORT に見出しを付ける修飾子は無い |
SYSCAT.COLUMNS から列名を作って前に足す |
SQL3132W、rc=2、LOB 列が切れる |
LOB は 32,700 バイトで切り捨て | lobs to ... modified by lobsinfile |
SQL3001C(I/O エラー) |
出力先に書き込み権限が無い・ディレクトリが無い | インスタンスユーザーが書ける場所に出す |
NULL は ,,、空文字は "" で出るので、取り込む側で区別できます。区切り文字は coldel;(セミコロン)や coldel0x09(タブ)で変えられます。
見出し行を付ける
db2 -x "select listagg(COLNAME, ',') within group (order by COLNO)
from SYSCAT.COLUMNS where TABSCHEMA = 'DB2INST1' and TABNAME = 'EMPLOYEE'"
出力された1行(行末の空白は削る)を、EXPORT したファイルの先頭に連結します。
それでも分からないとき(実機ログつきの詳解)
LANG=C で EXPORT した出力を od -c で見た結果、Shift_JIS(codepage=943)での出力、LOB を別ファイルに出したときの中身は、Zennのフル記事にまとめています。
関連: Db2のIMPORT・INGEST・LOAD / Db2のVARCHARに日本語が入らない / db2moveで移行したら表が空
この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。
現場で引ける Db2 の教科書
現場で引ける!Db2実践エンジニア・バイブル
Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。
アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。