前回は、オンプレミス、Amazon EC2、Amazon RDSで可用性を高める方法を紹介した。今回は、それぞれの環境におけるデータの移行方法を説明する。既存のOracle Databaseからデータをどのように移行するのか、どのような移行が可能かは、データベース管理者にとって非常に気になるポイントだろう。

3種類のOracle Databaseのデータの移行方法

Oracle Databaseのデータの移行方法はどのようなものがあるのだろうか? まずは、ここを紹介していこう。当社でも多くのOracle Databaseの移行を行ってきたが、Oracle Databaseの移行方法でよく利用する方法は以下の3つである。

  1. DatapumpユーティリティのEXPDP/IMPDPによる移行
  2. Recovery Manager(RMAN)のフルバックアップ、リストアによる移行
  3. 特殊なツール/ソフトを利用した移行

ここでは、移行元のデータベースがオンプレミス上に構築されているOracle Databaseという前提で、このデータベースを「Oracle on オンプレミス」「Oracle on EC2」「RDS for Oracle」へ移行する方法を説明したいと思う。

(1)DatapumpユーティリティのEXPDP/IMPDPによる移行

Oracle Databaseにはデータベースに接続し、データ、テーブル、プロシージャなどの定義情報を抽出、ダンプファイルと呼ばれるファイルとしてデータベース外に出力できる「Datapumpユーティリティ」という便利なツールが存在する。

Datapumpユーティリティでは、データベース全体の抽出、スキーマ単位での抽出、テーブル単位での抽出など、さまざまな抽出方法を設定でき、操作も比較的簡単である。当社でもデータベースの移行時に、ある程度停止時間が許容されるような場合、このDatapumpユーティリティを利用して移行元のデータベースから必要なデータ、定義情報を抽出し、移行先である新しいデータベースへ格納する方式を取る。

Datapumpユーティリティを利用して、移行元のデータベースからEXPDPでダンプファイルを抽出し、新しいデータベースへIMPDPを利用してデータを格納する方法に関しては、本連載で紹介している3つのデータベース環境「Oracle on オンプレミスサーバ」「Oracle on EC2」「RDS for Oracle」のいずれにおいても基本的には利用できる。ただし、RDS for Oracleの場合には少し注意が必要であるので詳しく解説したい。

「Oracle on オンプレミスサーバ」や「Oracle on EC2」の場合、移行元のデータベースから抽出したダンプファイル(データや定義情報をデータベース外に出力したファイル)をSCPやFTPなどを利用して新しいマシンや仮想サーバであるEC2へ転送する。そしてファイル転送が完了すると、そのダンプファイルを新しいデータベースへIMPDPコマンドにより格納する。

対するRDS for Oracleの場合、そもそもOSなどを利用者が意識できない。この場合のダンプファイルのRDS for Oracleへの転送方法は、DBMS_FILE_TRANSFERというOracle Database内部のプロシージャを利用することになる。また、移行元のデータベースから、新しいデータベースである「RDS for Oracle」に対して、Database linkを作成しておかなければならないことにも注意が必要だ。具体的な方法は以下の通りとなる。

  1. 移行元のデータベースでDatapumpユーティリティのEXPDPを利用して、ダンプファイルを作成する。
  2. 移行元のデータベースから移行先の「RDS for Oracle」に対してDatabase Linkを作成する。
  3. DBMS_FILE_TRANSFER .PUT_FILEメソッドを利用して、「RDS for Oracle」へダンプファイルを転送する。
  4. DatapumpユーティリティのIMPDPを利用して、転送されたダンプファイルから「RDS for Oracle」へデータを格納する。

また、さらなる注意事項として、DBMS_FILE_TRANSFERで転送されたダンプファイルは「RDS for Oracle」では自動で削除されない点がある。このため、データの格納が完了した後は、UTL_FILE.FREMOVEを利用してファイルを削除しておかないと領域の無駄使いとなってしまうので、データ格納完了後はファイルのクリーンアップを推奨する。

Datapumpユーティリティを用いて、RDS for Oracleにデータ移行を実施する場合は、DBMS_FILE_TRANSFERプロシージャでDatabase Linkでファイルを転送する必要がある

Recovery Manager(RMAN)のフルバックアップリストアによる移行

比較的大規模なデータベースを移行する場合、当社ではこの方法で行うことが多い。Oracleが提供するバックアップツール「Recovery Manager(RMAN)」を利用して、移行元のデータベースでオンライン・フルバックアップを取得し、移行先のデータベースにリストアを行う。フルバックアップのリストア後は、随時移行元のデータベースから出力されるアーカイブログ(データベースの更新ログ)を移行先のデータベースへ転送し適用することで、移行元の変更情報の取り込みを移行先のデータベースで行う。

新しいデータベースへの切り替えのタイミングで、最後のアーカイブログを移行元のデータベースで出力、移行先のデータベースへ反映させ、データベースをオープンすることで移行完了となり、切り替え当日のデータベースの停止時間などを比較的短くすることが可能となる。

この方法は「Oracle on オンプレミスサーバ」「Oracle on EC2」のデータベース環境でのみ利用でき、「RDS for Oracle」では利用できない。そもそも、RMAN自体が「RDS for Oracle」では利用できないので、この方法は使えないのである。

特殊なツール/ソフトを利用した移行

昨今、データベースの移行ツールは非常に多く存在する。中でも紹介したいのは、AWSが提供する「AWS Database Migration Service(DMS)」である。これは、移行元のデータベース、移行先のデータベースのいずれか一方がAWS内にあれば利用可能なサービスで、ダウンタイムを抑えながら安全に移行できる非常に便利なツールとなる。

DMSでは、データ移行に関するさまざまな機能を提供しているが、代表的な機能はReplicate ongoing changesというチェンジ・データ・キャプチャ機能(CDC)である。これは、DMSが移行元であるソースデータベースのトランザクションログから更新差分を抽出し、移行先のターゲットデータベースへ継続的に更新情報をアプライするという機能であり、ソースデータベースへの負荷も非常に少なく、継続的なデータの移行が可能となる。

この機能を利用してデータベースの移行設計を行うことで、移行時のデータベースの停止などのダウンタイムをきわめて短くすることが可能となる。移行先のデータベースであるターゲットデータベースとしては、「Oracle on オンプレミスサーバ」「Oracle on EC2」「RDS for Oracle」のいずれにも対応しており、当社でも今後DMSを活用したAWSへのOracle Databaseのマイグレーションサービスを積極的に提案したいと考えている。AWSへのデータベース移行における注目のサービスとなる。

AWS Database Migration Serviceも基本的な設定はその他のAWSサービス同様、AWS Management ConsoleとよばれるWebページからGUIベースでの設定が可能(対応しているOracleのバージョンは10g、11g、12c)

今回はOracle Databaseの移行方法のうち、当社が良く利用する3つを紹介した。データベースの移行はデータの容量、移行時に許容されるデータベースの停止時間(ダウンタイム)など、さまざまな要素を鑑みて方式を決定する必要があるので、せひ参考にしていただければと思う。

山口 正寛


1984年大阪府生まれ。データベースエンジニア、コンサルタントなどの活動経験が豊富。現在は株式会社システムサポートの東京支社 クラウドコンサルティング事業部 シニアマネージャーとして、主にDatabase(特にOracle、Redshift)領域を担当。Amazonの提供するリレーショナルデータベースのAuroraにも詳しい。クラウド工房 ブログでときどき関連情報を発信している。職場ではオフィスグリコを絶賛消費中。