Amazon RDS for SQL Serverへバックアップファイル(bak)からDBを復元する方法

Amazon RDS for SQL Serverへバックアップファイル(bak)からDBを復元する方法

Amazon RDS for SQL Serverはsaユーザ使えなかったり(当然といえば当然なんですが)、直接ファイルからの復元ができなかったりと少し癖があります。
Amazon RDS for SQL Serverへの移行案件があったので調べていたところ、こんなヘルプが!(昔はなかったですよね?)

抜粋

完全バックアップファイル (.bak ファイル) を使用した Microsoft SQL Server データベースのネイティブバックアップおよび復元がサポートされています。簡単に移動可能な 1 つのファイルで SQL Server データベースのインポートとエクスポートを行うことができます。 オンプレミスデータベースの完全バックアップを作成して Amazon Simple Storage Service (Amazon S3) に保存した後、SQL Server を実行する既存の Amazon RDS DB インスタンスにバックアップファイルを復元できます。

とのこと、もっと早くリリースしてほしかったです・・・。
稼働中のSQL Serverからの移行であれば、Azure用のツールを利用することで移行させることができたのですが今回の案件(というかこっちが普通ですかね・・・)は、特定のタイミングのDBを復元して利用したいというものだったため、Azure用ツールでは対応できず。

 

前提

  • SQL Serverを利用している(していた)
  • バックアップファイルを取得済み
  • Amazon RDS for SQL Serverを構築済み(db.t1.microを除く)
  • SQL Server Management StudioがインストールされているクライアントPCがある

システム概要

amazonさんから拝借

sql-bak-file

オンプレでバックアップしたファイルをS3にアップして、そこからRDSに対してリストアをするということみたいです。

 

S3バケットの作成

バックアップファイルを保存するS3バケットを作成します。(手順は多数あるので割愛)
既存のバケットを利用しても大丈夫です。

 

RDSオプショングループの作成

RDSのオプショングループを作成します。
エンジンやバージョンを合わせて作成します。今回は、SQL Server 2008 R2 Standardを利用しているので、
エンジンは、sqlserver-seを、メジャーエンジンのバージョンは10.50を選択しています。
01

 

作成したオプショングループを選択し、【オプションの追加】をクリックします。

02

 

 

SQL_SERVER_BACKUP_RESTOREを選択し、IAMロールを選択するか新規ロールを作成します。
今回作成済みロールを利用します。

03

オプションを追加します。

 

S3へバックアップファイルをアップロード

オンプレミスでバックアップしたバックアップファイルをS3へアップロードします。
アップロード手順は、Management Consoleからでもいいですし、aws cliでアップロードしてもOKです。
aws cliでのアップロードコマンドは下記です。

 

RDS for SQL Serverへのリストア方法

SQL Management Studioを起動しRDSへ接続します。

下記ストアドを実行します。

エラーなく実行できれば成功です。(画面ショット取り忘れてました・・・)

実行中のタスクを確認するには、下記ストアドを実行します。

lifecycle=SUCCESSとなっていれば成功です。

複数同時にリストアが可能かと思い複数同時実行してみました。
結果は・・・

task

2つ同時には実行できるようです。このまましばらく確認していたのですが、1つのリストアが完了すると別なタスクが動き始めました。
一番下のタスクは、私がS3バケットの名前を間違って実行してしまったために発生したエラーです(汗;;;

復元中は、Management Studioはこんな感じになっています。
fukugenミラーリング時の復元みたいですね。

無事にリストアが完了し、問題なくデータベースをAmazon RDS for SQL Server上で利用することができました。

 

RDS for SQL Serverからバックアップ方法

バックアップ用のストアドも用意されています。RDSなのでスナップショット機能もありますが、
AWSからオンプレへの移行時等には利用しやすいかと思います。

指定したS3バケットにbakファイルが作成されます。

 

実際のリストア時間

複数同時実行とかも試した結果ではありますが参考として実測値を掲載しておきます。

  • bakサイズ170GBの場合リストアに約188分
  • bakサイズ 20GBの場合リストアに約   60分

でした。

色々と制約があったRDS for SQL Serverですが色々とできるようになってきました。
あとはストレージのスケーリングができるようになるとかなり使えると思います!
現在は、RDS for SQL Serverはストレージのスケーリングができません・・・

DB インスタンスの作成後の ストレージのスケーリング は現在、SQL Server ではサポートされていません。

AWS構築案件も是非スタートアッププラスまでお問い合わせください!