Azure SQL Database の Point in Time Restore を使用したデータベースの復元方法と注意点

皆さん、こんにちは。BI Data Platform サポートチーム です。

SQL Database をご利用いただいている方の多くにその便利さを感じていただいているであろう機能の一つとして Point in Time Restore があるかと思います。
大変便利な機能ですが、利用にあたり少し留意いただきたい点がありますので、Point in Time Restore の利用方法とともに、説明します。

Point in Time Restore とは

SQL Database は、マネージド型のサービスのため、手動でバックアップを取得する必要はありません。
そのかわりに、SQL Database 自身が内部的にデータベースの完全バックアップ (週に1回)、差分バックアップ (数時間に1回)、トランザクションログバックアップ (5分~10分程度に1回) を取得しております。
ユーザーの皆さんは、バックアップの保持期間内であれば任意の日時の SQL Database を復元することが可能です。

バックアップの保持期間は、ご利用いただいているサービスレベルで異なりますので、詳細は下記をご参照ください。

SQL Database バックアップについての詳細情報
/ja-jp/azure/sql-database/sql-database-automated-backups

 

利用方法

例えば、Point in Time Restore が役に立つシナリオとして、下記が考えられるかと思います。

  • 操作ミスなどで、SQL Database 内の重要なデータ (レコードやテーブル) を削除してしまい、削除前に戻したい場合
  • 特定の日時の SQL Database を復元し、その環境に対して検証作業を行いたい場合

前者の場合は、誤って削除する前のタイミングのデータベースを復元し、クライアントアプリケーションからの接続先を復元したデータベースにするか、元のデータベースを別の名前に変更したうえで復元したデータベースに元のデータベース名をつけることが考えられます。
後者の場合は、復元を行ったデータベースを検証したいアプリケーションの接続先として指定するだけで実現可能です。

Point in Time Restore を使用した復元作業は簡単です。
Azure Portal 画面を使う方法、PowerShell を使う方法、RestAPI を使う方法の3つの方法で復元ができます。
例えば Azure Portal 画面から復元する場合には、下図のように Azure Portal 画面上で復元を行いたい SQL Database の [概要] ページを開き、[復元] ボタンを選択し、復元したい日時や復元先の価格レベル、新しいデータベース名を指定します。

<図1. Azure Portal 画面>

これで、指定した日時までのデータを持った新しいデータベースが作成できます。

 

注意点

一点ご注意いただきたい点として、あくまで Point in Time Restore 機能は指定した日時のデータを持った "新しい SQL Database" が作成される点です。
つまり Point in Time Restore で復元したデータベースは、復元時点より前のバックアップデータは保持しておらず、復元したデータベースに対して Point in Time Restore を使った復元を行おうとしても復元可能な "最も前の復元ポイント" は復元されたタイミング以降になります。
例えば、下図のように Point in Time Restore を使って復元されたデータベース B は、データベース B が作られたタイミング以前に戻すことができず、データベース B が作られたタイミングより前に戻すためにはデータベース A に対して Point in Time Restore を行う必要があります。

<図2. Point in Time Restore バックアップ保持期間イメージ図>

では、この動作はどのようなときに注意する必要があるのでしょうか。
それは、データベース B を Point in Time Restore で作成した後に、元となったデータベース A を削除する場合です。
この場合、仮にデータベース B 作成時点よりも前に戻したいと思っても、データベース B のバックアップにはデータベース B が作成されたタイミング以降のバックアップデータしか含まれていないためそれ以前の状態に戻すことはできません。また SQL Database には削除されてから一定の期間であれば削除済みのデータベースを復元する機能がありますが、この機能を使って復元できるのはあくまでデータベース A を削除したタイミングのデータベースだけであり、それに紐づくバックアップファイルは復元できず Point in Time Restore を使って削除されたタイミングより前に戻すこともできません。

以上のことから、Point in Time Restore の作成元となったデータベース (データベースA) を削除する際には、それよりも前の時点に戻す必要が無いのかを十分にご検討いただいてから削除頂くか、復元後十分な時間が経過し Point in Time Restore で新しく作成されたデータベース (データベースB) に対する十分な期間のバックアップが取得された後に元のデータベースを削除頂ければと思います。

※ 本Blogの内容は、2017年6月28日現在の内容となっております。