【AWS】既存データベースからRDSへのマイグレーション手順(データベース移行手順)【DMS&コマンドライン】

今回は、既存データベース(Oracle、PostgreSQLなど)から Amazon RDS へのデータベース移行手順について解説します。

企業のシステムはデータベースを中心に回っています。

「Webサーバー」や「APIサーバー」など多種のサーバーが企業内で稼働していますが、結局のところ「データをどう見せるか?」という表現の部分で、企業の中心は「データ」になります。(顧客情報、過去の営業情報、日常的に発生する種々のデータ類など)

今まではオンプレでデータベースサーバーを構築するのが主流でしたが、AWS が登場してからデータベースもクラウドに持っていくことが当たり前になってきました。

 

また、データベースの運用管理など非常に高度なスキルを求められるので、運用管理を一挙に丸投げできるクラウドは各企業にとってもコストダウンにつながると思います。

 

 

 

データベースの移行方法

大きく分けると以下のように2つあります。

 

 

Oracle Data Pump(Expdp,Impdp)コマンドでデータベースを移行する

コマンドでのデータベース移行図

※直接既存 DB から Amazon RDS へ Database Link(データベースリンク) を張ってもいいですが、既存 DB への負荷を考えて作業用 EC2 インスタンスを作成しています。(どちらがいいか悪いかは状況により判断されます)

小規模なデータベースや、休日や夜間などある程度システムを停止できるデータベースの場合は、AWS DMS などのサービスを利用せずにコマンドからデータの「エクスポート」「インポート」コマンドや、rsync や scp でのデータ転送でデータベースの移行が可能です。

 

コマンドでデータベースを移行するメリット

 

 

コマンドでデータベースを移行するデメリット

 

 

 

Oracle から RDS へコマンドでデータを移行する場合

Oracle の場合は「Oracle Data Pump」を利用します。具体的には以下の2つのコマンドです。

 

ディレクトリオブジェクトと権限が必要

 

expdp/impdp でデータベースを移動する場合の手順

 

サーバーにログインしたら oracle アカウントにスイッチします。

$ sudo su - oracle

 

SYS ユーザーを使用して SYSDBA 権限で SQL*Plus を起動します。

$ sqlplus / as sysdba

 

ディレクトリオブジェクト(/home/test/work)を作成します。

SQL> create directory EXP_DIRECTORY as '/home/test/work'

※ディレクトリに権限を割り当てることも出来ます。(読み書き可、読み取りのみ可など)

 

一旦 exit します。

SQL> exit 

 

データベースをファイル名「test.dmp」、ディレクトリを「/home/test/work」としてエクスポートします。

$ expdp test/test_password DIRECTORY=EXP_DIRECTORY DUMPFILE=test.dmp

 

dumpデータ(test.dmp)を圧縮します。

$ gzip test.dmp

 

※gzip はリソースを全て消費してしまうので、nice コマンドと一緒に使用するとシステムへの負荷が掛かりません

nice コマンドで リソース負荷を抑えながら dumpデータ(test.dmp)を圧縮する例です。

$ nice -n 19 gzip test.dmp

 

rsync コマンドで dump ファイルを「作業用の EC2 インスタンス」に転送します。

 

転送後に「作業用の EC2 インスタンス」上で、gunzip コマンドで dump ファイルを展開します。

 

「作業用の EC2 インスタンス」「移行先の DB インスタンス(RDS)」の間に Database Link(データベースリンク)を作成します。

 

DBMS_FILE_TRANSFER を使用して、移行元で(expdpコマンドで)エクスポートされたダンプファイルを「移行先の DB インスタンス(RDS)」にコピーします。

DBMS_FILE_TRANSFER .PUT_FILEメソッドを利用します。

 

impdp コマンドを使用して「移行先の DB インスタンス(RDS)」にデータファイルをインポートします。

 

DBMS_FILE_TRANSFER を使用して転送されたダンプファイルは削除されずに残るので、最後にクリーンアップしてダンプファイルを削除します。

 

 

Database Link(データベースリンク)とは?

データベースリンクとは、複数のデータベースが存在する分散データベース環境で用いられるデータ統合のための仕組みです。

データベースリンクを使用すると、複数のデータベースに分散して存在するデータを1つのデータベース上に存在するかのように扱うことができます。

 

データベースリンクを利用するためには、データベース間のリモート接続用の Oracle Net Services の構成が完了している必要があります。

 

Oracle から RDS へデータベースを移行する際は、このデータベースリンクを利用し、「別サーバーの別データベースの別インスタンス」から「Amazon RDS」へリンクを張ります。

その結果、完全に別の DB にも関わらずデータを移行することができるようになります。

 

 

【DB】【SQL Server】リンクサーバー(Linked Server)とは

 

 

不要なデータは移行しない

不要なデータは移行対象から外すことで移行時間を短縮することができます。

 

truncate コマンドは、テーブルの中身(データ)を高速に削除することができます。

truncate table <テーブル名>

 

 

delete コマンドでもデータを削除することができますが、REDO ログに削除内容が記載されるため、大量のデータを削除する際は時間が掛かることに注意です。

commitを実行する前ならロールバックで元に戻すことができます。

delete from <テーブル名>

 

 

 

 

 

AWS DMS(Database Migration Service)を利用してデータベースを移行する

AWS DMS はデータベースを AWS へ移行するためのツールです。

同一のデータベース間(Oracle → Oracle、PostgreSQL → PostgreSQL など)での移行は当たり前のこととして、異種のデータベース間(Oracle → PostgreSQL、PostgreSQL → Aurora など)も可能です。

 

AWS DMS を利用するメリット

 

 

AWS DMS を利用するデメリット

 

異なるデータベース間の場合は AWS SCT(Schema Conversion Tool)を利用する

異なるデータベース間の場合は DMS を利用する前に AWS SCT(Schema Conversion Tool)を利用してストアドプロシージャやシーケンスなどスキーマオブジェクトを移行する必要があります。

当初は SCT を利用するケースとして「異種データベース間」のみでしたが、現在では SCT は同一データベース間でも利用することができるようになっています。

 

AWS SCT で何ができるのか?

AWS DMS だけでは異なるデータベース間の移行はできません。

AWS DMS はあくまでも「データのみ」移行するツールです。

 

しかし、Oracle と PostgreSQL などは、データベースで扱う「データ型」などが異なるためそのまま移行しても使えません。

そのため、データ以外の情報(ストアドプロシージャ、シーケンス、トリガー、シノニムなどのスキーマオブジェクト)は、SCT を利用して移行します。

 

※ただし SCT は異なるデータベース間のスキーマオブジェクトを100%完璧に変換して移行してくれるツールではなく、あくまでも補助的なツールなので別途調査しては手動で変換していくなどの作業が必要になる場合があります。

→あくまでもサポートツールとして考えた方がいいです。

 

AWS SCT で以下が可能になります。

 

トリガーとは?

トリガーとは、指定のイベントが発生した際に実行されるプログラム(プロシージャ)のことを言います。

イベントの対象は、「データベース」や「スキーマ」などで、イベントとは、表の変更やビューの変更などのアクションです。

 

 

シーケンスとは?

シーケンスとは一意の連続した数値を生成するオブジェクトです。

例えば取引データに付与する「発注番号」「受注番号」など重複がない一意の連続した番号を生成する場合に「シーケンス」を利用します。

IT用語での「一意」とは、「大量にあるデータから確実に1つの情報が特定できる状態」を言います。

例えば社員番号は必ず「一意」である必要があります。

仮に社員番号「0015」の社員が二人いたら管理できなくなります。

 

ストアドプロシージャとは?

以下のようなデータベースに格納できるプログラムを総称して「ストアド・プロシージャ」と言います。

 

 

 

 

DMS を利用するために準備するもの

 

 

DMS を利用するための要件

DMS を利用するための要件です。

どちらかが AWS 上に存在していること

DMS を利用するためには、「移行元データベース」「移行先データベース」のどちらかが AWS 上に存在している必要があります。

両方がオンプレミス上に存在している、いずれも AWS 上に存在していない場合は DMS を利用してデータベースの移行はできません。

 

ネットワークで接続されている

通常 DMS を利用して既存のデータベースを Amazon RDS へ移行しようとする場合は、データーセンターから AWS へ移行するパターンが多いです。

その場合、ネットワークの経路として以下の3種類が挙げられます。

移行元と移行先がファイアウォールでポートが閉じられていないことを確認します。

 

 

AWS DMS でどのようにデータを移行出来るのか

AWS DMS は初回に対象のデータベースを移行し、移行後に発生した更新データの差分を継続的に同期する機能があります。

 

 

 

 

トラブルシューティング

移行時間が以上に遅い場合以下の点を確認します。

 

 

データ移行における一番重要な点

Expdp、Impdp コマンドを使用しても、DMS を利用しても、最終的に一番重要な点は、やり方ではなく「移行後にいかに正確に移行出来ているのかチェックすること」であると思いました。

ここに時間を掛けなければ「データベースを移行できたと思っていたが、実は漏れがあり、デグレーションが発生してしまった」ということになりかねません。

 

 

参考図書

Amazon Web Services 業務システム設計・移行ガイドですが、企業のシステムを AWS へ移行する上で何ができるのか?何をどのように AWS へ移行することができるのか?という知識が身に付きました。

内容としては具体的な手順は出てきませんが、設計や要件のまとめ方などが記載されています。具体的な手順は AWS の公式サイトやインターネットに出ているので補完することができます。


Amazon Web Services 業務システム設計・移行ガイド 一番大切な知識と技術が身につく

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人