다음을 통해 공유


Azure CLI를 사용하여 Azure VM에서 SQL 데이터베이스 복원

Azure CLI는 명령줄 또는 스크립트를 통해 Azure 리소스를 만들고 관리하는 데 사용됩니다. 이 문서에서는 Azure CLI를 사용하여 Azure VM에서 백업된 SQL 데이터베이스를 복원하는 방법을 설명합니다. Azure Portal에서 이 작업을 수행해도 됩니다.

Azure Cloud Shell을 사용하여 CLI 명령을 실행합니다.

이 문서에서는 Azure Backup을 사용하여 백업된 Azure VM에서 SQL 데이터베이스를 실행한다고 가정합니다. CLI를 사용하여 Azure에서 SQL 데이터베이스 백업을 사용하여 SQL 데이터베이스를 백업한 경우에는 다음 리소스가 사용됩니다.

  • SQLResourceGroup이라는 리소스 그룹입니다.
  • SQLVault라는 자격 증명 모음입니다.
  • VMAppContainer;Compute;SQLResourceGroup;testSQLVM라는 보호된 컨테이너입니다.
  • sqldatabase;mssqlserver;master라는 데이터베이스/항목을 백업했습니다.
  • westus 지역의 리소스입니다.

참고 항목

지원되는 구성 및 시나리오에 대한 자세한 내용은 SQL 백업 지원 매트릭스를 참조하세요.

백업된 데이터베이스의 복원 지점 보기

데이터베이스의 모든 복구 지점 목록을 보려면 다음과 같이 az backup recoverypoint list 명령을 사용합니다.

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

복구 지점 목록은 다음과 같이 표시됩니다.

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

위 목록에는 각각 전체, 차등 및 로그 백업의 세 가지 복구 지점이 포함됩니다.

참고 항목

az backup recoverypoint show-log-chain 명령을 사용하여 끊어지지 않은 모든 로그 백업 체인의 시작점과 끝점을 볼 수도 있습니다.

데이터베이스 복원에 필요한 필수 구성 요소

데이터베이스 복원을 시작하기 전에 다음과 같은 전제 조건을 충족하는지 확인하세요.

  • 동일한 지역에 있는 SQL 인스턴스에만 데이터베이스를 복원할 수 있습니다.
  • 대상 인스턴스를 원본과 동일한 자격 증명 모음에 등록해야 합니다.

데이터베이스 복원

Azure Backup은 다음과 같이 Azure VM에서 실행되는 SQL 데이터베이스를 복원할 수 있습니다.

  • 로그 백업을 사용하여 특정 날짜 또는 시간(초)으로 복원합니다. Azure Backup은 선택한 시간을 기준으로 복원해야 하는 적절한 전체 차등 백업 및 로그 백업 체인을 자동으로 결정합니다.
  • 특정 복구 지점으로 복원하려면 특정 전체 또는 차등 백업을 복원합니다.

데이터베이스를 복원하려면 az restore restore-azurewl 명령을 사용합니다. 그러려면 입력 중 하나로 복구 구성 개체가 필요합니다. az backup recoveryconfig show 명령을 사용하여 이 개체를 생성할 수 있습니다. 복구 구성 개체는 복원을 수행하기 위한 모든 세부 정보를 포함합니다. 그 중 하나는 복원 모드인 OriginalWorkloadRestore 또는 AlternateWorkloadRestore입니다.

참고 항목

OriginalWorkloadRestore: 원래 원본과 동일한 SQL 인스턴스에 데이터를 복원합니다. 이 옵션은 원래 데이터베이스를 덮어씁니다. AlternateWorkloadRestore: 대체 위치에 데이터베이스를 복원하고 원래 원본 데이터베이스를 유지합니다.

대체 위치에 복원

데이터베이스를 대체 위치에 복원하려면 복원 모드로 AlternateWorkloadRestore를 사용합니다. 그런 다음, 복원 지점을 선택해야 합니다. 복원 지점은 이전 지정 시간일 수도 있고 이전 복원 지점일 수도 있습니다.

이전 복원 지점으로 복원해 보겠습니다. 데이터베이스의 복원 지점 목록을 확인하고 복원하려는 지점을 선택합니다. 여기에서는 이름이 7660777527047692711인 복원 지점을 사용합니다.

위의 복원 지점 이름과 복원 모드를 사용하고 az backup recoveryconfig show 명령을 사용하여 복구 구성 개체를 만듭니다. 이 명령의 남은 매개 변수를 확인합니다.

  • --target-item-name: 복원된 데이터베이스에 사용할 이름입니다. 여기에서는 restored_database라는 이름이 사용되었습니다.
  • --target-server-name: Recovery Services 자격 증명 모음에 성공적으로 등록되었고 복원할 데이터베이스와 동일한 지역에 있는 SQL Server의 이름입니다. 여기에서는 보호 대상인 testSQLVM이라는 동일한 SQL Server에 데이터베이스를 복원합니다.
  • --target-server-type: SQL 데이터베이스 복원의 경우 SQLInstance를 사용해야 합니다.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

위의 쿼리에 대한 응답은 다음과 같이 표시되는 복구 구성 개체입니다.

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

이제 데이터베이스 복원을 위해 az restore restore-azurewl 명령을 실행합니다. 이 명령을 사용하기 위해 recoveryconfig.json이라는 파일에 저장된 위의 JSON 출력을 입력합니다.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

출력은 다음과 같이 나타납니다.

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

응답에 작업 이름이 제공됩니다. 이 작업 이름을 사용하여 az backup job show 명령을 사용해서 작업 상태를 추적할 수 있습니다.

복원 및 덮어쓰기

원래 위치로 복원하려면 OriginalWorkloadRestore를 복원 모드로 사용합니다. 그런 다음, 이전 지정 시간 또는 이전 복원 지점일 수 있는 복원 지점을 선택해야 합니다.

예를 들어 복원을 위해 이전 복원 지정 시간 "28-11-2019-09:53:00"을 선택해보세요. 이 복원 지점을 dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss 형식으로 입력할 수 있습니다. 복원할 올바른 지정 시간을 선택하려면 끊어지지 않은 로그 체인 백업의 간격을 나열하는 az backup recoverypoint show-log-chain 명령을 사용합니다.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

위의 쿼리에 대한 응답은 다음과 같이 표시되는 복구 구성 개체입니다.

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

이제 데이터베이스 복원을 위해 az restore restore-azurewl 명령을 실행합니다. 이 명령을 사용하기 위해 recoveryconfig.json이라는 파일에 저장된 위의 JSON 출력을 입력합니다.

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

출력은 다음과 같이 나타납니다.

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

응답에 작업 이름이 제공됩니다. 이 작업 이름을 사용하여 az backup job show 명령을 사용해서 작업 상태를 추적할 수 있습니다.

보조 지역에 복원

데이터베이스를 보조 지역으로 복원하려면 복원 구성에서 보조 지역에 있는 대상 자격 증명 모음 및 서버를 지정합니다.

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

응답은 다음과 같이 표시되는 복구 구성 개체입니다.

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

az restore restore-azurewl 명령에서 이 복구 구성을 사용합니다. --use-secondary-region 플래그를 선택하여 데이터베이스를 보조 지역으로 복원합니다.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

출력은 다음과 같이 나타납니다.

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

참고 항목

보조 지역에서 사용할 수 있는 백업 데이터의 RPO는 12시간입니다. 따라서 CRR을 켜면 보조 지역의 RPO는 12시간 + 로그 빈도 기간(최소 15분으로 설정할 수 있음)입니다.

파일로 복원

데이터베이스 대신 파일로 백업 데이터를 복원하려면RestoreAsFiles를 복원 모드로 사용합니다. 그런 다음, 복원 지점을 선택합니다. 복원 지점은 이전 지정 시간일 수도 있고 이전 복원 지점일 수도 있습니다. 파일이 지정된 경로에 덤프되면 이러한 파일을 데이터베이스로 복원하려는 SQL 컴퓨터로 가져올 수 있습니다. 이러한 파일을 임의의 컴퓨터로 이동할 수 있으므로 이제 구독 및 지역 간에 데이터를 복원할 수 있습니다.

여기에서는 복원할 이전 지정 시간 28-11-2019-09:53:00을 선택하고 동일한 SQL Server에서 백업 파일을 /home/sql/restoreasfiles로 덤프할 위치를 선택합니다. 이 복원 지점을 dd-mm-yyyy 또는 dd-mm-yyyy-hh:mm:ss 형식 중 하나로 제공할 수 있습니다. 복원할 올바른 지정 시간을 선택하려면 끊어지지 않은 로그 체인 백업의 간격을 나열하는 az backup recoverypoint show-log-chain 명령을 사용합니다.

위의 복원 지점 이름과 복원 모드를 사용하고 az backup recoveryconfig show 명령을 사용하여 복구 구성 개체를 만듭니다. 이 명령에서 각 나머지 매개 변수를 확인합니다.

  • --target-container-name: Recovery Services 자격 증명 모음에 성공적으로 등록되었고 복원할 데이터베이스와 동일한 지역에 제공된 SQL Server의 이름입니다. 보호 대상인 hxehost라는 동일한 SQL Server에 데이터베이스를 파일로 복원합니다.
  • --rp-name: 지정 시간 복원의 경우 복원 지점 이름이 DefaultRangeRecoveryPoint입니다.
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

위의 쿼리에 대한 응답은 다음과 같이 표시되는 복구 구성 개체입니다.

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

이제 데이터베이스를 파일로 복원하기 위해 az restore restore-azurewl 명령을 실행합니다. 이 명령을 사용하기 위해 recoveryconfig.json이라는 파일에 저장된 위의 JSON 출력을 입력합니다.

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

출력은 다음과 같이 나타납니다.

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

응답에 작업 이름이 제공됩니다. 이 작업 이름을 사용하여 az backup job show 명령을 사용해서 작업 상태를 추적할 수 있습니다.

참고 항목

전체 체인이 아닌 파일의 하위 집합만 복원하려면 여기에 설명된 대로 단계를 수행합니다.

구독 간 복원

CSR(구독 간 복원)을 사용하면 복원 권한을 사용할 수 있는 경우 테넌트에서 모든 구독 및 자격 증명 모음으로 복원할 수 있습니다. 기본적으로 CSR은 모든 Recovery Services 자격 증명 모음(기존 및 새로 만든 자격 증명 모음)에서 사용하도록 설정됩니다.

참고 항목

  • Recovery Services 자격 증명 모음에서 구독 간 복원을 트리거할 수 있습니다.
  • CSR은 스트리밍 기반 백업에 대해서만 지원되며 스냅샷 기반 백업에는 지원되지 않습니다.
  • CSR을 사용한 CRR(지역 간 복원)은 지원되지 않습니다.
az backup vault create

자격 증명 모음을 만들고 업데이트하는 동안 자격 증명 모음의 CSR 상태를 설정할 수 있는 cross-subscription-restore-state 매개 변수를 추가합니다.

az backup recoveryconfig show

SQL 또는 HANA 데이터 원본에 대한 구독 간 복원을 트리거하는 동안 대상 구독을 입력으로 제공할 수 있는 --target-subscription-id 매개 변수를 추가합니다.

예제:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

다음 단계