酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

SQL ServerからDB2へのデータ移行

SQL ServerからDB2へデータ移行(http://d.hatena.ne.jp/ch3cooh393/20090722/1248275521)を検討している、というエントリを随分前に書いた続きです。

SQL ServerからDB2へデータ移行を行う必要があって、一日数千万件のデータを扱うのでとても手作業ではまかないきれません。IBMから提供されている IBM Migration Toolkitが事情により使えなかったので、最初に思いついていたCSV形式を経由する方法を採用しました。

SQL ServerからCSVファイルをエクスポートする

bcp <export_sql> queryout <file_name> -U <user_id> -P <password> -S %PARM_SERVER_ADDRESS% -t , -r \n -f %PARM_FORMAT%

count(*)などの名前を持たない集計関数を使った取得列には、別名(エイリアス)を付けていないと上手く抽出出来ない事があるようです。

CSVファイルを作成する為には、まず-fオプションを使用せずにデータを取得し、フォーマットファイルを作成します。

作成したフォーマットファイルはそのまま使えず、型をSYBCHARに、エンコード情報をJapanese_BIN2にする必要があります。こうしないとテキストエディタに開いても文字化けした状態で格納されてしまいます。

CSVファイルをDB2へインポートする

先ほどSQL Serverから抽出したCSVファイルをDB2へインポートする手順です。こちらは至って普通にImportオプションで読み込ませるだけです。

DB2 CONNECT TO <server> USER <user_id> USING <password>

DB2 IMPORT FROM <file_name> OF DEL METHOD P(<feild_positions>) COMMITCOUNT 30000 MESSAGES <log_file_name> INSERT INTO <table_name>(<field_names>)

DB2 TERMINATE