![見出し画像](https://assets.st-note.com/production/uploads/images/172109642/rectangle_large_type_2_b1a9dcb53e28017a6eb6fbaec72e7bc6.png?width=1200)
OracleからPostgreSQLへのデータ移行
こんにちは。SHIFTの小澤です。
この記事を読むとできるようになること
OracleからPostgreSQLへデータ移行する方法のメリット、デメリットが分かる
ora2pgのセットアップ手順と移行手順が分かる
はじめに
OracleからPostgreSQLへデータ移行するための方法はいくつかあります。
オープンソースのora2pgというツールを使うと、ツールのライセンス料は無料にもかかわらず、自前でスクリプト開発をするのに比べて格段に小さい労力でデータ移行できる可能性があります。
今回は、ora2pgを使ってデータ移行する方法を紹介します。
OracleからPostgreSQLへデータ移行する方法
![](https://assets.st-note.com/img/1738650095-bBy9lv4OHnur7IsC0MxdDq15.png?width=1200)
ora2pgによるデータ移行のイメージ
![](https://assets.st-note.com/img/1738117828-gW9mznP06RVrUv7iENHKMwDI.png?width=1200)
今回は、Oracleデータベースが動作するサーバーとPostgreSQLが動作するサーバーはすでに準備済みで、ora2pgが動作するサーバーが無いことを前提に、以下の作業を行う説明をします。(※2)
(※2)Oracleデータベースのインストール手順と、PostgreSQLのインストール手順については、別の記事で説明します。
ora2pgのインストール
テーブル定義とデータの、Oracleからのエクスポート
テーブル定義とデータの、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:UnsplashのSolen Feyissa