このページに記載の情報は、2005 年にリリースした PowerGres Plus V2 を対象としています。PowerGres Plus V2 の販売はすでに終了しています。
PowerGres Plus の最新バージョンに関する情報は、製品紹介ページまたは PowerGres 体験記ページを参照してください。
SRA OSS では、Oracle データベースなど他のデータベースから、PostgreSQL や PowerGres へのマイグレーションサービスを提供しています。
詳細は「データベースマイグレーションサービス」のページをご覧ください。
私が最初に任された仕事は、データベースのアクスセス部分の設計でした。 私は複数の商用データベースを調査しているうちに、SQL 文やデータ型が微妙に違うことに気がつきました。 当時の私には、何故そうなっているのかが全くわかりませんでしたが、データベースでは、ユーザのニーズや使いやすさを目的に SQL の拡張が行われています。
第 1 回では、PowerGres Plus と Oracle での SQL における高い親和性について説明しました。 それは、PowerGres Plus が基本とする PostgreSQL が Oracle を非常に意識しているためです。 Oracle と PostgreSQL で、若干 SQL の拡張がされていますが、ほとんどの場合は問題ありません。 また、データ型も名前だけが違うだけで、すべて対応しています。
第 2 回では、Oracle のデータベース定義から、PowerGres Plus 用のデータベース定義を作成するポイントについて説明します。
このシリーズでは、データベースの移行を以下の順番で説明します。図 1 はその概要です。
図 1: データベースの移行
今回は、データベース定義の移行について説明します。
今回は、すでにある Oracle のアプリケーションをモデルに説明します。 図 2 を参照してください。 これは、住宅情報を検索する Web アプリケーションです。
図 2: 移行モデル
Oracle のデータベースは、サンプルの「create_house_oracle.sql」を SQL*Plus で登録します。
データベースの定義は、ora2pg というツールを使用して簡単に移行することができます。 ora2pg は、Oracle からデータベース定義を移出 (export) し、テキストファイルに出力します。 必要であれば、修正をして PowerGres Plus に移入 (import) します。
図 3: ora2pg によるデータベース定義移行
ora2pg は以下から入手できます。
ora2pg を使うためには、Perl 5 の実行環境が必要です。 また、以下のモジュールがインストールされているか確認し、インストールされていない場合は、ダウンロードしてインストールしてください。
本実行例の説明で使われているモジュール情報は下記のようになっています。
ダウンロードページ https://search.cpan.org/~timb/DBI-1.48/
ダウンロードリンクhttps://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz
ダウンロードページ https://search.cpan.org/~dbdpg/DBD-Pg-1.43/
ダウンロードリンク https://search.cpan.org/CPAN/authors/id/D/DB/DBDPG/DBD-Pg-1.43.tar.gz
ダウンロードページ https://search.cpan.org/dist/DBD-Oracle/
ダウンロードリンク https://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBD-Oracle-1.16.tar.gz
ダウンロードページ https://search.cpan.org/~steve/String-Random-0.20/
ダウンロードリンク https://search.cpan.org/CPAN/authors/id/S/ST/STEVE/String-Random-0.20.tar.gz
ダウンロードページ https://search.cpan.org/~pmqs/Compress-Zlib-1.41/
ダウンロードリンク https://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Zlib-1.41.tar.gz
ダウンロードしたファイル「ora2pg-3.3.tar.gz」を任意のディレクトリに解凍します。 今回は、/usr/local に解凍しました。 解凍すると「ora2pg」というディレクトリが作成され、その下にすべてのファイルが格納されています。
テーブル定義を移出するための簡単な Perl スクリプト「export_schema.pl」を作成します。
#!/usr/bin/perl BEGIN {ldelim} $ENV{ldelim}ORACLE_HOME{rdelim}='/home/oracle/app/oracle/product/10.1.0/db_1'; $ENV{ldelim}NLS_LANG{rdelim} = 'JAPANESE_JAPAN.JA16EUC'; {rdelim} use strict; use Ora2Pg; my $schema=new Ora2Pg ( datasource=>'dbi:Oracle:host=101.34.244.255;sid=demo1;port=1521', user=>'postgres', password=>'postgresplus', schema=>'POSTGRES', type=>'TABLE', debug=>1 ); $schema->export_schema('/home/oracle/data_for_migrate/schema.sql'); exit(0);
ORACLE_HOME | Oracle インストールディレクトリ |
---|---|
NLS_LANG | Oracle データベースのコード系を指定してます。 |
datasource | Oracle にアクセスするための接続方法を指定します。 |
user | Oracle にアクセスするユーザ名 |
password | ユーザ名のパスワード |
schema | 移出する定義が行われているスキーマを指定します。 必ず大文字で記述してください。 |
TYPE | 出力する情報に「TABLE」と指定します。 表定義と、インデックス定義の情報が出力されます。 |
schema->export_schema | PostgreSQL 用データベース定義の出力ファイル名 |
ora2pg を解凍したディレクトリに移動して以下のコマンドを入力します。
perl export_schema.pl ora2pg.conf
データベース定義用のファイル「schema.sql」が出力されます。
ora2pg の詳細な使用方法については、以下の URL を参照してください。
https://www.samse.fr/GPL/ora2pg/ora2pg.html
ora2pg では、一部 Oracle 固有の定義があるため、それらの定義は、無視され、出力されません。 また、データ型の対応についてもいくつか注意事項があります。 詳細は、ora2pg の注意事項 を参照してください。
Administrator で、データベース「house」を作成します。
以下のように作成します。
データベース名 | house |
---|---|
データベーススペース名 | housedbspace |
パス名 | /PlusDbspace/postgres/housedbspace |
サイズ | 500 MB |
図 4: データベースの追加
インスタンス管理者で、以下のコマンドを入力してテーブルを作成します。
$ psql -d house < /home/oracle/data_for_migrate/schema.sql
これで Oracle のデータベース定義と同等の環境が PowerGres Plus に移行できました。
今回は、ツールを利用して Oracle のデータベース定義を PowerGres Plus に移行しました。 ツールを利用することで、簡単にデータベース定義を PowerGres Plus に構築できます。 次回は、今回作成したデータベース「house」にデータを移行するポイントを説明します。
第 1 回で説明したとおり、Oracle と PowerGres Plus は非常に親和性が高いため、データベースリソースもほとんど対応しています。
主なデータベースの構成要素例を以下に記述します。
Oracle | PowerGres Plus | Oracle | PowerGres Plus |
---|---|---|---|
DATABASE | DATABASE | TRIGGER | TRIGGER |
SCHEMA | SCHEMA | FUNCTION | FUNCTION |
PACKAGE | SCHEMA | PROCEDURE | FUNCTION (△) |
TABLE | TABLE | OPERATOR | OPERATOR |
INDEX | INDEX | SEQUENCE | SEQUENCE |
TYPE | TYPE | VIEW | VIEW |
PowerGres Plus では、上記以外にも、CONSTRAINT、REFERENCE INTEGRITY も対応しています。
Oracle | 最大値 | PowerGres Plus | 最大値 | |
---|---|---|---|---|
文字型 | CHAR | 2000 バイト | VARCHAR | 4000 バイト |
NCHAR | 2000 バイト | VARCHAR | 4000 バイト | |
VARCHAR2 | 4000 バイト | VARCHAR | 4000 バイト | |
NVARCHAR2 | 4000 バイト | VARCHAR | 4000 バイト | |
LONG | 2 GB | TEXT | 2 GB | |
CLOB | 4 GB | TEXT | 4 GB | |
NCLOB | 4 GB | TEXT | 4 GB | |
数値型 | NUMBER | 38 桁 | NUMERIC | 38 桁 |
日付型 | DATE | – | TIMESTAMP | – |
TIMESTAMP | – | TIMESTAMP | – | |
バイナリ型 | RAW | 2 KB | BYTEA | 2 GB |
LONG RAW | 2 GB | BYTEA | 2 GB | |
BLOB | 4 GB | BYTEA | 2 GB | |
BFILE | 4 GB | ラージオブジェクト | 無制限 |
ラージオブジェクトは論理上無制限です。
ora2pg では、RAW 型や、BLOB バイナリ型は TEXT 型に変換されます。 そのため、それらを BYTEA 型として扱えるようにするためには、JDBC を利用したアプリケーションなどを作成して、移行する必要があります。
PowerGres Plus と Oracle ではインデックスに指定できるレコード最大長が異なります。 Oracle は 2000 バイト、PowerGres Plus では、1000 バイトです。 1000 バイトを超えるレコード長のインデックスがある場合は、1000 バイト以下に変更する必要があります。