PowerShell を使用して Azure VM で SQL データベースをバックアップおよび復元する

この記事では、Azure Backup Recovery Services コンテナーを使用して Azure VM 内の SQL DB をバックアップおよび復元するために Azure PowerShell を使用する方法を説明します。

この記事では、以下の方法について説明します。

  • PowerShell を設定し、Azure Recovery Services プロバイダーを登録します。
  • Recovery Services コンテナーを作成する。
  • Azure VM 内の SQL DB のバックアップを構成します。
  • バックアップ ジョブを実行します。
  • バックアップした SQL DB を復元します。
  • バックアップ ジョブと復元ジョブを監視します。

開始する前に

Recovery Services オブジェクトの階層

オブジェクト階層の概要を次の図に示します。

Recovery Services オブジェクトの階層

Azure ライブラリの Az.RecoveryServices コマンドレット リファレンスのリファレンスを確認します。

設定とインストール

PowerShell を次のように設定します。

  1. 最新バージョンの Az PowerShell をダウンロードします。 必要な最小バージョンは 1.5.0 です。

  2. 次のコマンドを使用して、Azure Backup PowerShell コマンドレットを検索します。

    Get-Command *azrecoveryservices*
    
  3. Azure Backup および Recovery Services コンテナーのエイリアスとコマンドレットを確認します。 表示例を次に示します。 これはコマンドレットの完全な一覧ではありません。

    Recovery Services コマンドレットの一覧

  4. Connect-AzAccount を使用して Azure アカウントにサインインします。

  5. 表示される Web ページで、アカウントの資格情報を入力するように求められます。

    • または、 -Credential を使用して、Connect-AzAccount コマンドレットのパラメーターとしてアカウントの資格情報を含めることもできます。
    • CSP パートナーがテナントのために活動している場合は、そのテナントの tenantID またはテナントのプライマリ ドメイン名をして、その顧客をテナントとして指定します。 たとえば、「Connect-AzAccount -Tenant fabrikam.com」を指定します。
  6. 1 つのアカウントが複数のサブスクリプションを持つことができるため、使用するサブスクリプションをアカウントに関連付けます。

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. Azure Backup を初めて使用する場合、Register-AzResourceProvider コマンドレットを使って Azure Recovery Services プロバイダーをサブスクリプションに登録します。

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. プロバイダーが正常に登録されたことを確認します。

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. コマンド出力で、RegistrationStateRegistered に変わっていることを確認します。 変わっていない場合は、Register-AzResourceProvider コマンドレットをもう一度実行します。

Recovery Services コンテナーを作成する

Recovery Services コンテナーを作成するには、次の手順に従います。

Recovery Services コンテナーは Resource Manager のリソースであるため、リソース グループ内に配置する必要があります。 既存のリソース グループを使用することも、New-AzResourceGroup コマンドレットを使ってリソース グループを作成することもできます。 リソース グループを作成するときは、リソース グループの名前と場所を指定します。

  1. コンテナーはリソース グループに配置されます。 既存のリソース グループがない場合は、New-AzResourceGroup を使用して新しいリソース グループを作成します。 この例では、新しいリソース グループを米国西部リージョンに作成します。

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. New-AzRecoveryServicesVault コマンドレットを使用して、コンテナーを作成します。 リソース グループに使用したのと同じコンテナーの場所を指定します。

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. コンテナー ストレージに使用する冗長性の種類を指定します。

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperties  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

サブスクリプション内のコンテナーの表示

サブスクリプション内のコンテナーをすべて表示するには、Get-AzRecoveryServicesVault を使用します。

Get-AzRecoveryServicesVault

次のように出力されます。 関連するリソース グループと場所が示されています。

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

コンテナーのコンテキストを設定する

このコンテナー オブジェクトを変数に格納し、そのコンテナーのコンテキストを設定します。

  • Azure Backup コマンドレットの多くは、入力として Recovery Services コンテナー オブジェクトを必要とするので、コンテナー オブジェクトを変数に格納すると便利です。
  • コンテナーのコンテキストとは、コンテナーで保護されるデータの種類です。 これを、Set-AzRecoveryServicesVaultContext を使用して設定します。 コンテキストが設定されると、それが後続のすべてのコマンドレットに適用されます。

次の例では、testvault のコンテナーのコンテキストを設定します。

Get-AzRecoveryServicesVault -Name "testvault" | Set-AzRecoveryServicesVaultContext

コンテナー ID をフェッチする

コンテナーのコンテキストの設定は、Azure PowerShell のガイドラインに従って廃止される予定です。 代わりに、次のようにしてコンテナー ID を格納またはフェッチしたり、関連するコマンドに渡したりできます。

$testVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$testVault.ID

バックアップ ポリシーを構成する

バックアップ ポリシーは、バックアップのスケジュール、およびバックアップの復旧ポイントを保持する期間を指定します。

  • バックアップ ポリシーは、少なくとも 1 つのアイテム保持ポリシーと関連付けられています。 アイテム保持ポリシーでは、復旧ポイントが削除される前に保持される期間が定義されています。
  • Get-AzRecoveryServicesBackupRetentionPolicyObject を使用して、既定のバックアップ ポリシー リテンション期間を表示します。
  • Get-AzRecoveryServicesBackupSchedulePolicyObject を使用して、既定のバックアップ ポリシー スケジュールを表示します。
  • 新しいバックアップ ポリシーを作成するには、New-AzRecoveryServicesBackupProtectionPolicy コマンドレットを使用します。 スケジュール ポリシー オブジェクトとアイテム保持ポリシー オブジェクトを入力します。

既定では、開始時刻はスケジュール ポリシー オブジェクトで定義されます。 開始時刻を希望の時刻に変更するには、次の例を使用します。 希望の開始時刻も、UTC で指定する必要があります。 次の例では、毎日のバックアップの希望の開始時刻が午前 01:00 UTC であるものとします。

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$UtcTime = (Get-Date -Date "2019-03-20 01:30:00Z").ToUniversalTime()
$schPol.FullBackupSchedulePolicy.ScheduleRunTimes[0] = $UtcTime

重要

開始時刻は 30 分単位のみで指定する必要があります。 上の例では、"01:00:00" または "02:30:00" のみを指定できます。 開始時刻を "01:15:00" にすることはできません。

次の例では、スケジュール ポリシーとアイテム保持ポリシーを変数に格納します。 その後に、それらの変数を新しいポリシー (NewSQLPolicy) のパラメーターとして使用しています。 NewSQLPolicy では、毎日 "完全" バックアップを作成して 180 日間保存し、2 時間ごとにログ バックアップを作成します。

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "MSSQL"
$NewSQLPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "NewSQLPolicy" -WorkloadType "MSSQL" -RetentionPolicy $retPol -SchedulePolicy $schPol

次のように出力されます。

Name                 WorkloadType       BackupManagementType BackupTime                Frequency                                IsDifferentialBackup IsLogBackupEnabled
                                                                                                                                Enabled
----                 ------------       -------------------- ----------                ---------                                -------------------- ------------------
NewSQLPolicy         MSSQL              AzureWorkload        3/15/2019 01:30:00 AM      Daily                                    False                True

バックアップの有効化

SQL VM を登録する

Azure VM バックアップおよび Azure File 共有では、バックアップ サービスはそれらの Azure Resource Manager リソースに接続して、関連する詳細をフェッチすることができます。 SQL は Azure VM 内のアプリケーションであるため、バックアップ サービスがアプリケーションにアクセスして必要な詳細をフェッチするにはアクセス許可が必要です。 そのためには、SQL アプリケーションを含む Azure VM を Recovery Services コンテナーに "登録" する必要があります。 SQL VM をコンテナーに登録すると、そのコンテナーでのみ SQL DB を保護できます。 Register-AzRecoveryServicesBackupContainer PowerShell コマンドレットを使用して VM を登録します。

 $myVM = Get-AzVM -ResourceGroupName <VMRG Name> -Name <VMName>
Register-AzRecoveryServicesBackupContainer -ResourceId $myVM.ID -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID -Force

このコマンドレットによって、このリソースのバックアップ コンテナーが返され、状態は登録済みになります。

Note

force パラメーターを指定しないと、"Do you want to disable protection for this container" というテキストによって確認を求められます。 このテキストを無視し、確認のために "Y" を入力します。 これは既知の問題です。このテキストおよび force パラメーターの要件はいずれ削除される予定です。

SQL DB をフェッチする

登録が完了すると、バックアップ サービスが VM 内の使用可能なすべての SQL コンポーネントを一覧表示できるようになります。 このコンテナーにこれからバックアップできるすべての SQL コンテナーを表示するには、Get-AzRecoveryServicesBackupProtectableItem PowerShell コマンドレットを使用します。

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID

出力には、このコンテナーに登録されたすべての SQL VM 内の、保護されていないすべての SQL コンポーネントの項目の種類とサーバー名が表示されます。 -Container パラメーターを渡して特定の SQL VM に絞り込むか、Name と ServerName の組み合わせを ItemType フラグと一緒に使用して一意の SQL 項目に到達できます。

$SQLDB = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID -Name "<Item Name>" -ServerName "<Server Name>"

バックアップを構成する

必要な SQL DB とバックアップのために必要なポリシーが用意できたところで、Enable-AzRecoveryServicesBackupProtection コマンドレットを使用して、この SQL DB のバックアップを構成できます。

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

このコマンドは、バックアップの構成が完了するまで待機してから、次の出力を返します。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 6:00:21 PM      3/18/2019 6:01:35 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

新しい SQL DB をフェッチする

マシンを登録すると、バックアップ サービスはその時点で入手できる DB の詳細をフェッチします。 SQL DB または SQL インスタンスを登録済みマシンに後から追加した場合は、バックアップ サービスを手動でトリガーして新たな照会を実行し、保護されていないすべての DB (新たに追加されたものを含む) を再度取得する必要があります。 Initialize-AzRecoveryServicesBackupItem PowerShell コマンドレットを SQL VM 上で使用して、新しい照会を実行します。 このコマンドが操作が完了するまで待機します。 その後、Get-AzRecoveryServicesBackupProtectableItem PowerShell コマンドレットを使用して、保護されていない SQL コンポーネントの最新リストを取得します。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Initialize-AzRecoveryServicesBackupProtectableItem -Container $SQLContainer -WorkloadType MSSQL -VaultId $testVault.ID
Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID

関連する保護対象の項目がフェッチされたら、前のセクションで説明したようにバックアップを有効にします。 新しい DB を手動で検出したくない場合は、下記の説明に従って自動保護を選択できます。

自動保護を有効にする

特定のポリシーを使用して、将来追加されるすべての DB を自動的に保護するようにバックアップを構成できます。 自動保護を有効にするには、Enable-AzRecoveryServicesBackupAutoProtection PowerShell コマンドレットを使用します。

この命令では将来のすべての DB がバックアップされるため、処理は SQLInstance レベルで行われます。

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -Policy $NewSQLPolicy -VaultId $testVault.ID

自動保護を行うように指定すると、新たに追加された DB をフェッチするためのマシンの照会が、スケジュールに従って 8 時間ごとにバックグラウンド タスクとして実行されます。

SQL DB を復元する

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

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

SQL DB を復元する前に、ここに示されている前提条件を確認してください。

警告

RBAC に関連したセキュリティの問題のために、PowerShell を経由した SQL DB の復元コマンドに破壊的変更を導入する必要がありました。 PowerShell 経由で適切な復元コマンドを発行するには、Az 6.0.0 バージョン以降にアップグレードしてください。 最新の PS コマンドを次に示します。

最初に、Get-AzRecoveryServicesBackupItem PowerShell コマンドレットを使用して、該当するバックアップ済みの SQL DB をフェッチします。

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID

関連する復元時間をフェッチする

前述したように、バックアップ対象の SQL DB を完全または差分コピーに復元するか、またはログの特定の時点に復元できます。

個別の復旧ポイントをフェッチする

Get-AzRecoveryServicesBackupRecoveryPoint を使用して、バックアップ対象 SQL DB の個別の (完全/差分) 復旧ポイントをフェッチします。

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate

出力は次の例のようになります。

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

RecoveryPointId フィルターまたは配列フィルターを使用して、関連する復旧ポイントをフェッチします。

$FullRP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -RecoveryPointId "6660368097802"

特定の時点の復旧ポイントをフェッチする

特定の時点に DB を復元したい場合は、Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell コマンドレットを使用します。 このコマンドレットでは、SQL バックアップ項目の途切れずに続いているログ チェーンの開始時刻と終了時刻を表す日付の一覧が返されます。 必要な時点はこの範囲内にあります。

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $bkpItem -VaultId $testVault.ID

出力は次の例のようになります。

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

上記の出力は、表示されている開始時刻と終了時刻の間の任意の時点に復元できることを意味します。 時刻は UTC 形式です。 上記の範囲内の任意の時点を PowerShell で設定します。

Note

復元のためにログの特定の時点を選択した場合は、開始地点 (つまり DB の復元に使用する完全バックアップ) を指定する必要はありません。 Azure Backup サービスによって、どの完全バックアップを選択するか、どのログ バックアップを適用するかなど、復旧プラン全体が処理されます。

復旧構成を決定する

SQL DB の復元では、次の復元シナリオがサポートされます。

  • バックアップ対象の SQL DB を別の復旧ポイントのデータでオーバーライドする - OriginalWorkloadRestore
  • 同じ SQL インスタンス内の新規 DB として SQL DB を復旧する - AlternateWorkloadRestore
  • 別の SQL VM 内の別の SQL インスタンスの新規 DB として SQL DB を復旧する - AlternateWorkloadRestore
  • .bak ファイルとして SQL DB を復元する -RestoreAsFiles

関連する復旧ポイント (個別の復旧ポイントまたは特定の時点) をフェッチしたら、Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell コマンドレットを使用し、必要な復旧プランに従って復旧構成オブジェクトをフェッチします。

元のワークロードの復元

バックアップ対象の DB を復旧ポイントのデータでオーバーライドするには、次の例のように適切なフラグと該当する復旧ポイントを指定するだけです。

個別の復旧ポイントを使用した元への復元
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
ログの特定の時点を使用した元への復元
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

代替のワークロードの復元

重要

バックアップ対象の SQL DB を新しい DB として別の SQLInstance に復元できるのは、このコンテナーに登録されている Azure VM のみです。

前述のように、復元先の SQLInstance が別の Azure VM にある場合は、このコンテナーに登録されており、該当の SQLInstance が保護可能項目として表示されることを確認します。 このドキュメントでは、ターゲットの SQLInstance の名前が別の VM "Contoso2" 内で MSSQLSERVER であると仮定しましょう。

$TargetContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $testVault.ID -FriendlyName "Contoso2"
$TargetInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -Name "MSSQLSERVER" -ServerName "Contoso2" -VaultId $testVault.ID

次に、関連する復旧ポイント、下に示す適切なフラグが付いたターゲットの SQL インスタンス、ターゲットの SQL インスタンスが存在するターゲット コンテナーを渡します。

個別の復旧ポイントを使用した代替への復元
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
ログの特定の時点を使用した代替への復元
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
ファイルとして復元

バックアップ データをデータベースではなく .bak ファイルとして復元するには、 [ファイルとして復元] オプションを選択します。 バックアップされた SQL DB は、このコンテナーに登録されている、任意のターゲット VM に復元できます。

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
個別の復旧ポイントを使用した、ファイルとしての復元
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
最新の完全なログに含まれるログの特定の時点を使用した、ファイルとしての復元
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
指定した完全なログに含まれるログの特定の時点を使用した、ファイルとしての復元

復元に使用する必要がある特定の完全なログを指定する場合は、次のコマンドを使用します。

$FileRestoreWithLogAndSpecificFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -FromFull $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID

Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell コマンドレットから取得した最終復旧ポイントの構成オブジェクトには、次に示すように復元に関連するすべての情報が含まれます。

TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : No
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

復元される DB 名、OverwriteWLIfpresent、NoRecoveryMode、targetPhysicalPath の各フィールドを編集できます。 次に示すようにターゲット ファイル パスの詳細を取得します。

$AnotherInstanceWithFullConfig.targetPhysicalPath
MappingType SourceLogicalName SourcePath                  TargetPath
----------- ----------------- ----------                  ----------
Data        azurebackup1      F:\Data\azurebackup1.mdf    F:\Data\azurebackup1_1553001753.mdf
Log         azurebackup1_log  F:\Log\azurebackup1_log.ldf F:\Log\azurebackup1_log_1553001753.ldf

次に示すように、文字列値として関連する PowerShell プロパティを設定します。

$AnotherInstanceWithFullConfig.OverwriteWLIfpresent = "Yes"
$AnotherInstanceWithFullConfig | fl
TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : Yes
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

重要

復元操作は最終復旧構成オブジェクトに基づいて行われるため、この構成オブジェクトに必要な値と適切な値がすべて含まれるようにしてください。

Note

チェーン全体を復元せず、ファイルのサブセットのみを復元する場合は、こちらに記載されている手順に従ってください。

セカンダリ リージョン内のコンテナーへの代替のワークロードの復元

重要

PowerShell からの SQL のセカンダリ リージョン復元のサポートは Az 6.0.0 から使用できます。

リージョンをまたがる復元を有効にしている場合、復旧ポイントは、セカンダリ ペア リージョンにもレプリケートされます。 その後、これらの復旧ポイントをフェッチし、そのペア リージョンに存在するマシンへの復元をトリガーできます。 通常の復元と同様に、ターゲット マシンをセカンダリ リージョン内のターゲット コンテナーに登録する必要があります。 次の一連の手順によって、エンド ツー エンドのプロセスが明確になります。

  • セカンダリ リージョンにレプリケートされたバックアップ項目をフェッチします。
  • このような項目の場合は、セカンダリ リージョンにレプリケートされた復旧ポイント (個別またはログ) をフェッチします。
  • 次に、セカンダリ ペア リージョン内のコンテナーに登録されたターゲット サーバーを選択します。
  • そのサーバーへの復元をトリガーし、JobId を使用してそれを追跡します。

セカンダリ リージョンからバックアップ項目をフェッチする

通常のコマンドを使用して、セカンダリ リージョンからすべての SQL バックアップ項目をフェッチします。ただし、これらの項目はセカンダリ リージョンからフェッチする必要があることを示す追加のパラメーターを使用します。

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
セカンダリ リージョンから個別の復旧ポイントをフェッチする

バックアップされた SQL DB の個別の (完全または差分) 復旧ポイントをフェッチする Get-AzRecoveryServicesBackupRecoveryPoint を使用し、これらがセカンダリ リージョンからフェッチされた復旧ポイントであることを示すパラメーターを追加します。

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate -UseSecondaryRegion

出力は次の例のようになります。

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

RecoveryPointId フィルターまたは配列フィルターを使用して、関連する復旧ポイントをフェッチします。

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
セカンダリ リージョンからログ復旧ポイントをフェッチする

パラメーター ' -UseSecondaryRegion' を指定して Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell コマンドレットを使用します。このパラメーターは、その SQL バックアップ項目の切れ目のない連続したログ チェーンの開始時刻と終了時刻をセカンダリ リージョンから返します。 必要な時点はこの範囲内にあります。

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $secondaryBkpItems[0] -VaultId $testVault.ID -UseSecondaryRegion

出力は次の例のようになります。

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

上記の出力は、表示されている開始時刻と終了時刻の間の任意の時点に復元できることを意味します。 時刻は UTC 形式です。 上記の範囲内の任意の時点を PowerShell で設定します。

セカンダリ リージョンからターゲット サーバーをフェッチする

セカンダリ リージョンからは、コンテナーと、そのコンテナーに登録されたターゲット サーバーが必要です。 セカンダリ リージョンのターゲット コンテナーと SQL インスタンスを取得できたら、既存のコマンドレットを再利用して復元ワークロード構成を生成できます。 このドキュメントでは、VM 名が "secondaryVM" であり、その VM 内のインスタンス名が "MSSQLInstance" であると仮定しましょう。

まず、セカンダリ リージョンに存在する関連するコンテナーをフェッチしてから、そのコンテナー内の登録されたコンテナーを取得します。

$PairedRegionVault = Get-AzRecoveryServicesVault -ResourceGroupName SecondaryRG -Name PairedVault
$secContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $PairedRegionVault.ID -FriendlyName "secondaryVM"

登録されたコンテナーが選択されたら、データベースの復元先にする必要があるそのコンテナー内の SQL インスタンスをフェッチします。 ここでは、"secondaryVM" 内に 1 つの SQL インスタンスがあると仮定し、そのインスタンスをフェッチします。

$secSQLInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -VaultId $PairedRegionVault.ID -Container $secContainer

復旧構成を準備する

通常の SQL 復元に関して既に記載されているように、同じコマンドを再利用して関連する復旧構成を生成できます。

セカンダリ リージョンからの完全な復元の場合
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
セカンダリ リージョンからのログ ポイントインタイム リストアの場合
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

プライマリ リージョン復元またはセカンダリ リージョン復元のための関連する構成が取得されたら、同じ復元コマンドを使用して復元をトリガーし、後で jobID を使用して追跡できます。

関連する構成を使用して復元する

関連する復旧構成オブジェクトを取得して確認したら、Restore-AzRecoveryServicesBackupItem PowerShell コマンドレットを使用して復元プロセスを開始します。

Restore-AzRecoveryServicesBackupItem -WLRecoveryConfig $AnotherInstanceWithLogConfig -VaultId $testVault.ID -RestoreToSecondaryRegion

復元操作によってジョブが返されて追跡できます。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Restore              InProgress           3/17/2019 10:02:45 AM                                3274xg2b-e4fg-5952-89b4-8cb566gc1748

SQL バックアップを管理する

オンデマンド バックアップ

DB のバックアップをいったん有効にすると、Backup-AzRecoveryServicesBackupItem PowerShell コマンドレットを使用して DB のオンデマンド バックアップをトリガーすることもできます。 次の例では、圧縮を有効にして SQL DB に対するコピーのみの完全バックアップをトリガーします。コピーのみの完全バックアップは 60 日間保持する必要があります。

Note

コピーのみの完全バックアップは、ログなどの他のバックアップの種類に依存しないため、長期保存に最適です。 "完全" バックアップは後続のログ バックアップの親として扱われるため、リテンション期間はポリシーのログ保持に関連付けされます。 そのため、お客様が指定した有効期限は、"完全" バックアップではなく、コピーのみの完全バックアップに適用されます。 完全バックアップのリテンション期間は、現在の時刻から 45 日間自動的に設定されます。 こちらにも記載されています。

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
$endDate = (Get-Date).AddDays(45).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $bkpItem -BackupType CopyOnlyFull -EnableCompression -VaultId $testVault.ID -ExpiryDateTimeUTC $endDate

オンデマンド バックアップ コマンドは、追跡対象のジョブを返します。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Backup               InProgress           3/18/2019 8:41:27 PM                                2516bb1a-d3ef-4841-97a3-9ba455fb0637

出力がなくなった場合、または関連するジョブ ID を取得したい場合は、Azure Backup サービスからジョブの一覧を取得して、そのジョブおよび詳細を追跡します。

バックアップ項目のポリシーを変更する

バックアップ対象項目のポリシーを Policy1Policy2 に変更できます。 バックアップ対象項目のポリシーを切り替えるには、該当するポリシーとバックアップ項目をフェッチして、バックアップ項目をパラメーターに指定して Enable-AzRecoveryServices コマンドを使用します。

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName>
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType MSSQL -BackupManagementType AzureWorkload -Name "<BackupItemName>"
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1

このコマンドは、バックアップの構成が完了するまで待機してから、次の出力を返します。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

既存のバックアップ ポリシーを編集する

既存のポリシーを編集するには、Set-AzRecoveryServicesBackupProtectionPolicy コマンドを使用します。

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -SchedulePolicy $SchPol -RetentionPolicy $RetPol

しばらくしてからバックアップジョブを確認し、障害を追跡します。 存在する場合は、問題を解決する必要があります。 その後、FixForInconsistentItems パラメーターを指定してポリシー編集コマンドを再実行し、操作が以前に失敗したすべてのバックアップ項目のポリシーの編集を再試行します。

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

SQL VM の再登録

警告

再登録を試行する前に、必ずこちらのドキュメントを確認して、エラーの現象と原因を把握してください。

SQL VM の再登録をトリガーするには、関連するバックアップ コンテナーをフェッチして、登録のコマンドレットに渡します。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Register-AzRecoveryServicesBackupContainer -Container $SQLContainer -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

保護の停止

データの保持

保護を停止する場合は、Disable-AzRecoveryServicesBackupProtection PowerShell コマンドレットを使用できます。 これによって、スケジュールされているバックアップは停止されますが、それまでにバックアップされたデータは永続的に保持されます。

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID

バックアップ データの削除

コンテナーに格納されたバックアップ データを完全に削除するには、保護を無効にするコマンドに -RemoveRecoveryPoints フラグ/スイッチを付けるだけです。

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID -RemoveRecoveryPoints

自動保護の無効化

自動保護が SQLInstance で構成されていた場合は、Disable-AzRecoveryServicesBackupAutoProtection PowerShell コマンドレットを使用して無効にすることができます。

次の PowerShell コマンドを使用して、自動保護が有効になっているインスタンスを見つけます。

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID | Where-Object {$_.IsAutoProtected -eq $true}

次に、出力から関連する保護可能な項目名とサーバー名を選択し、それらのインスタンスの自動保護を無効にします。

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Disable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

SQL VM の登録解除

SQL サーバーのすべての DB が保護されなくなり、バックアップ データが存在しなくなったら、その SQL VM をこのコンテナーから登録解除できます。 その後でないと、別のコンテナーで DB を保護することはできません。 Unregister-AzRecoveryServicesBackupContainer PowerShell コマンドレットを使用して SQL VM を登録解除します。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
 Unregister-AzRecoveryServicesBackupContainer -Container $SQLContainer -VaultId $testVault.ID

Azure Backup ジョブを追跡する

Azure Backup ではユーザーがトリガーしたジョブしか SQL バックアップで追跡できないことに注意してください。 スケジュールされたバックアップ (ログ バックアップを含む) はポータルまたは PowerShell には表示されません。 ただし、スケジュールされたジョブが失敗した場合は、バックアップ アラートが生成されてポータルに表示されます。 スケジュールされたすべてのジョブとその他の関連情報を追跡するには、Azure Monitor を使用します。

ユーザーは、バックアップなどの非同期ジョブの出力で返される JobID を使用して、オンデマンド操作やユーザーがトリガーした操作を追跡できます。 Get-AzRecoveryServicesBackupJobDetail PowerShell コマンドレットを使用して、ジョブとその詳細を追跡します。

 Get-AzRecoveryServicesBackupJobDetails -JobId 2516bb1a-d3ef-4841-97a3-9ba455fb0637 -VaultId $testVault.ID

Azure Backup サービスからオンデマンド ジョブとその状態の一覧を取得するには、Get-AzRecoveryServicesBackupJob PowerShell コマンドレットを使用します。 次の例は、進行中のすべての SQL ジョブを返します。

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

進行中のジョブをキャンセルするには、Stop-AzRecoveryServicesBackupJob PowerShell コマンドレットを使用します。

SQL Always On 可用性グループを管理する

SQL Always On 可用性グループでは、必ず可用性グループ (AG) のすべてのノードを登録してください。 すべてのノードの登録が完了すると、SQL 可用性グループ オブジェクトが保護可能項目の下に論理的に作成されます。 SQL AG の下のデータベースは SQLDatabase として表示されます。 ノードはスタンドアロン インスタンスとして表示され、それらの下にある既定の SQL データベース SQL データベースとして一覧表示されます。

たとえば、SQL AG に sql-server-0sql-server-1 という 2 つのノードと、1 つの SQL AG DB があるとします。 これら両方のノードが登録された後で、保護可能な項目を一覧表示すると、次のコンポーネントが表示されます。

  • SQL AG オブジェクト - 保護可能な項目の種類: SQLAvailabilityGroup
  • SQL AG DB - 保護可能な項目の種類: SQLDatabase
  • sql-server-0 - 保護可能な項目の種類: SQLInstance
  • sql-server-1 - 保護可能な項目の種類: SQLInstance
  • sql-server-0 内のすべての既定 SQL DB (master、model、msdb) - 保護可能な項目の種類: SQLDatabase
  • sql-server-1 内のすべての既定 SQL DB (master、model、msdb) - 保護可能な項目の種類: SQLDatabase

sql-server-0 と sql-server-1 は、バックアップ コンテナーが一覧表示されるときは "AzureVMAppContainer" としても一覧表示されます。

該当するデータベースを単にフェッチしてバックアップを有効にしてください。オンデマンド バックアップ復元の PowerShell コマンドレットは同じです。