テナント単位データベース SaaS アプリケーションで、シングル テナントを復元します。

適用対象: Azure SQL データベース

テナント単位データベース モデルは、他のテナントに影響を与えずにシングル テナントを以前の特定の時点まで簡単に復元することを可能にします。

このチュートリアルでは、2 つのデータ回復パターンについて説明します。

  • データベースを並列データベース (サイド バイ サイド) に復元する。
  • 特定の場所にデータベースを復元し、既存のデータベースと置換する。
Pattern 説明
並列データベースに復元する このパターンは、レビュー、監査、コンプライアンスなどのタスクに使用され、テナントで以前の時点からのデータを調査できるようにします。 テナントの現在のデータベースはオンラインのままで、変化しません。
特定の場所に復元する このパターンは通常、テナントのデータを誤って削除または破損した後で、以前の特定の時点にテナントを回復するために使用されます。 元のデータベースはオフラインになり、復元されたデータベースに置き換えられます。

このチュートリアルを完了するには、次の前提条件を満たしておく必要があります。

SaaS テナントの復元パターンの概要

個々のテナントのデータを復元するためのシンプルなパターンが 2 つあります。 テナント データベースは相互に切り離されているため、一方のテナントを復元する際に、もう一方のテナントのデータに影響を及ぼすことはありません。 Azure SQL Database のポイント イン タイム リストア (PITR) 機能は、両方のパターンで使用されます。 PITR は常に、新しいデータベースを作成します。

  • 並列での復元: 最初のパターンでは、テナントの現在のデータベースの隣に、新しい並列データベースが作成されます。 その後、テナントには、復元されたデータベースに対する読み取り専用アクセスが付与されます。 復元されたデータはレビューされ、現在のデータ値を上書きするために潜在的に使用されます。 テナントによる復元されたデータベースへのアクセス方法や提供される復元用オプションを決定するのは、アプリ デザイナーの担当です。 一部のシナリオでは、テナントで以前の時点のデータを簡単に確認可能であることが、唯一の要件になる場合もあります。

  • 特定の場所への復元: 2 つ目のパターンは、データが損失または破損し、テナントで以前の時点まで戻す場合に役立ちます。 データベースの復元中は、テナントがオフラインになります。 元のデータベースが削除され、復元されたデータベースの名前が変更されます。 元のデータベースのバックアップ チェーンは、削除後もアクセス可能なままになり、必要に応じて、以前の時点までデータベースを復元することができます。

データベースでアクティブ geo レプリケーションが使用されて並行して復元される場合は、復元されたコピーから元のデータベースに必要なデータをコピーすることをお勧めします。 元のデータベースを復元したデータベースに置き換える場合は、geo レプリケーションを再構成して再同期する必要があります。

Wingtip Tickets SaaS テナント単位データベース アプリケーションのスクリプトを入手する

Wingtip Tickets SaaS マルチテナント データベースのスクリプトとアプリケーション ソース コードは、WingtipTicketsSaaS-DbPerTenant GitHub リポジトリで入手できます。 Wingtip Tickets SaaS のスクリプトをダウンロードしてブロックを解除する手順については、一般的なガイダンスを参照してください。

開始する前に

データベースが作成されると、最初の完全バックアップから復元可能になるまでに、10 ~ 15 分かかる場合があります。 アプリケーションをインストールした直後の場合は、このシナリオを進める前に数分間待つ必要があることがあります。

データを誤って削除した状態のテナントをシミュレートする

これらの回復シナリオの実践のために、まずいずれかのテナント データベースでイベントを "誤って" 削除します。

Events アプリを開いて現在のイベントを確認する

  1. Events Hub (http://events.wtp.<user>.trafficmanager.net) を開き、[Contoso Concert Hall] を選択します。

    サンプル アプリケーションのイベント ハブ ページのスクリーンショット。Contoso Concert Hall のエントリが赤い枠で示されています。

  2. イベントの一覧をスクロールして、一覧の最後のイベントをメモします。

    サンプル アプリケーションのスクリーンショット。最後のイベントが表示されています。

"誤って" 最後のイベントを削除する

  1. PowerShell ISE で ...\Learning Modules\Business Continuity and Disaster Recovery\RestoreTenant\Demo-RestoreTenant.ps1 を開き、次の値を設定します。

    • $DemoScenario = 1((チケットの販売がない) 最後のイベントを削除します)
  2. F5 キーを押してスクリプトを実行し、最後のイベントを削除します。 次の確認メッセージが表示されます。

    Deleting last unsold event from Contoso Concert Hall ...
    Deleted event 'Seriously Strauss' from Contoso Concert Hall venue.
    
  3. Contoso のイベント ページが開きます。 下へスクロールし、そのイベントがなくなったことを確認します。 まだイベントが一覧に残っている場合は、 [最新の情報に更新] をクリックして、イベントがなくなったことを確認します。 サンプル アプリケーションのスクリーンショット。最後のイベントが削除されています。

運用データベースと並行してテナント データベースを復元する

ここでは、Contoso Concert Hall データベースをイベントが削除される前の時点に復元します。 このシナリオでは、並列データベースで削除されたデータを確認することのみが目的であると仮定しています。

Restore-TenantInParallel.ps1 スクリプトは、並列カタログ エントリを持つ ContosoConcertHall_old という名前の並列テナント データベースを作成します。 この復元パターンは、小規模なデータ損失から回復するシナリオに最適です。 また、このパターンはコンプライアンスや監査の目的でデータをレビューする必要がある場合にも使用できます。 アクティブ geo レプリケーションを使用するときに推奨されるアプローチです。

  1. データを誤って削除した状態のテナントをシミュレートする」の手順を完了します。
  2. PowerShell ISE で ...\Learning Modules\Business Continuity and Disaster Recovery\RestoreTenant\Demo-RestoreTenant.ps1 を開きます。
  3. $DemoScenario = 2 と設定します (並列でテナントを復元します)
  4. F5 キーを押してスクリプトを実行します。

このスクリプトは、イベントが削除される前の特定の時点にテナント データベースを復元します。 データベースは、ContosoConcertHall_old という名前の新しいデータベースに復元されます。 この復元されたデータベースに存在するカタログ メタデータが削除されて、データベースは、ContosoConcertHall_old という名前から構築されたキーを使ってカタログに追加されます。

デモ スクリプトは、ブラウザーでこの新しいテナント データベースのイベント ページを開きます。 URL に関するメモ: http://events.wingtip-dpt.<user>.trafficmanager.net/contosoconcerthall_old。このページは、復元されたデータベースからのデータを示しており、 _old が名前に追加されています。

ブラウザーに表示されるイベントをスクロールして、前述のセクションで削除したイベントが復元されていることを確認します。

独自のイベント アプリを使用して、復元されたテナントを追加のテナントとして公開することは、復元されたデータに対してテナント アクセスを提供する方法とは異なります。 復元パターンを示すのに役立ちます。 一般的に、古いデータへの読み取りアクセス許可を付与し、復元されたデータベースを定義した期間保持します。 サンプルでは、復元されたテナントの削除 のシナリオの実行を完了した後に、復元されたテナント エントリを削除できます。

  1. $DemoScenario = 4 を設定します (復元されたテナントを削除します)
  2. F5 キーを押してスクリプトを実行します。
  3. これで、ContosoConcertHall_old エントリがカタログから削除されました。 ブラウザーでこのテナントのイベント ページを閉じます。

テナントを所定の時点に復元し、既存のテナント データベースを置き換える

ここでは、Contoso Concert Hall テナントをイベントが削除される前の時点に復元します。 Restore-TenantInPlace スクリプトは、テナント データベースを新しいデータベースに復元して、元のデータベースを削除します。 この復元パターンは、重大なデータ破損からの回復に最適であり、テナントは大規模なデータ損失に対応する必要がある場合があります。

  1. PowerShell ISE で Demo-RestoreTenant.ps1 ファイルを開きます。
  2. $DemoScenario = 5 を設定します (テナントを所定の場所に復元します)
  3. F5 キーを押してスクリプトを実行します。

このスクリプトは、イベントが削除される前の時点にテナント データベースを復元します。 それ以上更新されないように、最初に Contoso Concert Hall テナントをオフラインにします。 その後、復元ポイントから復元することによって、並列データベースが作成されます。 データベース名が既存のテナント データベース名と競合しないように、タイムスタンプを使用して、復元されたデータベースの名前が指定されます。 続いて、古いテナント データベースが削除され、復元されたデータベースの名前が元のデータベース名に変更されます。 最後に、Contoso Concert Hall がオンラインに戻り、復元されたデータベースへのアプリからのアクセスが許可されます。

これで、イベントが削除される前の時点にデータベースが正常に復元されました。 イベント ページを開き、最後のイベントが復元されたことを確認してください。

データベースを復元した後は、再度復元するために最初の完全バックアップが利用可能になるまでに、10 ~ 15 分かかります。

注意

マルチテナント データベースからシングル テナントに復元することはできません。

次のステップ

このチュートリアルでは、以下の内容を学習しました。

  • データベースを並列データベース (サイド バイ サイド) に復元する。
  • データベースを特定の場所に復元する。

その他のリソース