PowerGres

第 2 回 データベース定義の移行 – Oracle マイグレーション

このページに記載の情報は、2005 年にリリースした PowerGres Plus V2 を対象としています。PowerGres Plus V2 の販売はすでに終了しています。

PowerGres Plus の最新バージョンに関する情報は、製品紹介ページまたは PowerGres 体験記ページを参照してください。

SRA OSS では、Oracle データベースなど他のデータベースから、PostgreSQL や PowerGres へのマイグレーションサービスを提供しています。

詳細は「データベースマイグレーションサービス」のページをご覧ください。

第 2 回 データベース定義の移行 『ツールを使えばこんなに簡単』

はじめに

私が最初に任された仕事は、データベースのアクスセス部分の設計でした。 私は複数の商用データベースを調査しているうちに、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) します。

ora2pg によるデータベース定義移行

図 3: ora2pg によるデータベース定義移行

ora2pg のインストール

ora2pg の入手

ora2pg は以下から入手できます。

https://www.samse.fr/GPL/ora2pg/ora2pg-3.3.tar.gz

関連モジュールの準備

ora2pg を使うためには、Perl 5 の実行環境が必要です。 また、以下のモジュールがインストールされているか確認し、インストールされていない場合は、ダウンロードしてインストールしてください。

本実行例の説明で使われているモジュール情報は下記のようになっています。

DBI-1.48

ダウンロードページ https://search.cpan.org/~timb/DBI-1.48/

ダウンロードリンクhttps://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz

DBD-Pg-1.43_1

ダウンロードページ 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

DBD-Oracle-1.16

ダウンロードページ https://search.cpan.org/dist/DBD-Oracle/

ダウンロードリンク https://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBD-Oracle-1.16.tar.gz

String-Random-0.20

ダウンロードページ 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

Compress-Zlib-1.41

ダウンロードページ 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」を作成します。

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 用データベース定義の出力ファイル名

Oracle からのデータベースベース定義の移出

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 は非常に親和性が高いため、データベースリソースもほとんど対応しています。

主なデータベースの構成要素例を以下に記述します。

表 1: 主なデータベースの構成要素例
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 も対応しています。

データ型対応一覧

表 2: Oracle と PowerGres Plus のデータ型対応例
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 の注意事項

Oracle 固有の定義で、ora2pg で出力の対象とならない定義情報
PowerGres Plus と Oracle でのデータ型に関する注意事項

ora2pg では、RAW 型や、BLOB バイナリ型は TEXT 型に変換されます。 そのため、それらを BYTEA 型として扱えるようにするためには、JDBC を利用したアプリケーションなどを作成して、移行する必要があります。

インデックスに関する注意事項

PowerGres Plus と Oracle ではインデックスに指定できるレコード最大長が異なります。 Oracle は 2000 バイト、PowerGres Plus では、1000 バイトです。 1000 バイトを超えるレコード長のインデックスがある場合は、1000 バイト以下に変更する必要があります。

製品・サービスに関するお問い合わせ
03-5979-2701

お問い合せ受付時間 月 - 金 10:00 - 17:00

メールフォームでのお問い合わせ

ページトップへ