Amazon S3を利用したAmazon RDS for Oracleへのデータ移行

Pocket

はじめに

AWSに直接接続できないオンプレミスのOracle DatabaseをRDSに移行することになりました。

この場合、RDSにデータファイルをアップロードしてOracle Data Pumpでインポートする方法がありますが、Amazon EC2に一旦データファイルをアップロードした後、PL/SQLのUTL_FILEパッケージを使ってRDSのディスクにアップロードという流れになり、作業が煩雑だなと感じていました。

AWSのサービスを活用して実現できないものかと調べていたところ、「Amazon RDS for Oracle が Amazon S3との統合によるデータ送受信機能のサポートを開始」という記事から、RDSからS3に格納しているファイルを直接ダウンロードできる機能が実装されていることが分かりました。タイミングよく実装された機能ですので、今回はこの機能を使用してデータ移行を行い、その手順についてご紹介したいと思います。

環境について

今回使用した環境は以下の通りです。

移行データはスキーマを指定しData Pumpで事前にエクスポートしています。
また、以下の環境は構築済みとします。
・EC2(操作用インスタンス)
  OS:Windows 2012 R2
  ソフトウェア:Oracle Database Client 12.2.0.1
・RDS
  DBエンジン:Oracle Database Standard Edition Two
  DBエンジンのバージョン:Oracle 12.2.0.1
  オプショングループ:DBエンジンのバージョンに対応したものを作成
  セキュリティグループ:操作用インスタンスからsqlplusでのアクセスを許可する

大まかな作業の流れ

作業前に大まかな流れを説明しておきます。

  • S3の設定
    データファイルを置くためのバケットを作成し、端末等からデータファイルをアップロードします。
  • AWS Identity and Access Management (以下IAM)の設定
    RDSから作成したバケットにアクセスするためのIAMポリシーとロール設定を行います。
  • RDSの設定
    作成したロールをRDSに割り当て、S3からファイルをダウンロードする機能(Amazon S3統合機能)を有効にします。
  • RDSからS3のデータファイルをダウンロード
    Amazon S3統合機能を使用してRDSからS3のデータファイルをダウンロードします。
  • インポート準備
    RDSで移行先データベースの設定を行います。
  • Data Pumpでデータベースにインポート
    RDSでData Pumpを使用し、データファイルをインポートします。

設定手順

S3の設定

移行データを格納するためのS3設定を行います。
・S3にバケットを作成します
・バケット内にData Pumpでエクスポートしたファイルのみをアップロードしておきます

IAMの設定

ポリシー作成

RDSがS3にアクセスする為に必要なポリシーを作成します。
・IAM管理画面で「ポリシー」をクリックし、「ポリシーの作成」ボタンをクリックします

・「サービスの選択」をクリックします

・「S3」をクリックします

・「アクション」-「アクセスレベル」-「リスト」を開き、「ListBucket」を選択します

・「アクション」-「アクセスレベル」-「読み込み」を開き、「GetObject」を選択します

・「アクション」-「アクセスレベル」-「書き込み」を開き、「PutObject」を選択します

・「リソース」を開き、「bucket」行の「ARNの追加」をクリックします

・「Bucket name」に作成しておいたバケット名を入力し、「追加」ボタンをクリックします

・「object」行の「ARNの追加」をクリックします

・「Bucket name」に作成しておいたバケット名を入力、「Object name」には何も入力せず、右端のチェックボックスをオンにして「追加」をクリックします

・「ポリシーの確認」をクリックします

・ポリシー名を入力し「ポリシーの作成」をクリックします

ロール作成

RDSがS3にアクセスする為に割り当てるロールを作成します。
・IAM管理画面で「ロール」をクリックし、「ロールの作成」ボタンをクリックします

・「このロールを使用するサービスを選択」で「RDS」をクリックします

・画面下に「ユースケースの選択」が表示されるので、「RDS – Add Role to Database」をクリックし、「次のステップ:アクセス権限」ボタンをクリックします

・作成したポリシーを選択し「次のステップ:タグ」をクリックします

・(任意)タグを追加し「次のステップ:確認」をクリックします

・ロール名を入力し「ロールの作成」をクリックします

RDSの設定

オプショングループの設定

RDSからS3のファイルをダウンロードする機能を有効にします。
・RDS管理画面で「オプショングループ」をクリックし、データベースに割り当てているオプショングループのチェックボックスをオンにし、「オプションの追加」をクリックします

・「オプション」で「S3_INTEGRATION」、「バージョン」は「1.0」、「すぐに適用」は「はい」を選択し「オプションの追加」をクリックします

・データベースのステータスが「変更中」から「利用可能」になった事を確認します

IAMロールの割り当て

RDSにIAMロールを割り当てます。
・RDS管理画面で「データベース」をクリックし、対象データベースをクリックします

・画面最下部の「IAMロールの管理」で、「このインスタンスに IAM ロールを追加」で作成したロール、「機能」で「S3_INTEGRATION」を選択し、「ロールの追加」をクリックします

・「ステータス」が「保留」から「アクティブ」になった事を確認します

・データベースのステータスが「変更中」から「利用可能」になった事を確認します

RDSからS3のデータファイルをダウンロード

・操作用インスタンスでコマンドプロンプトを起動し、sqlplusを使用してRDSに接続します

・ファイルが格納されるDATA_PUMP_DIR配下のファイルを確認します

・RDSからS3のデータファイルをダウンロードします

 コマンドに間違いがなければTASK IDが返されます

・実行ログを確認します
 前の手順で取得したTASK IDを使用して実行ログファイル名を指定し、実行ログを表示させます

 ”The task finished successfully”と表示されていればデータファイルのダウンロードは成功しています

インポート準備

・スキーマ作成します

・表領域の作成します

・デフォルトのテーブルスペースを変更します

・必要な権限付与を行います

Data Pumpでデータベースにインポート

・Data Pumpを実行します
 実行ログを”IMPORT.LOG”に指定しています。

・Data Pumpの実行ログを確認します

 ”successfully completed”が表示されていればインポートは成功しています

・データファイルと実行ログファイルを削除します

おわりに

今回はタイミングよく新機能を利用し、スムーズに移行することができました。クラウド界隈は技術の進歩が速いので、最新技術のキャッチアップは非常に重要だと改めて感じさせられました。

お問い合わせ先

執筆者プロフィール

Yonezawa Kouhei
Yonezawa Kouheitdi デジタルイノベーション技術部
福岡県在住。半導体関連、アプリケーション開発、運用関連業務を経て、現在はインフラ系の技術支援業務を担当。直近のテーマはクラウド技術者育成と体力づくり。
Pocket

関連記事