PostgreSQLからOracleへのデータ移行
PostgreSQLからOracleへデータを移行する際には、PostgreSQL付属のエクスポートツールである「pg_dump」を使うとラクです。
PostgreSQLの移行元データベース名を「tsukaeru」とすると、データをエクスポートするコマンドは次のようになります。「-D」オプションを付けると、データがINSERT文を使って出力されます。
% pg_dump -D tsukaeru > tsukaeru.sql
図1のように、pg_dumpはテキスト形式でデータをエクスポートしますので、データ型の修正が容易です。次ページの表1などを参考にしてデータ型を修正します。
pg_dumpの出力には、ファンクションの定義なども含まれますので、余計な部分はコメントアウトするか削除する必要があります。
続いて、修正したデータをOracleに投入するには、SQL*Plusを用います。
% sqlplus user/pass
コマンドが成功すれば、データ移行は完了です。
OracleからPostgreSQLへのデータ移行
OracleからPostgreSQLも同じように、まずはテキスト形式でデータをエクスポートします。
Oracleには、テキスト形式でデータをエクスポートできるさまざまな製品がありますので、それらを使うか、もしくはExcelなどを使ってODBC接続経由で取得してもよいでしょう。
ここでは、Ora2Pgを使う方法を紹介します。Ora2Pgは、OracleからPostgreSQLへのデータ移行を行うPerlモジュールで す。Ora2Pgは、PostgreSQLソースコード配布パッケージのcontrib/oracleフォルダに入っています。
Ora2Pgは、Oracleからのデータのエクスポートと、PostgreSQLに合わせたデータ型の変更を一度にやってくれます。具体的には、 Oracleからテーブルの定義とデータを読み取り、PostgreSQLのデータ型に変更した後、テキスト形式で出力します。テキストの形式は、 pg_dumpと同じように、CREATE TABLE文やINSERT文を使ってデータを投入する形式です。
また、同時に両方のデータベースに接続して、データ型を変換しつつ投入もしてくれるモードも
あるのですが、後に述べますようにうまくいかないものもありますので、いったんテキストファイルに出力する方法を取るのがよいでしょう。
Ora2Pgによるデータ型の変換内容は、表3を参照してください。
| Oracleデータ型 | Ora2Pgによる変換 |
| 文字型 | |
| CHAR(n) | CHAR(n) |
| NCHAR(n) | CHAR(n) |
| VARCHAR(n) | VARCHAR(n) |
| NVARCHAR(n) | VARCHAR(n) |
| VARCHAR2(n) | VARCHAR(n) |
| NVARCHAR2(n) | VARCHAR(n) |
| LONG | TEXT |
| CLOB | TEXT |
| 数値型 | |
| NUMBER | NUMERIC |
| FLOAT | FLOAT8 |
| 日付型 | |
| DATE | TIMESTAMP |
| バイナリ型 | |
| RAW(n) | TEXT |
| LONG RAW | TEXT |
| BLOB | TEXT |
| BFILE | TEXT |
| その他 | |
| ROWID | OID |
