第3回:データの移行(2) (1/2)

まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第3回:データの移行(2)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/10/20
1   2  次のページ
データの書き出し

   前回に続き、データを書き出します。先ほどのプログラムをリスト2のように変更して実行します。
#!/usr/bin/perl

 BEGIN {
   $ENV{ORACLE_HOME} = 'C:/Oracle10g/orahome';
   $ENV{NLS_LANG} = 'japanese_japan.JA16EUC';
 }

 use strict;
 use Ora2Pg;

 my $data = new Ora2Pg (
         datasource => 'dbi:Oracle:host= ⇒          localhost;sid=ORA10',
         user => 'tsukaeru',
          password => 'sql',
          schema => 'TSUKAERU',
          type => 'DATA',
          debug => 1
 );

 $data->export_data('data.sql');
 exit(0);

リスト2:export_data.pl

   すると、図3のようなファイルが出力されます。同じく、EUCの文字コードに対応したテキストエディタなどで開いてください。

data.sqlの中身
図3:data.sqlの中身
(画像をクリックすると別ウィンドウに拡大表示します)

   このデータをPostgreSQLに投入するには、psqlコマンドを使って次のように実行します。

% psql tsukaeru < data.sql
   コマンドが成功すれば、データ移行は完了です。


Ora2Pgの注意点

   テーブル名や列名が日本語の場合には、エクスポートが失敗する場合があります。NLS_LANG環境変数を正しく設定しても失敗する場合は、RENAME文やALTER TABLE文を使って、あらかじめテーブル名や列名を英語名に変えておくとよいでしょう。データをエクスポートした後に、日本語の名前に戻せばOKです。

   Ora2Pgは、スキーマの出力時にはテーブルの制約関係をPostgreSQL用に変換してくれますが、データの出力時にはその制約を満たす順序ではINSERT文を作成してくれません。そのため、制約がある場合には、必要に応じて投入前にINSERT文の順番を入れ替えてください。もしくは制約を外して投入し、後から付けてもよいでしょう。

   また表3にありますように、Ora2PgはOracleのRAWデータ型やBLOBデータ型などを、すべてPostgreSQLのTEXT型に移行します。これをPostgreSQLのbytea型に移行したいときは、JDBCなどでリスト3のようなプログラムを作成するとよいでしょう。

JDBCによるBLOBデータ移行例
リスト3:JDBCによるBLOBデータ移行例
(画像をクリックすると別ウィンドウに拡大表示します)

1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第3回:データの移行(2)
データの書き出し
  SQL文の移行
PostgreSQLとOracleによるデータベース相互移行マニュアル
第1回 データベース移行
第2回 データの移行(1)
第3回 データの移行(2)
第4回 SQL文の移行(1)
第5回 SQL文の移行(2)
第6回 SSQL文の移行(3)
第7回 ファンクションの移行(1)
第8回 ファンクションの移行(2)
第9回 ストアドプロシージャの移行(1)
第10回 ストアドプロシージャの移行(2)
第11回 ストアドプロシージャの移行(3)
第12回 ストアドプロシージャの移行(4)
第13回 まとめ

人気記事トップ10

人気記事ランキングをもっと見る