第14回:オンプレOracle DBからRDS for Oracle(AWS)への移行

技術者向け・データベースの技術情報発信
はじめに
皆様、こんにちは。マルチDBソリューション部の望月です。
今まではオンプレミス環境での設計構築作業が主でしたが、最近ではクラウド環境のDB業務も増えてきました。
設計構築作業を行っている中で、システム更改が発生した時に欠かせない作業がデータ移行作業です。
今回は、RDS for Oracle利用時のデータ移行についてお話します。
今回、お客様から頂いたのは、オンプレミス環境でOracleのexpdp機能を使って抽出したデータのダンプファイル。このデータを新AWS環境に移行したいとのこと。
お客様のご希望は。。。
- 仕組みを作るために時間を掛けたくない。
- 新たな製品の購入など追加費用を掛けたくない。
- 影響調査の時間が無いため、なるべく既存環境の変更をしたくない。
オンプレミス環境での移行
オンプレミス環境であれば以下の方法でデータをエクスポート、ダンプファイルを転送しimpdpでインポートできますが、AWSでは直接サーバにファイルを転送できません。
AWSで提供されるデータ移行方式
AWSでは以下のようなデータ移行の方式が提供されています。
AWS Database Migration Service
事実上ダウンタイムなしでデータベースを AWS に移行できます。移行中でも、ソースデータベースに対して発生するすべてのデータ変更はターゲットに継続的にレプリケートされて、ソースデータベースは完全に動作しています。
AWS Snowball
AWS Import/Export で使用できる機能であり、ネットワークコストが高い、転送時間が長い、セキュリティに懸念があるなど、大規模データを転送するときの一般的な課題を解決するのに役立ちます。Snowball を使用するとデータを簡単、迅速、安全に転送でき、コストは高速インターネットの 5 分の 1 ほどで済みます。
Oracle RMAN のバックアップおよび復元
AWS Snowball を介して AWS にバックアップファイルを送信したり、VPN またはAWS Direct Connect を使用して AWS にデータベースを復元したりできます。
Oracle Data Pump
ダンプファイルを Oracle コンピュータまたは Amazon S3 へインポートオペレーション用に送信したりできます。
提供されている方式を調査しましたが、いずれの方式でも追加費用が発生します。また、今回は抽出されたダンプファイルを元に作業を行うため、方法も限定されます。
詳しくは以下のWebサイト。
『AWSウェブサイト‐AWS へのデータの移行』
https://docs.aws.amazon.com/ja_jp/quickstart/latest/oracle-database/data-migration.html
Perlを使ったデータ転送
追加費用を掛けずにダンプファイルを転送できないだろうか、事例などを調査していた時に見つけたのがPerlを使ったダンプファイルの転送方法です。
前提条件としてEC2サイトが必要ですが、すでに構築されているお客様のEC2サイトが利用可能であることが分かりました。(EC2にはOracle Clientのインストールが必要です!)
実行イメージは以下の通りです。
実行に使用したPerlのソースはホワイトペーパに記載があります。
『Strategies for Migrating Oracle Databases to AWS』(P24から記載があります)
https://d0.awsstatic.com/whitepapers/strategies-for-migrating-oracle-database-to-aws.pdf
Perlソースの修正と実行イメージ
ソースの修正はPerlが詳しくわからない人でも修正可能なものでした。
赤字部分を環境に沿って修正してください。
my $RDS_PORT=4080; my $RDS_HOST="myrdshost.xxx.us-east-1-devo.rds-dev.amazonaws.com"; my $RDS_LOGIN="orauser/orapwd"; my $RDS_SID="myoradb"; my $dirname = "DATA_PUMP_DIR"; my $fname = $ARGV[0]; my $data = ‘‘dummy’’; my $chunk = 8192; my $sql_open = "BEGIN perl_global.fh := utl_file.fopen(:dirname, :fname, 'wb', :chunk); END;"; my $sql_write = "BEGIN utl_file.put_raw(perl_global.fh, :data, true); END;"; my $sql_close = "BEGIN utl_file.fclose(perl_global.fh); END;"; ~ 略 ~
修正が完了したら、ダンプファイルとPerlスクリプトをEC2サイトに配置して実行です。
[oracle@testser01:/home/oracle]
[oracle@testser01:/home/oracle] perl putdata.pl oradata20191010.dmp
[oracle@testser01:/home/oracle] perl <スクリプト名> <ダンプファイル名> で実行
[oracle@testser01:/home/oracle]
エラー無く実行できれば”DATA_PUMP_DIR”で指定したパスにダンプファイルが転送されているはずです!
ストレス無しの転送!
Perlを使ったファイル転送のメリットはなんといっても無料という点。参考にしたソースから数か所の修正で実現が可能です。また、EC2 to DBサーバの転送はクラウド内で完結するため、数GBのファイルでもストレスなく転送出来ます。
おススメです!