http://powergres.sra.co.jp/s/ja/tech/plus/experience/vol4/oracle_migration2.php
http://blog.livedoor.jp/loopus/archives/50311640.html
準備
Perl
perlを使える状態にしておく
Ora2pg
ダウンロード
http://pgfoundry.org/projects/ora2pg
から Ora2pg をダウンロードするして解凍する
ora2pg-6.3.tar.bz2(1093)
コンパイル?(必要ないかも)
解凍したディレクトリで
perl Makefile.PL
を実行する。
Ora2Pg.pm
が出来上がればOK.
移行用のスクリプトを作成
#!/usr/bin/perl
BEGIN {
$ENV{ORACLE_HOME}='C:\oraclexe\app\oracle\product\10.2.0\server';
$ENV{NLS_LANG} = 'JAPANESE_JAPAN.JA16SJISTILDE';
}
use strict;
use Ora2Pg;
my $schema=new Ora2Pg (
datasource=>'dbi:Oracle:host=localhost;sid=xe;port=1521',
user=>'system',
password=>'manager',
schema=>'orauser',
type=>'TABLE',
debug=>1
);
$schema->export_schema('C:\temp\schema.sql');
exit(0);
見たいな感じのを作る。
- $ENV{ORACLE_HOME}
- Oracleをインストールしたディレクトリ。Linuxだと
$ENV{ORACLE_HOME}='/home/oracle/app/oracle/product/10.1.0/db_1';
とか。
- $ENV{NLS_LANG}
- Oracleの文字コード
- datasource
- Oracleに接続するための情報
- user
- Oracleへ接続するためのユーザー。 dba_usersなどにアクセス出来るユーザ。
- password
- 上記ユーザのパスワード
- schema
- 移行対象のスキーマ
- type
| TABLE | Extract all tables with indexes, primary keys, unique keys,foreign keys and check constraints. |
|---|---|
| VIEW | Extract only views. |
| GRANT | Extract roles converted to Pg groups, users and grants on all objects. |
| SEQUENCE | Extract all sequence and their last position. |
| TABLESPACE | Extract storage space, need PostgreSQL >= v8. |
| TRIGGER | Extract triggers defined following actions. |
| FUNCTION | Extract functions. |
| PROCEDURES | Extract procedures. |
| PACKAGE | Extract packages and package bodies. |
| DATA | Extract datas as INSERT statement. |
| COPY | Extract datas as COPY statement. |
| PARTITION | Extract range and list Oracle partitioning. |
| TYPE | Extract user defined Oracle type. |
個人的には、DATA より COPY の方がファイルのサイズが小さくなるのでオススメ。
- export_schema('パス');
- スキーマの出力先。
/home/oracle/data_for_migrate/schema.sql
とか。
移行作業
1.Oracleからエクスポート
準備作業で作成した移行用スクリプトを実行する。
2.「5C問題」の対応(Oracleの文字コードがSJISの場合)
Oracleの文字コードがSJISの場合、5C問題の関係で出力ファイルに不要な「\」が
出力される。
use Encode;
my $file = shift;
open(IN, $file) or die "Can't open $file: $!\n";
while(<IN>){
$tmp = $_;
# $tmp =~ s/\\\\/\\/g;
$tmp =~ s/([\x81-\x9f\xe0-\xfc]\\)\\/\1/g;
Encode::from_to($tmp, "shiftjis", "utf8" );
print $tmp;
}
close(IN);
こんなスクリプトを書いて、convert.pl として保存する。
1.で出力したファイルを data.sql とした場合
perl convert.pl data.sql > data_utf8.sql
と実行して、不要な「\」を取り除いてUTF8に変換。
インポートを行う環境がUTF8じゃなければ、utf8への変換は不要
3.Postgresqlへインポート
psql -h ホスト名 -U ユーザー -f インポートファイル データベース名
または、psql 内で
psql => \i インポートファイル
でインポート。
orafce
http://orafce.projects.postgresql.org/index-ja.html
orafce の目的は Oracle Database で使用できる関数と互換性のある関数を PostgreSQL に実装することです。
個人的な感想としては意外と使えない。
インストール
http://pgfoundry.org/frs/?group_id=1000113
から rpm をダウンロード。
orafce-3.0.1-1.pg84.rhel5.x86_64.rpm(887)
rpm -ihv orafce-xxxxxx.rpm
でインストール。終わったら
psql -U postgres testdb < orafunc.sql
でスクリプト実行。
orafunc.sql は、/usr/share/pgsql/contrib あたりにあるはず。
無ければ、find で検索。
[カテゴリ: データベース > Oracle]
[通知用URL]
Tweet
最終更新時間:2010年09月21日 22時28分48秒