現在地

Oracle Cloud 関連情報:Oracle Autonomous Database に移行してみよう ~ MV2ADB を使用した移行編 ~



サンプル

基盤ソリューション事業本部 オラクル事業部
サービス推進担当

N. A

はじめに

既存の DB を Cloud、特に Autonomous Data Warehouse Cloud へ移行する際の方法について、調べてみました。
オーソドックスな方法としては、やはり Oracle Data Pump を使用して移行する方法になるでしょうか。on-premise での移行方法とおおむね同じですが、export したダンプファイルを Object Storage にアップロードして、Object Storage 上のダンプファイルから import 実施する、といった手順になります。

参考:
Oracle Autonomous Data Warehouseの使用
- Autonomous Data Warehouse上のOracle Data Pumpを使用したデータのインポート
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/load-data-data-pump.html#GUID-30DB1EEA-DB45-49EA-9E97-DF49A9968E24

他にも、Oracle Golden Gate や Oracle GoldenGate Cloud Service などを利用してデータの同期をとる方法、データが csv 形式などで別に保管されていれば SQL*Loaderを利用してロードする方法なども場合によっては選択できるでしょう。
ここは仮に Data Pump を使用する手順を採用したとしましょう。定期的にデータを移行したい場合など、毎回 Data Pump を実行して、生成されたダンプファイルをアップロード、そのあと Data Pump で import する、というのは若干手間に感じるかもしれません。

今回は、その部分を少し簡略化できるツールが Oracle のナレッジに掲載されていましたので、それを使ってデータを移行する方法をご紹介したいと思います。

(ADB) MV2ADB: move data to Autonomous Database in "one-click" (ドキュメントID 2463574.1)

※ 保守契約を締結した顧客が利用できる情報となりますので、使用にあたってのアカウント情報などは適宜保守契約先にお問合せください。

MV2ADB を使用した移行

前提

基本的に、ツールで一括で作業できるようになっているのみで、中身としては、Data Pump Export とダンプファイルのアップロード、Data Pump import が実行されているようです。
また、本記事執筆時点(2019年12月26日)では Linux X86-64 向けのみのリリースです。

準備

まず、このツールを使用するにあたって、いくつか準備が必要です。
以下の手順では、既存の DB と、移行先の Autonomous Database、Object Storage にアクセスできる環境上にツール類全てをインストールしています。

1. ツール自体のインストール

rpm 形式でツールが提供されています。
yum/rpm などを使ってインストールしましょう。
※ 本ツールは、デフォルトで /opt/mv2adb にインストールされます。

例:

# yum install mv2adb-2.0.1-76.noarch.rpm

2. Oracle Instant Client のインストール

rpm/zip 形式で提供されていますので、適宜ダウンロード・インストールしましょう。
Basic、SQL*Plus、Tools の 3つが必要です。

Oracle Instant Client の入手はこちら:
https://www.oracle.com/technetwork/jp/database/database-technologies/instant-client/downloads/index.html
※ 入手・利用には Oracle Technology Network License Agreement への同意が必要です。

例:

# yum install oracle-instantclient18.5-*.rpm

3. OCI-CLI のインストール

事前に Python 3 をインストールしておくことをおすすめします。
Python 2 でも本記事執筆時点(2019年12月26日)では動作しますが、Python2自体のサポートが2020年1月1日で終了する予定のためです。

参考:
Sunsetting Python 2
https://www.python.org/doc/sunset-python-2/

OCI-CLI も、2020年以降のリリースでは、Python 2 での動作を保証しないようですね。
Python3 をインストールせずに Python 2 がある状態で OCI-CLI インストール後、 ヘルプコマンドを実行してみたら、以下のメッセージが出力されました。

WARNING: Python 2 support is ending on December 31, 2019. Future versions of OCI CLI after January 2020, will not be compatible with Python 2. To avoid interruption at that time, please install OCI CLI in a compatible Python 3 environment.

※ OCI-CLI の使用には、OCI の User と、そのユーザの API Keys が必要です。

OCI-CLI の入手とインストール方法はこちら
https://github.com/oracle/oci-cli

直接 Public Internet にアクセスできれば、以下のコマンドでダウンロード・インストールできます。

# bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

いくつか、インストール先などを確認されますが、全部デフォルト値のまま(Enter 入力)で先に進めます。
※ 既にインストールしていないか、事前に確認しておきましょう。

インストールが完了したら、初期設定を行います。

# oci setup config

構成ファイルの保存先、OCI-CLI を実行するユーザの OCID、テナントの OCID、操作する対象の Regionを聞かれます。
構成ファイルの保存先はデフォルトでも困らないと思いますが、他は実際に使用する環境の情報を入力します。
また、鍵を生成することも、既存の鍵を登録することもできます。User に API Key を登録していなければこのコマンドで生成した鍵を登録してもいいかもしれません。

4. Oracle Cloud の Object Storage に Bucket の作成

4-1. OCI Console の左側の一覧から Object Storageを選択します。
4-2. コンパートメントを確認して Create Bucket(バケットの作成)をクリック
4-3. 任意の Bucket Name を入力して Create Bucketをクリック。

5. 4 の Bucket にアクセスできるユーザの Auth Token(認証トークン)の生成

5-1. OCI Console の右上、人影のアイコンをクリックして、プロファイルが表示されたらユーザ名をクリックします。
5-2. ユーザ情報のページで、左下の Resources(リソース)の箇所から、Auth Tokens(認証トークン)を選択し、Generate Token(トークンの生成)をクリックします。
5-3. Description(説明)のところに何のために生成したトークンかわかるようにメモを入れて、Generate Token(トークンの生成)をクリックします。

※ Auth Token は1ユーザあたり2つまでしか生成できません。すでに2つある場合は 不要なものを削除するか、既存の Auth Token を再利用する必要があります。ユーザを新規でこの作業のために作成するというのも一つの手ですね。

6. 設定ファイルの準備

5 までの手順で用意した、各種の情報と、対象のDB(On-Premise & Autonomous Database)の情報を使用します。最低限必要な設定は以下の通りです。必要に応じて追加の設定を行ってください。
なお、構成ファイルのテンプレートは、<ツールインストール先>/conf (デフォルトで /opt/mv2adb/conf)の配下にあります。
適宜コピー・編集して使用しましょう。

パラメーター設定すべき値の説明
DB_CONSTRINGツールのある環境から移行元のDBに接続する際の接続記述子
SYSTEM_DB_PASSWORD移行元のDBの system ユーザのパスワードを mv2adb encpass(※1)で暗号化したもの
SCHEMAS移行対象のスキーマをカンマ区切りで並べたもの
DUMP_NAMEダンプファイル名
DUMP_PATHダンプファイルの出力先
OHOME移行元の DB のOracle Home のパス
ICHOME手順 2 でインストールした Oracle Instant Client の Oracle Home(インストール先)
ADB_NAME移行先の Autonomous Database 名
ADB_PASSWORD移行先の Autonomous Database の admin ユーザのパスワードを mv2adb encpass で暗号化したもの
ADB_CFILEAutonomous Database の認証情報ファイル(※2)のパス
OCI_HOSTObject Storage の Swift互換の Endpoint URL(※3)
OCI_TENNANTCloud Tenant 名
OCI_BUCKET手順 4 で用意した Bucket 名
OCI_ID使用する OCI のユーザ名
OCI_PASSWORD使用する OCI のユーザの Auth Token(手順 5 で生成したもの)を mv2adb encpass で暗号化したもの
OCIC_COMPART_ID使用する OCI のコンパートメントの OCID

※1 mv2adb では、使用するパスワードを平文で保存しなくていいように、暗号化したものを使います。暗号化は、mv2adb のオプションコマンドの mv2adb encpass で行えます。コマンドを実行すると、暗号化したいパスワードの入力と、その確認用の再入力を求められ、入力すると暗号化後のパスワードが表示されますので、それを入力します。

※2 OCI Console の Autonomous Database のページから、認証情報をダウンロードし、ツールと同じサーバ上に配置してください。

※3 Endpoint URL は、下記のページから使用するリージョンのものを確認して設定してください。
API Reference and Endpoints
 https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apiref.htm
 - Object Storage and Archive Storage APIs
 - Swift API (for use with Oracle RMAN)

また、設定例が本コラムの前半でご紹介したツールのナレッジに記載されていますので、詳細はそちらをご参照ください。

実行

実行コマンド

コマンドは簡単です。

# /opt/mv2adb/mv2adb auto -conf <設定ファイルパス>

例:

# /opt/mv2adb/mv2adb auto -conf conf/mv2adb.conf

設定ファイルに記載する情報は、全てオプションで指定可能です。そのため、日付などでファイルを変更したい場合はそこを変数にして動的な値とすることも可能だと思います。

結果の確認

SUCCESS: YYYY-MM-DD hh:mi:ss: Impdp to ADB '' executed successfully

最終行にこのメッセージが出ていれば完了です。
Expdp、Upload、Impdp の箇所で合計4行の SUCCESS: のメッセージが出力されます。

ご利用に際しての注意点

いくつか、私が触っていて、気になった箇所・エラーを確認してしまった箇所についてご紹介します。
利用される際の参考になれば幸いです。

Oracle Instant Client のバージョンについて

Oracle Instant Client をインストールする際、張り切って最新のものを使えばいいというものではありません。
移行先の DB よりも高いバージョンの Oracle Instant Client をインストールしてしまうと、バージョンの互換性問題によってエラーで止まります。
互換性をクリアしている中で最新のものを使うことを推奨します。

本ツール自体のバージョンについて

本ツールは頻繁に機能拡張・修正されています。場合によっては過去のバージョンと異なる動作をする可能性があります。何かしらの運用に組み込む際には、十分な検証を実施され、ご利用されるオプション・機能を指定した場合に安定した動作をする版を使用されるといいでしょう。

※ 本記事執筆時点(2019年12月26日)で最新版は Version: 20191218 - Revision: 2.0.1.76 ですが、少なくとも、一つ前の 2.0.1.75 では一部期待した動作にならないことを確認しています。実際、私が最初に確認してから、記事を執筆するまでに 2回、3件の FIX が追加されています。

Expdp 時の暗号化機能について

本ツールでは、Expdp 時のダンプファイルを暗号化する機能が存在しています。
移行元の環境で Oracle Advanced Security をお持ちでない場合は使用できませんので、その際は暗号化を使用するオプションを設定せずにお使いください。(手順 6 の構成ファイルの準備箇所では、対象のパラメータを用いない場合のものをご紹介しています。)
※ もちろん、暗号化されていないダンプファイルを使うことになるので、含まれるデータにはご注意を。

Expdp 時の Parallel 処理について

移行元の DB が Enterprise Edition でない場合、Expdp 時に Parallel 処理が行えません。
直接 Expdp 時の Parallel 度を変更できる箇所は確認できませんでしたが、構成ファイルのADB_CORES パラメータに 1を設定すると、Impdp 時の Parallel 度を設定でき、その結果 Expdp 時の処理も Non-Parallel で実施されます。Parallel 処理が行えない環境下では、手順 6 の構成ファイルの準備で ADB_CORES=1 を追加で設定しましょう。

最後に

手動でやるのと比べると、事前準備ができていればワンコマンドで最後まで終わるというのが便利ですね。ただし、あくまでも手動でやる作業をつないで一括で処理してくれるツールです。
NWが制御されていて直接 Object Storage にアップロードできない環境などでは使用に制限があります。現時点での利用シーンとしては、Free Tier などに作成した検証環境へのテストデータの移行の簡略化、といったところでしょうか。今後の安定版・機能拡張が楽しみです。

今後、ツールのバージョンアップや、Cloud 側のアップデート次第では、こういったツールを利用した移行を気軽に行う時代がやってくる…かもしれません。