Azure VM 上の SQL Server データベースを復元する

この記事では、Azure 仮想マシン (VM) 上で実行されており、Azure Backup サービスで Azure Backup Recovery Services コンテナーにバックアップしてある SQL Server データベースを復元する方法について説明します。

この記事では、SQL Server データベースを復元する方法について説明します。 詳細については、Azure VM で SQL Server データベースをバックアップする方法に関するページをご覧ください。

Note

サポートされている構成とシナリオの詳細については、SQL バックアップのサポート マトリックスに関する記事を参照してください。

特定の時刻または復旧ポイントに復元する

Azure Backup は、Azure VM 上で実行されている SQL Server データベースを次のように復元できます。

  • トランザクション ログ バックアップを使用して、特定の日付または時刻 (秒) に復元します。 Azure Backup は、選択された時刻に基づいて復元するために必要な、適切な完全または差分バックアップおよび一連のログ バックアップを自動的に判定します。
  • 特定の復旧ポイントに復元するには、特定の完全または差分バックアップを復元します。

復元の前提条件

データベースを復元する前に、次のことに注意してください。

  • このデータベースを同じ Azure リージョン内の SQL Server のインスタンスに復元することができます。
  • 宛先サーバーがソースと同じコンテナーに登録されている必要があります。 バックアップを別のコンテナーに復元する場合は、サブスクリプション間の復元を有効にします
  • サーバー上で複数のインスタンスを実行している場合は、すべてのインスタンスが稼働している必要があります。 そうでない場合、データベースを復元する対象サーバーの一覧にサーバーが表示されません。 詳細については、トラブルシューティングの手順を参照してください。
  • TDE で暗号化されたデータベースを別の SQL Server に復元するには、まず証明書を宛先サーバーに復元する必要があります。
  • CDC 対応のデータベースは、[ファイルとして復元] オプションを使用して復元する必要があります。
  • [ファイルとして復元] オプションを使用して "master" データベースを復元してから、T-SQL コマンドを使用して復元することを強くお勧めします。
  • すべてのシステム データベース (モデル、msdb) の場合は、復元をトリガーする前に SQL Server Agent サービスを停止してください。
  • これらのいずれかのデータベースへの接続を奪おうとする可能性があるアプリケーションはすべて閉じます。
  • マスター データベースに関しては、復元の別の場所オプションはサポートされていません。 マスター データベースは、ファイルとして復元オプションを使用して復元した後、T-SQL コマンドを使用して復元することをお勧めします。
  • msdbmodel に関しては、復元の別の場所オプションがサポートされるのは、復元されるデータベース名ターゲット データベース名と異なる場合だけです。 ターゲット データベースと同じ名前で復元したい場合は、ファイルとして復元オプションを使用して復元した後、T-SQL コマンドを使用して復元することをお勧めします。

データベースを復元する

復元するには、次のアクセス許可が必要です。

  • 復元を実行するコンテナー内のバックアップ オペレーター アクセス許可。
  • バックアップされるソース VM への共同作成者 (書き込み) アクセス。
  • ターゲット VM への共同作成者 (書き込み) アクセス。
    • 同じ VM に復元する場合は、これがソース VM になります。
    • 別の場所に復元する場合は、これが新しいターゲット VM になります。

次のように復元します。

  1. Azure portal で、 [バックアップ センター] に移動し、 [復元] をクリックします。

    復元プロセスの開始を示すスクリーンショット。

  2. [データソースの種類] として [Azure VM の SQL] を選択し、復元するデータベースを選択して [続行] をクリックします。

    [データソースの種類] の選択を示すスクリーンショット。

  3. [復元の構成] で、データの復元先 (または復元方法) を指定します。

    • 別の場所:別の場所にデータベースを復元し、元のソース データベースを保持します。

    • DB の上書き:元のソースと同じ SQL Server インスタンスにデータを復元します。 このオプションでは、元のデータベースが上書きされます。

      重要

      選択したデータベースが Always On 可用性グループに属している場合、SQL Server はデータベースの上書きを許可しません。 [別の場所] のみを使用できます。

    • ファイルとして復元:データベースとして復元するのではなく、バックアップ ファイルとして復元します。このファイルは、SQL Server Management Studio を使用して、ファイルが存在する任意のマシンに後からデータベースとして復元できます。

別の場所に復元する

  1. [復元の構成] メニューの [復元先] で、 [別の場所] を選択します。

  2. データベースを復元する先の SQL Server の名前とインスタンスを選択します。

  3. [復元される DB 名] ボックスに、ターゲット データベースの名前を入力します。

  4. 該当する場合は、 [選択した SQL インスタンスに既に同じ名前の DB が存在する場合に上書きする] を選択します。

  5. [復元ポイント] を選択し、特定の時点に復元するのか、特定の復旧ポイントに復元するのかを選択します。

    [復元ポイント] の選択を示すスクリーンショット。

    特定の時点への復元を示すスクリーンショット。

  6. [詳細な構成] メニューで、次の手順を実行します。

    • 復元後にデータベースを非運用状態のままにする場合は、 [NORECOVERY を使用して復元] を有効にします。

    • 宛先サーバー上の復元場所を変更する場合は、新しいターゲット パスを入力します。

      ターゲット パスを入力する

  7. [OK] を選択して復元をトリガーします。 [通知] 領域で復元の進行状況を追跡します。または、コンテナーの [バックアップ ジョブ] ビューでそれを追跡します。

    Note

    特定の時点への復元は、完全復旧モードと一括ログ復旧モードのデータベースのログ バックアップに対してのみ使用できます。

復元および上書き

  1. [復元の構成] メニューの [復元先] で、 [DB の上書き]>、 [OK] の順に選択します。

    [DB の上書き] を選択する

  2. [復元ポイントの選択] で、特定の時点に復元する[ログ (特定の時点)] を選択します。 または、[完全および差分] を選択して、特定の復旧ポイントに復元します。

    Note

    特定の時点への復元は、完全復旧モードと一括ログ復旧モードのデータベースのログ バックアップに対してのみ使用できます。

ファイルとして復元

バックアップ データをデータベースとしてではなく .bak ファイルとして復元するには、 [ファイルとして復元] を選択します。 指定されたパスにファイルがダンプされると、ファイルをデータベースとして復元したい任意のマシンにこれらのファイルを移すことができます。 これらのファイルを任意のマシンに移動できるので、サブスクリプションやリージョンをまたいでデータを復元できるようになりました。

  1. [復元する場所と方法] で、 [ファイルとして復元] を選択します。

  2. バックアップ ファイルを復元する先の SQL サーバーの名前を選択します。

  3. [サーバー上の宛先パス] に、手順 2 で選択したサーバー上のフォルダー パスを入力します。 これは、必要なすべてのバックアップ ファイルをサービスがダンプする場所です。 通常、ネットワーク共有パスや、宛先パスとして指定されているマウントされた Azure ファイル共有のパスを使うと、同じネットワーク内の他のマシンや、それらにマウントされている同じ Azure ファイル共有でこれらのファイルに簡単にアクセスできます。

    Note

    ターゲットとなる登録済み VM にマウントされている Azure ファイル共有でデータベース バックアップ ファイルを復元するには、NT AUTHORITY\SYSTEM でファイル共有にアクセスできることを確認します。 下の手順を行い、VM にマウントされている AFS に読み取り/書き込みアクセス許可を付与できます。

    • PsExec -s cmd を実行し、NT AUTHORITY\SYSTEM シェルに入ります
      • cmdkey /add:<storageacct>.file.core.windows.net /user:AZURE\<storageacct> /pass:<storagekey> を実行します
      • dir \\<storageacct>.file.core.windows.net\<filesharename> でアクセスの有効性を検証します
    • バックアップ コンテナーから \\<storageacct>.file.core.windows.net\<filesharename> (パス) へのファイルとしての復元を開始します
      [Sysinternals] ページから PsExec をダウンロードすることができます。
  4. [OK] を選択します。

    [ファイルとして復元] を選択する

  5. [復元ポイント] を選択し、特定の時点に復元するのか、特定の復旧ポイントに復元するのかを選択します。

  6. [ファイルとして復元] を使用して SQL データベースのポイントインタイム リストアを実行すると、"完全バックアップ" からすべての復旧ポイントが "選択した時点" に保存されます。 その後、これらのファイルが存在する任意のマシンでデータベースとして利用することで、SQL Server Management Studio を使用して復元できます。

    宛先パスにバックアップ ファイルを復元する

特定の時点に復元する

復元の種類として [ログ (特定の時点)] を選択した場合は、次の操作を行います。

  1. [復元の日付/時刻] でカレンダーを開きます。 カレンダーでは、復旧ポイントが含まれる日付が太字で表示され、現在の日付が強調表示されます。

  2. 復元ポイントのある日付を選択します。 復元ポイントのない日付は選択できません。

    カレンダーを開く

  3. 日付を選択すると、タイムライン グラフに連続した範囲の使用可能な復旧ポイントが表示されます。

  4. タイムライン グラフで復旧の時刻を指定するか、時刻を選択します。 [OK] をクリックします。

ファイルとしての部分復元

Azure Backup サービスは、"ファイルとして復元" 中、ダウンロードする一連のファイルを決定します。 ただし、コンテンツ全体をもう一度ダウンロードしたくないシナリオがあります。

たとえば、毎週のフル、毎日の差分とログのバックアップ ポリシーがあり、特定の差分のファイルを既にダウンロードしている場合などです。 これが適切な復旧ポイントではないことが判明し、翌日の差分をダウンロードすることにしました。 ここでは、開始しているフルが既に存在するため、差分ファイルだけが必要です。 Azure Backup によって提供される "ファイルとしての部分復元" 機能を使用して、ダウンロード チェーンからフルを除外し、差分のみをダウンロードできるようになりました。

バックアップ ファイルの種類の除外

ExtensionSettingsOverrides.json は JSON (JavaScript Object Notation) ファイルであり、SQL 用の Azure Backup サービスの複数の設定のオーバーライドが含まれています。 "ファイルとしての部分復元" 操作では、新しい JSON フィールド RecoveryPointTypesToBeExcludedForRestoreAsFiles を追加する必要があります。 このフィールドには、次の "ファイルとして復元" 操作でどの種類の復旧ポイントを除外するかを示す文字列値が保持されます。

  1. ファイルをダウンロードするターゲット マシンで、"C:\Program Files\Azure Workload Backup\bin" フォルダーに移動します

  2. まだ存在しない場合は、"ExtensionSettingsOverrides.JSON" という名前の新しい JSON ファイルを作成します。

  3. 次の JSON キーと値のペアを追加します

    {
    "RecoveryPointTypesToBeExcludedForRestoreAsFiles": "ExcludeFull"
    }
    
  4. サービスを再起動する必要はありません。 Azure Backup サービスは、このファイルの記述に従って、バックアップの種類を復元チェーンから除外しようとします。

RecoveryPointTypesToBeExcludedForRestoreAsFiles は、復元時に除外する復旧ポイントを示す特定の値のみを取ります。 SQL の場合、これらの値は次のとおりです。

  • ExcludeFull (差分、ログなど、その他のバックアップの種類は、復元ポイント チェーンに存在する場合にダウンロードされます)
  • ExcludeFullAndDifferential (ログなどのその他のバックアップの種類は、復元ポイント チェーンに存在する場合にダウンロードされます)
  • ExcludeFullAndIncremental (ログなどのその他のバックアップの種類は、復元ポイント チェーンに存在する場合にダウンロードされます)
  • ExcludeFullAndDifferentialAndIncremental (ログなどのその他のバックアップの種類は、復元ポイント チェーンに存在する場合にダウンロードされます)

特定の復元ポイントに復元する

復元の種類として [完全および差分] を選択した場合は、次の操作を行います。

  1. 一覧から復旧ポイントを選択し、 [OK] を選択して復元ポイントの手順を完了します。

    完全復旧ポイントを選択する

    Note

    既定では、過去 30 日間の復旧ポイントが表示されます。 [フィルター] を選択して範囲をカスタマイズすると、30 日間より前の回復ポイントを表示できます。

多数のファイルがあるデータベースを復元する

データベース内のファイルの文字列サイズの合計が特定の制限より大きい場合、Azure Backup でデータベース ファイルの一覧が別の PIT コンポーネントに格納されるため、ユーザーは復元操作中にターゲット復元パスを設定できません。 代わりに、ファイルが SQL の既定のパスに復元されます。

大きなファイルがあるデータベースを復元する

SSMS を使用して .bak ファイルからデータベースを復旧する

"ファイルとして復元" 操作を使用すると、Azure portal からの復元中に .bak 形式のデータベース ファイルを復元できます。 詳細については、こちらを参照してください

.bak ファイルの Azure 仮想マシンへの復元が完了したら、SSMS 経由で TSQL コマンド を使用して復元をトリガーできます。   データベース ファイルを "ソース サーバー上の元のパス" に復元するには、TSQL 復元クエリから MOVE 句を削除します。

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'

Note

ターゲット サーバーに同じデータベース ファイルを含めることはできません (置換による復元)。  また、ターゲット サーバーでファイルの瞬時初期化を有効にして、ファイル初期化時間のオーバーヘッドを削減することもできます。

ターゲット復元サーバーからデータベース ファイルを再配置するには、MOVE 句を使用して TSQL コマンドを組み立てることができます。

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'  MOVE N'<LogicalName1>' TO N'<TargetFilePath1OnDisk>',  MOVE N'<LogicalName2>' TO N'<TargetFilePath2OnDisk>' GO

  USE [master] 
  RESTORE DATABASE [test] FROM  DISK = N'J:\dbBackupFiles\test.bak' WITH  FILE = 1,  MOVE N'test' TO N'F:\data\test.mdf',  MOVE N'test_log' TO N'G:\log\test_log.ldf',  NOUNLOAD,  STATS = 5 
  GO

データベースに複数のファイルがある場合は、復元クエリに追加の MOVE 句を追加できます。 また、.bak ファイルを使用してデータベースの復旧を行うために、SSMS を使用することもできます。 詳細については、こちらを参照してください

注意

大規模なデータベース復旧の場合は、TSQL ステートメントを使用することをお勧めします。 特定のデータベース ファイルを再配置する場合は、ファイルとして復元の操作中に作成された JSON 形式のデータベース ファイルの一覧を参照してください。

リージョンをまたがる復元

復元オプションの 1 つである、リージョンをまたがる復元 (CRR) を使用すると、セカンダリ リージョン (Azure のペアになっているリージョン) で Azure VM 上でホストされている SQL データベースを復元できます。

この機能にオンボードするには、開始前の注意に関するセクションを参照してください。

CRR が有効になっているかどうかを確認するには、「リージョンをまたがる復元の構成」の手順に従ってください。

セカンダリ リージョンのバックアップ項目を表示する

CRR が有効になっている場合は、セカンダリ リージョンのバックアップ項目を表示できます。

  1. ポータルから [Recovery Services コンテナー]>[バックアップ項目] に移動します。
  2. セカンダリ リージョンの項目を表示するには、 [セカンダリ リージョン] を選択します。

Note

CRR 機能をサポートする種類のバックアップ管理のみが一覧に表示されます。 現時点では、セカンダリ リージョン データをセカンダリ リージョンに復元することのみが許可されています。

セカンダリ リージョンのバックアップ項目

セカンダリ リージョンのデータベース

セカンダリ リージョンに復元する

セカンダリ リージョンに復元するユーザー エクスペリエンスは、プライマリ リージョンに復元するユーザー エクスペリエンスに似ています。 [復元の構成] ペインで復元の詳細を構成するときに、セカンダリ リージョンのパラメーターのみを指定するように求められます。 コンテナーがセカンダリ リージョンに存在し、SQL サーバーがセカンダリ リージョンのコンテナーに登録されている必要があります。

復元する場所と方法

復元進行中通知をトリガーする

Note

  • 復元がトリガーされた後、データ転送フェーズでは、復元ジョブを取り消すことができません。
  • リージョン間で復元操作を実行するために必要なロールまたはアクセス レベルは、サブスクリプションのバックアップ オペレーター ロール、ソースおよびターゲットの仮想マシンでの共同作成者 (書き込み) アクセスです。 バックアップ ジョブを表示するため、サブスクリプションで必要な最小限のアクセス許可は "バックアップ閲覧者" です。
  • セカンダリ リージョンで使用できるバックアップ データの RPO は 12 時間です。 このため、CRR をオンにすると、セカンダリ リージョンの RPO は 12 時間 + ログ頻度期間 (15 分以上に設定できます) になります。

リージョンをまたがる復元の最小ロール要件について説明します。

セカンダリ リージョンの復元ジョブの監視

  1. Azure portal で、 [バックアップ センター]>[バックアップ ジョブ] に移動します。

  2. CrossRegionRestore のフィルター操作を実行して、セカンダリ リージョンのジョブを表示します。

    フィルター処理されたバックアップ ジョブを示すスクリーンショット。

サブスクリプション間の復元

Azure Backup で、復元ポイントから任意のサブスクリプション (次の Azure RBAC 要件に従って) に SQL データベースを復元できるようになりました。 既定では、Azure Backup は、復元ポイントが使用可能な同じサブスクリプションに復元します。

サブスクリプション間の復元 (CSR) を使用すると、復元アクセス許可が使用可能な場合は、任意のサブスクリプションとテナントの下の任意のコンテナーに柔軟に復元できます。 既定では、CSR はすべての Recovery Services コンテナー (既存のコンテナーと新しく作成されたコンテナー) で有効になっています。

注意

  • Recovery Services コンテナーからクロス サブスクリプション復元をトリガーできます。
  • CSR はストリーミング ベースのバックアップでのみサポートされ、スナップショット ベースのバックアップではサポートされていません。
  • CSR を使用したリージョンをまたがる復元 (CRR) はサポートされていません。

Azure RBAC の要件

演算の種類 バックアップ オペレーター Recovery Services コンテナー 代替オペレーター
データベースを復元する、またはファイルとして復元する Virtual Machine Contributor バックアップされたソース VM 組み込みロールではなく、次のアクセス許可を持つカスタム ロールを検討できます。

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Virtual Machine Contributor データベースが復元される、またはファイルが作成されるターゲット VM。 組み込みロールではなく、次のアクセス許可を持つカスタム ロールを検討できます。

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Backup Operator ターゲット Recovery Services コンテナー

既定では、Recovery Services コンテナーでは CSR が有効になっています。 Recovery Services コンテナーの復元設定を更新するには、[プロパティ]>[サブスクリプション間の復元] に移動し、必要な変更を行います。

SQL データベースに対する Recovery Services コンテナーの [サブスクリプション間の復元] 設定を変更する方法を示すスクリーンショット。

次のステップ

Azure Backup によってバックアップされた SQL Server データベースを管理および監視します