IBM DB2 - エクスポート・インポート - .csv
1. 概要 普段、テーブルを「.csv」「.tsv」の形式で、エクスポートしたり、インポートしたりするのは、「A5:SQL Mk2」を使用することが多いのですが。 事情があって、直接「IBM DB2」のデータベースからエクスポートして、インポートする必要があったのです。 いつもは、なかなか思うようにできなかったのですが、うまいこといったので、メモを残しておきます。 ただし、これ、テーブルに「BLOB」の列が存在する場合、うまくいきません。「BLOB」カラムを含むものをエクスポートする場合は、次ページをご参照ください。 サーバ・クライアント共に、「Windows」で、「Windows」での文字コードは、「SHIFT-JIS」であるものとします。 本ページは、下記のサイトを参考にさせていただきました。 「Db2のEXPORT/IMPORTコマンドで文字コード変換を行う!」 「DB2 の DB とクライアントのキャラセットの違いによる文字化けの確認」 「【Db2】データベースへの接続と切断」 2. エクスポート クライアントマシンから、「DB2 コマンドウィンドウ」を開いて。 下記でまず、接続。 db2 CONNECT TO データベース USER ユーザ名 USING パスワード 下記のような表示があります。 データベース接続情報 データベース・サーバー = DB2/アーキテクチャ バージョン SQL 許可 ID = ユーザ ローカル・データベース別名 = データベース 下記のコマンドで、「.csv」へエクスポート。 db2 EXPORT TO ファイル名.csv of DEL SELECT * FROM テーブル 下記のような表示があります。 SQL3104N エクスポート・ユーティリティーが、ファイル "ファイル名.csv" へのデータのエクスポートを開始しています。 SQL3105N エクスポート・ユーティリティーが、"59" 行のエクスポートを完了しました。 エクスポートされた行数: 59 行数は、テーブルによってまちまちです。 データベースを切断します。 db2 TERMINATE 下記の表示があります。 DB20000I TERMINATE コマンドが正常に完了しました。 「DISCONNECT」にしたら、エラーになりました。 クライアントだと、「DISCONNECT」は、エラーになるのかしら? ちゃんと切断されたか気になったので、サーバで、「db2 list applications」で確認してみましたらば、きちんと切断されておりました。 3. インポート 出力した、「.csv」をインポートします。 db2 CONNECT TO データベース USER ユーザ名 USING パスワード 出力は、前項と同じなので、割愛。 全行入力するので、テーブルをクリア。 db2 TRUNCATE TABLE テーブル 下記の出力。 DB20000I SQL コマンドが正常に完了しました。 インポート。 db2 IMPORT FROM ファイル名.CSV OF DEL MODIFIED BY CODEPAGE=943 REPLACE INTO テーブル 「MODIFIED BY CODEPAGE=943」は、文字コードの変換を行っています。なんかコードが違うような気がしますが、これでうまくいきます。 「REPLACE」は、別のワードかもしれないが、全部クリアしているので、うまくいきます。 下記の出力。 SQL3109N ユーティリティーが、ファイル "ファイル名.CSV" からデータのロードを開始しています。 SQL3110N ユーティリティーが処理を完了しました。 "59" 行が、入力ファイルから読み取られました。 SQL3221W ...COMMIT WORK が開始されました。入力レコード・カウント = "59" SQL3222W ...すべてのデータベース変更の COMMIT が成功しました。 SQL3149N "59" 行が、入力ファイルから処理されました。 "59" 行が、正常に表に挿入されました。 "0" 行が、拒否されました。 読み込まれた行数 = 59 スキップされた行数 = 0 挿入された行数 = 59 更新された行数 = 0 拒否された行数 = 0 コミットされた行数 = 59 行数は、前項と同様。 前項と同様、切断します。 後で、テーブルを確認したら、うまいことはいっておりました。
「Db2のEXPORT/IMPORTコマンドで文字コード変換を行う!」 「DB2 の DB とクライアントのキャラセットの違いによる文字化けの確認」 「【Db2】データベースへの接続と切断」
db2 CONNECT TO データベース USER ユーザ名 USING パスワード
データベース接続情報 データベース・サーバー = DB2/アーキテクチャ バージョン SQL 許可 ID = ユーザ ローカル・データベース別名 = データベース
db2 EXPORT TO ファイル名.csv of DEL SELECT * FROM テーブル
SQL3104N エクスポート・ユーティリティーが、ファイル "ファイル名.csv" へのデータのエクスポートを開始しています。 SQL3105N エクスポート・ユーティリティーが、"59" 行のエクスポートを完了しました。 エクスポートされた行数: 59
db2 TERMINATE
DB20000I TERMINATE コマンドが正常に完了しました。
db2 TRUNCATE TABLE テーブル
DB20000I SQL コマンドが正常に完了しました。
db2 IMPORT FROM ファイル名.CSV OF DEL MODIFIED BY CODEPAGE=943 REPLACE INTO テーブル
SQL3109N ユーティリティーが、ファイル "ファイル名.CSV" からデータのロードを開始しています。 SQL3110N ユーティリティーが処理を完了しました。 "59" 行が、入力ファイルから読み取られました。 SQL3221W ...COMMIT WORK が開始されました。入力レコード・カウント = "59" SQL3222W ...すべてのデータベース変更の COMMIT が成功しました。 SQL3149N "59" 行が、入力ファイルから処理されました。 "59" 行が、正常に表に挿入されました。 "0" 行が、拒否されました。 読み込まれた行数 = 59 スキップされた行数 = 0 挿入された行数 = 59 更新された行数 = 0 拒否された行数 = 0 コミットされた行数 = 59