Azure CLI を使用して Azure VM 内の SQL データベースを管理する

Azure CLI は、コマンドラインやスクリプトで Azure リソースを作成および管理するために使用します。 この記事では、Azure CLI を使用して Azure VM 上のバックアップされた SQL データベースを管理する方法について説明します。 これらのアクションは 、Azure portal を使用して実行することもできます。

注

CLI を使用した Azure の SQL データベースのバックアップを使って SQL データベースをバックアップした場合は、次のリソースを使っています。

  • SQLResourceGroup という名前のリソース グループ
  • SQLVault という名前のコンテナー
  • 名前が VMAppContainer;Compute;SQLResourceGroup;testSQLVM である保護されたコンテナー
  • バックアップされたデータベース/項目sqldatabase;mssqlserver;master
  • westus2 リージョンのリソース

Azure CLI を使用すると、Azure Backup を使用してバックアップされた Azure VM で実行されている SQL データベースを管理するプロセスが容易になります。 次のセクションでは、各管理操作について説明します。

現在サポートされているバックアップと復元のシナリオを確認するには、サポート マトリックスを参照してください。 よく寄せられる質問については、 よく寄せられる質問を参照してください。

バックアップジョブと復元ジョブを監視する

az backup job list コマンドを使用して、完了したジョブまたは現在実行中のジョブ (バックアップまたは復元) を監視します。 CLI では、 現在実行中のジョブを中断 したり、 ジョブが完了するまで待機したりすることもできます。

az backup job list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --output table

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

Name                                  Operation              Status      Item Name       			Start Time UTC
------------------------------------  ---------------        ---------   ----------      			-------------------  
e0f15dae-7cac-4475-a833-f52c50e5b6c3  ConfigureBackup        Completed   master [testSQLVM]         2019-12-03T03:09:210831+00:00  
ccdb4dce-8b15-47c5-8c46-b0985352238f  Backup (Full)          Completed   master [testSQLVM]   		2019-12-01T10:30:58.867489+00:00
4980af91-1090-49a6-ab96-13bc905a5282  Backup (Differential)  Completed   master [testSQLVM]			2019-12-01T10:36:00.563909+00:00
F7c68818-039f-4a0f-8d73-e0747e68a813  Restore (Log)          Completed   master [testSQLVM]			2019-12-03T05:44:51.081607+00:00

ポリシーを変更する

SQL バックアップ構成の基になるポリシーを変更するには、 az backup policy set コマンドを使用します。 このコマンドの name パラメーターは、ポリシーを変更するバックアップ項目を参照します。 ここでは、SQL データベース sqldatabase;mssqlserver;master のポリシーを新しいポリシー newSQLPolicy に置き換えます。 az backup policy create コマンドを使用して、新しいポリシーを作成できます。

az backup item set-policy --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name newSQLPolicy \
    --name sqldatabase;mssqlserver;master 

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

Name                                  Operation        Status     Item Name    Backup Management Type    Start Time UTC                    Duration
------------------------------------  ---------------  ---------  -----------  ------------------------  --------------------------------  --------------
ba350996-99ea-46b1-aae2-e2096c1e28cd  ConfigureBackup  Completed  master       AzureWorkload             2022-06-22T08:24:03.958001+00:00  0:01:12.435765

差分バックアップ ポリシーを作成する

差分バックアップ ポリシーを作成するには、 az backup policy create コマンドと次のパラメーターを使用します。

  • --backup-management-type: Azure Workload。
  • --workload-type: SQL DataBase。
  • --name: ポリシーの名前。
  • --policy: スケジュールと保持に関する適切な詳細を含む JSON ファイル。
  • --resource-group: ボールトのリソース グループ。
  • --vault-name: コンテナーの名前/

例:

az backup policy create --resource-group SQLResourceGroup --vault-name SQLVault --name SQLPolicy --backup-management-type AzureWorkload --policy SQLPolicy.json --workload-type SQLDataBase

サンプルJSON(SQLPolicy.json):

  {"eTag": null,
  "id": "/Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupPolicies/SQLPolicy",
  "location": null,
  "name": "sqlpolicy",
  "properties": {
    "backupManagementType": "AzureWorkload",
    "workLoadType": "SQLDataBase",
    "settings": {
      "timeZone": "UTC",
      "issqlcompression": false,
      "isCompression": false
    },
    "subProtectionPolicy": [
      {
        "policyType": "Full",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Sunday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T19:30:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "LongTermRetentionPolicy",
          "weeklySchedule": {
            "daysOfTheWeek": [
              "Sunday"
            ],
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 104,
              "durationType": "Weeks"
            }
          },
          "monthlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 60,
              "durationType": "Months"
            }
          },
          "yearlySchedule": {
            "retentionScheduleFormatType": "Weekly",
            "monthsOfYear": [
              "January"
            ],
            "retentionScheduleWeekly": {
              "daysOfTheWeek": [
                "Sunday"
              ],
              "weeksOfTheMonth": [
                "First"
              ]
            },
            "retentionTimes": [
              "2022-06-13T19:30:00Z"
            ],
            "retentionDuration": {
              "count": 10,
              "durationType": "Years"
            }
          }
        }
      },
      {
        "policyType": "Differential",
        "schedulePolicy": {
          "schedulePolicyType": "SimpleSchedulePolicy",
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
          ],
          "scheduleRunTimes": [
            "2022-06-13T02:00:00Z"
          ],
          "scheduleWeeklyFrequency": 0
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 30,
            "durationType": "Days"
          }
        }
      },
      {
        "policyType": "Log",
        "schedulePolicy": {
          "schedulePolicyType": "LogSchedulePolicy",
          "scheduleFrequencyInMins": 120
        },
        "retentionPolicy": {
          "retentionPolicyType": "SimpleRetentionPolicy",
          "retentionDuration": {
            "count": 15,
            "durationType": "Days"
          }
        }
      }
    ],
    "protectedItemsCount": 0
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupPolicies"
} 

ポリシーが正常に作成されると、コマンドの出力には、コマンドの実行中にパラメーターとして渡したポリシー JSON が表示されます。

ポリシーの次のセクションを変更して、差分バックアップに必要なバックアップの頻度と保持期間を指定できます。

例えば次が挙げられます。

{
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 30,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

例:

土曜日にのみ差分バックアップを作成し、60 日間保持する場合は、ポリシーで次の変更を行います。

  • retentionDuration カウントを 60 日に更新します。
  • ScheduleRunDays として土曜日のみを指定します。
 {
  "policyType": "Differential",
  "retentionPolicy": {
    "retentionDuration": {
      "count": 60,
      "durationType": "Days"
    },
    "retentionPolicyType": "SimpleRetentionPolicy"
  },
  "schedulePolicy": {
    "schedulePolicyType": "SimpleSchedulePolicy",
    "scheduleRunDays": [
      "Saturday"
    ],
    "scheduleRunFrequency": "Weekly",
    "scheduleRunTimes": [
      "2017-03-07T02:00:00+00:00"
    ],
    "scheduleWeeklyFrequency": 0
  }
}

SQL インスタンスに追加された新しいデータベースを保護する

SQL インスタンスを Recovery Services コンテナーに登録すると、 このインスタンス内のすべてのデータベースが自動的に検出されます。

ただし、後で SQL インスタンスに新しいデータベースを追加した場合は、 az backup protectable-item initialize コマンドを使用します。 このコマンドは、追加された新しいデータベースを検出します。

az backup protectable-item initialize --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --workload-type SQLDataBase

次に、 az backup protectable-item list cmdletを使って、SQLインスタンスで発見されたすべてのデータベースをリストアップします。 それらの保護状態を確認またはフィルタリングしてください。 バックアップしたいデータベースを見つけたら、「 SQL データベースのバックアップを有効にする」を参照してください。

az backup protectable-item list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --workload-type SQLDataBase \
	--protectable-item-type SQLDataBase \
    --output table

バックアップする新しいデータベースがこの一覧に表示され、次のように表示されます。

Name                            Protectable Item Type    ParentName    ServerName    IsProtected
---------------------------     ----------------------   ------------  -----------   ------------
sqldatabase;mssqlserver;db1     SQLDataBase              mssqlserver   testSQLVM	 NotProtected  
sqldatabase;mssqlserver;db2     SQLDataBase              mssqlserver   testSQLVM	 NotProtected

SQL データベースの保護を停止する

SQL データベースの保護は、次のプロセスで停止できます。

  • 今後のバックアップ ジョブすべてを停止し、すべての復旧ポイントを削除する。
  • 今後のすべてのバックアップ ジョブを停止し、復旧ポイントはそのままにする。

復旧ポイントのままにする場合は、次の詳細に注意してください。

  • データを保持して保護を停止すると、すべての復旧ポイントがそのまま残り、すべての排除が停止します。
  • 保護されたインスタンスと使用されたストレージに対して課金されます。
  • バックアップを停止しないでデータ ソースを削除すると、新しいバックアップは失敗します。

保護を停止するプロセスの詳細を以下に示します。

データを保持して保護モードを終了

データを保持して保護を停止するには、 az backup protection disable' コマンドを使用します。

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --output table

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

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

この操作の状態を確認するには、 az backup job show コマンドを使用します。

データを保持せずに保護を停止する

データを保持せずに保護を停止するには、 az backup protection disable コマンドを使用します。

az backup protection disable --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --item-name "sqldatabase;mssqlserver;master" \
    --workload-type SQLDataBase \
    --delete-backup-data true \
    --output table

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

Name                                  ResourceGroup
------------------------------------  ---------------  
g0f15dae-7cac-4475-d833-f52c50e5b6c3  SQLResourceGroup

この操作の状態を確認するには、 az backup job show コマンドを使用します。

保護の再開

データの保持を使用して SQL データベースの保護を停止すると、後で保護を再開できます。 バックアップされたデータを保持しない場合、保護を再開することはできません。

保護を再開するには、 az backup protection resume コマンドを使用します。

az backup protection resume --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name "VMAppContainer;Compute;SQLResourceGroup;testSQLVM" \
    --policy-name SQLPolicy \
    --item-name "<native-database-item-name>" \
    --output table

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

Name                                  ResourceGroup
------------------------------------  ---------------  
b2a7f108-1020-4529-870f-6c4c43e2bb9e  SQLResourceGroup

この操作の状態を確認するには、 az backup job show コマンドを使用します。

SQLインスタンスのスナップショットバックアップを管理する

以下のスナップショットコマンドはBashではなく PowerShellシェル構文を使用しています。 プレースホルダーを置き換え、この記事で示したスナップショットオプションをサポートするAzure CLIバージョンを使いましょう。 意図された操作だけを実行してください。 retain-data例とdelete-data例は代替となる例です。

ボールトと保護されたインスタンスを選択します

Vaultのサブスクリプションおよびリソース グループを共通の引数に使用してください:

$vaultSubscription = "<vault-subscription-id>"
$vaultRg = "<vault-rg>"
$vaultName = "<vault-name>"
$vaultArgs = @("--subscription", $vaultSubscription, "--resource-group", $vaultRg, "--vault-name", $vaultName)

az backup vault show --subscription $vaultSubscription --resource-group $vaultRg --name $vaultName
az backup container list @vaultArgs --backup-management-type AzureWorkload `
  --query "[].{Name:name,VM:properties.friendlyName}" --output table
$containerName = "<native-source-container-name>"
$sourceArgs = $vaultArgs + @("--container-name", $containerName, "--backup-management-type", "AzureWorkload")

出力から正確なコンテナ名をコピーしてください。 ヴォールト内のすべてのスナップショット保護インスタンスをリストアップし、そのリストを選択したコンテナにスコープします:

az backup item list @vaultArgs --backup-management-type AzureWorkload `
  --workload-type SQLInstance --output json
az backup item list @sourceArgs --workload-type SQLInstance --output json
$instanceItemName = "<native-protected-instance-item-name>"
az backup item show @sourceArgs --workload-type SQLInstance `
  --name $instanceItemName --output json
$instanceArgs = $sourceArgs + @("--item-name", $instanceItemName, "--workload-type", "SQLInstance")

コンテナ名やアイテム名を作成するのではなく、サービスが返すネイティブネームを使用してください。 ポリシー作成およびデータベース選択については、「SQL インスタンスのスナップショット バックアップを構成する」を参照してください。

スナップショット操作の監視

バックアップ、復元、または保護操作が返すジョブ名を使ってその状況を確認してください。

az backup job show @vaultArgs --name "<job-name>" --output json

保護を停止してデータを保持する

バックアップを停止する前に、選択した項目が意図されたインスタンスであることを必ず確認してください:

az backup protection disable @instanceArgs --delete-backup-data false

この操作はバックアップを停止しつつ、既存のバックアップデータを保持します。 進む前に確認プロンプトを確認してください。

保護を停止してデータを削除する

Warnung

以下はバックアップデータを保持せず破棄する方法です。 削除を要求する前に、選択したインスタンスとそのデータベースを必ず確認してください。 ボールトの不可変性やソフト削除設定は削除の動作に影響を与えることがあります。

az backup protection disable @instanceArgs --delete-backup-data true

VMコンテナの登録解除

保護されたアイテムがすべて保護されなくなり、バックアップデータが残っていない場合にのみコンテナの登録解除を行います。 この操作は単一のインスタンスやデータベースだけでなく、VMアプリケーションコンテナ全体に適用されます。

az backup container unregister @vaultArgs --container-name $containerName `
  --backup-management-type AzureWorkload

スナップショットのリカバリーポイントクエリや復元設定については、SQL インスタンスのスナップショットを復元を参照してください。

次のステップ