見出し画像

OracleからPostgreSQLへのデータ移行


こんにちは。SHIFTの小澤です。

この記事を読むとできるようになること


  • OracleからPostgreSQLへデータ移行する方法のメリット、デメリットが分かる

  • ora2pgのセットアップ手順と移行手順が分かる

はじめに


OracleからPostgreSQLへデータ移行するための方法はいくつかあります。

オープンソースのora2pgというツールを使うと、ツールのライセンス料は無料にもかかわらず、自前でスクリプト開発をするのに比べて格段に小さい労力でデータ移行できる可能性があります。

今回は、ora2pgを使ってデータ移行する方法を紹介します。

OracleからPostgreSQLへデータ移行する方法

(※1)エンタープライズDB

ora2pgによるデータ移行のイメージ

今回は、Oracleデータベースが動作するサーバーとPostgreSQLが動作するサーバーはすでに準備済みで、ora2pgが動作するサーバーが無いことを前提に、以下の作業を行う説明をします。(※2)

(※2)Oracleデータベースのインストール手順と、PostgreSQLのインストール手順については、別の記事で説明します。

  1. ora2pgのインストール

  2. テーブル定義とデータの、Oracleからのエクスポート

  3. テーブル定義とデータの、PostgreSQLへのインポート

1. ora2pgのインストール


利用している環境によって追加で作業が必要になる場合があると思いますが、公式サイトの手順に従ってインストールしていきます。
公式サイト

今回使った環境は以下です。

  • Oracle Linux Server release 7.9

  • Oracle Database 19.3.0.0.0

  • PostgreSQL 15.10

前提となるソフトウェアのインストール

Oracleクライアントが必要なため、インストールします。
(Oracle Database本体のOracleクライアントでも動作すると思いますが、今回は新規にクライアントをインストールしました)

# rootで作業

yum install oracle-instantclient-basic-21.13.0.0.0-1.x86_64.rpm
yum install oracle-instantclient-devel-21.13.0.0.0-1.x86_64.rpm
yum install oracle-instantclient-sqlplus-21.13.0.0.0-1.x86_64.rpm

DBD::Oracleが必要なため、インストールします。

# rootで作業

yum install perl-DBI
yum install perl-CPAN
perl -MCPAN -e 'install DBD::Oracle'

ora2pgのインストール

ora2pgをインストールします。

# rootで作業

wget https://github.com/darold/ora2pg/archive/refs/tags/v24.3.tar.gz
tar xvfz v24.3.tar.gz
cd ora2pg-24.3/
perl Makefile.PL 
make
make install

必須ではありませんが、コマンドを起動し、バージョンが表示されるかを見ておきます。

# rootで作業

ora2pg -v
Ora2Pg v24.3

環境変数の設定

ora2pgを実行時に環境変数の設定が必要です。 ora2pgを実行するユーザーの.bash_profileなどに環境変数を設定します。

# ora2pgの実行ユーザー(oracleなど)で作業

vi ~/.bash_profile

# ora2pg
export LD_LIBRARY_PATH=/usr/lib/oracle/21/client64/lib
export PATH="/usr/lib/oracle/21/client64/bin:$PATH"

テーブル定義とデータの、Oracleからのエクスポート


ora2pgを使ってOracleのテーブル定義とデータを移行するスクリプトを作ります。

プロジェクトの作成

まず、ora2pgを実行する時の作業のディレクトリを作り、プロジェクトを作ります。 例として、ホームディレクトリ配下にmigrationというディレクトリを作り、test_projectというプロジェクトを作ります。

# ora2pgの実行ユーザー(oracleなど)で作業

mkdir ~/migration
ora2pg --project_base ~/migration --init_project test_project

コンフィグファイルの編集

コンフィグファイルを編集します。 必須ではありませんが、元のファイルをバックアップしてから編集します。

# ora2pgの実行ユーザー(oracleなど)で作業

cd ~/migration/test_project
cp -p config/ora2pg.conf config/ora2pg.conf.org
vi config/ora2pg.conf

# 利用している環境に従って書き換える
ORACLE_HOME     /u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_DSN      dbi:Oracle:host=mydb.mydom.fr;sid=SIDNAME;port=1521
ORACLE_USER     system
ORACLE_PWD      manager

Oracleへの接続確認

ORACLE_DSNの設定が少し複雑なので、うまく設定できているかを一旦確認します。 バージョンが表示されれば接続成功です。 うまくいかなかったら、公式サイトを参考にして修正します。

# ora2pgの実行ユーザー(oracleなど)で作業
ora2pg -t SHOW_VERSION -c config/ora2pg.conf

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0

コンフィグファイルの編集

今回は例として、OracleのHRスキーマのテーブル定義とデータをPostgreSQLに移行します。

コンフィグファイルを編集し、hrスキーマを指定します。

# ora2pgの実行ユーザー(oracleなど)で作業

vi config/ora2pg.conf

SCHEMA  hr

テーブル定義の移行スクリプトの作成

テーブル定義を、output_table.sqlというファイルに出力します。

# ora2pgの実行ユーザー(oracleなど)で作業

ora2pg -c config/ora2pg.conf -t TABLE -o output_table.sql

データの移行スクリプトの作成

データを移行するスクリプトを、output_data.sqlというファイルに出力します。

# ora2pgの実行ユーザー(oracleなど)で作業

ora2pg -c config/ora2pg.conf -t COPY -o output_data.sql

3. テーブル定義とデータの、PostgreSQLへのインポート


PostgreSQLのユーザーの作成

PostgreSQLにデータベースのオーナーとなるユーザー(hr)を作成します。

# PostgreSQLのユーザー(postgresqlなど)で作業

psql -U postgres
create role hr with login password 'xxxxxxxx'
\q

PostgreSQLのデータベースの作成

PostgreSQLにデータを格納するデータベース(hr)を作成します。

# PostgreSQLのユーザー(postgresqlなど)で作業

createdb hr -O hr

テーブル定義のインポート

PostgreSQLにテーブル定義をインポートします。

# PostgreSQLのユーザー(postgresqlなど)で作業

psql -U hr hr < output_table.sql

データのインポート

PostgreSQLにデータをインポートします。

# PostgreSQLのユーザー(postgresqlなど)で作業

psql -U hr hr < output_data.sql

まとめ


今回はora2pgを使ってデータ移行する方法を紹介しました。

コマンドをいくつか実行するだけで、ora2pgが移行用のスクリプトを作成してくれ、手動でスクリプトを作成するよりも楽にデータ移行ができました。

ただ、実際の業務においては、環境に制限があったり、移行するデータベースが複雑だったりして、ora2pgだけではうまく対応できないことも出てくると思いますので、引き続き今後調べていこうと思います。


執筆者プロフィール:小澤 雅弘
DBMSベンダー、ISPなどでDB関連のプロジェクトを20数年経験。得意領域はDBのパフォーマンスチューニング。

《この公式ブロガーのおすすめ記事》

SHIFTへのお問合せはお気軽に

お役立ち資料無料DL

SHIFTについて(コーポレートサイト)

SHIFTのサービスについて(サービスサイト)

SHIFTの導入事例

SHIFTの採用情報はこちら

PHOTO:UnsplashSolen Feyissa