Delen via


SQL-databases herstellen in een Azure-VM met behulp van Azure CLI

Azure CLI wordt gebruikt voor het maken en beheren van Azure-resources vanaf de opdrachtregel of door middel van scripts. In dit artikel wordt beschreven hoe u een back-up van een SQL-database op een Azure-VM herstelt met behulp van Azure CLI. U kunt deze acties ook uitvoeren met behulp van Azure Portal.

Gebruik Azure Cloud Shell voor het uitvoeren van CLI-opdrachten.

In dit artikel wordt ervan uitgegaan dat u een SQL-database hebt die wordt uitgevoerd op een Azure-VM waarvan een back-up wordt gemaakt met behulp van Azure Backup. Als u back-ups hebt gemaakt van een SQL-database in Azure met behulp van CLI om een back-up te maken van uw SQL-database, gebruikt u de volgende resources:

  • Een resourcegroep met de naam SQLResourceGroup.
  • Een kluis met de naam SQLVault.
  • Beveiligde container met de naam VMAppContainer;Compute;SQLResourceGroup;testSQLVM.
  • Een back-up maken van database/item met de naam sqldatabase;mssqlserver;master.
  • Resources in de westus regio.

Notitie

Zie de ondersteuningsmatrix voor SQL-back-ups voor meer informatie over de ondersteunde configuraties en scenario's.

Herstelpunten weergeven voor een back-up van een database

Als u de lijst met alle herstelpunten voor een database wilt weergeven, gebruikt u de opdracht az backup recoverypoint list als:

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

De lijst met herstelpunten wordt weergegeven als:

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

De bovenstaande lijst bevat drie herstelpunten: elk voor volledige, differentiële en logboekback-up.

Notitie

U kunt ook de begin- en eindpunten van elke niet-verbroken logboekback-upketen weergeven met behulp van de opdracht az backup recoverypoint show-log-chain .

Vereisten voor het herstellen van een database

Zorg ervoor dat aan de volgende vereisten wordt voldaan voordat u een database herstelt:

  • U kunt de database alleen herstellen naar een SQL-exemplaar in dezelfde regio.
  • Het doelexemplaren moeten worden geregistreerd bij dezelfde kluis als de bron.

Een database herstellen

Azure Backup kan SQL-databases herstellen die worden uitgevoerd op Virtuele Azure-machines als:

  • Herstel naar een specifieke datum of tijd (op de seconde) met behulp van logboekback-ups. Azure Backup bepaalt automatisch de juiste keten van volledige back-ups, differentiële back-ups en logboekback-ups die nodig zijn voor het herstellen op basis van de geselecteerde tijd.
  • Herstel naar een specifieke volledige of differentiële back-up om naar een specifiek herstelpunt te herstellen.

Als u een database wilt herstellen, gebruikt u de opdracht az restore restore-azurewl , waarvoor een herstelconfiguratieobject is vereist als een van de invoerwaarden. U kunt dit object genereren met behulp van de opdracht az backup recoveryconfig show . Het herstelconfiguratieobject bevat alle details voor het uitvoeren van een herstelbewerking. Een van deze is de herstelmodus : OriginalWorkloadRestore of AlternateWorkloadRestore.

Notitie

OriginalWorkloadRestore: herstelt gegevens naar hetzelfde SQL-exemplaar als de oorspronkelijke bron. Met deze optie wordt de oorspronkelijke database overschreven. AlternateWorkloadRestore: hiermee herstelt u de database naar een alternatieve locatie en behoudt u de oorspronkelijke brondatabase.

Herstellen naar alternatieve locatie

Als u een database naar een andere locatie wilt herstellen, gebruikt u AlternateWorkloadRestore als herstelmodus. U moet vervolgens het herstelpunt kiezen. Dit kan een eerder tijdstip zijn of eventuele eerdere herstelpunten.

Laten we doorgaan met het herstellen naar een eerder herstelpunt. Bekijk de lijst met herstelpunten voor de database en kies het punt dat u wilt herstellen. Hier gaan we het herstelpunt gebruiken met de naam 7660777527047692711.

Maak met de bovenstaande naam van het herstelpunt en de herstelmodus het herstelconfiguratieobject met behulp van de opdracht az backup recoveryconfig show . Controleer de resterende parameters in deze opdracht:

  • --target-item-name: de naam die moet worden gebruikt door de herstelde database. In dit scenario hebben we de naam restored_database gebruikt.
  • --target-server-name: de naam van een SQL-server die is geregistreerd bij een Recovery Services-kluis en blijft dezelfde regio als de database die moet worden hersteld. Hier herstelt u de database naar dezelfde SQL-server die u hebt beveiligd, met de naam testSQLVM.
  • --target-server-type: voor het herstellen van SQL-databases moet u SQLInstance gebruiken.

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

Het antwoord op de bovenstaande query is een herstelconfiguratieobject dat wordt weergegeven als:

{
  "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": []
}

Voer nu de opdracht az restore-azurewl uit om de database te herstellen. Als u deze opdracht wilt gebruiken, voert u de bovenstaande JSON-uitvoer in die is opgeslagen in een bestand met de naam recoveryconfig.json.

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

De uitvoer wordt weergegeven als:

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

Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .

Herstellen en overschrijven

Als u wilt herstellen naar de oorspronkelijke locatie, gebruikt u OriginalWorkloadRestore als de herstelmodus. Vervolgens moet u het herstelpunt kiezen. Dit kan een eerder tijdstip of een van de vorige herstelpunten zijn.

Laten we bijvoorbeeld het vorige tijdstip 28-11-2019-09:53:00 kiezen om te herstellen. U kunt dit herstelpunt opgeven in de volgende indelingen: dd-mm-jjjj, dd-mm-jjjj-uu:mm:ss. Als u een geldig tijdstip wilt kiezen om te herstellen, gebruikt u de opdracht az backup recoverypoint show-log-chain , waarin de intervallen van niet-verbroken back-ups van logboekketens worden vermeld.

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

Het antwoord op de bovenstaande query is een herstelconfiguratieobject dat wordt weergegeven als:

{
  "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"
}

Voer nu de opdracht az restore-azurewl uit om de database te herstellen. Als u deze opdracht wilt gebruiken, voert u de bovenstaande JSON-uitvoer in die is opgeslagen in een bestand met de naam recoveryconfig.json.

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

De uitvoer wordt weergegeven als:

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

Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .

Herstellen naar een secundaire regio

Als u een database wilt herstellen naar de secundaire regio, geeft u een doelkluis en server op die zich in de secundaire regio bevinden, in de herstelconfiguratie.

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

Het antwoord is een herstelconfiguratieobject dat wordt weergegeven als:

 {
  "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": [],
}

Gebruik deze herstelconfiguratie in de opdracht az restore-azurewl . Selecteer de --use-secondary-region vlag om de database te herstellen naar de secundaire regio.

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

De uitvoer wordt weergegeven als:

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

Notitie

De RPO voor de back-upgegevens die beschikbaar zijn in de secundaire regio is 12 uur. Wanneer u CRR inschakelt, is de RPO voor de secundaire regio daarom 12 uur + duur van de logboekfrequentie (die kan worden ingesteld op minimaal 15 minuten).

Herstellen als bestanden

Als u de back-upgegevens wilt herstellen als bestanden in plaats van een database, gebruikt u RestoreAsFiles als de herstelmodus. Kies vervolgens het herstelpunt, dat een eerder tijdstip of een eerder herstelpunt kan zijn. Zodra de bestanden naar een opgegeven pad zijn gedumpt, kunt u deze bestanden naar elke SQL-machine brengen waar u ze als database wilt herstellen. Omdat u deze bestanden naar een willekeurige machine kunt verplaatsen, kunt u de gegevens nu in abonnementen en regio's herstellen.

Kies hier het vorige tijdstip om te herstellen en de locatie voor het dumpen van back-upbestanden als /home/sql/restoreasfiles op dezelfde SQL-server28-11-2019-09:53:00. U kunt dit herstelpunt opgeven in een van de volgende indelingen: dd-mm-jjjj of dd-mm-jjjj-jjjj-uu:mm:ss. Als u een geldig tijdstip wilt kiezen om te herstellen, gebruikt u de opdracht az backup recoverypoint show-log-chain , waarin de intervallen van niet-verbroken back-ups van logboekketens worden vermeld.

Maak met de bovenstaande naam van het herstelpunt en de herstelmodus het herstelconfiguratieobject met behulp van de opdracht az backup recoveryconfig show . Controleer elk van de resterende parameters in deze opdracht:

  • --target-container-name: de naam van een SQL-server die is geregistreerd bij een Recovery Services-kluis en aanwezig is in dezelfde regio als de database die moet worden hersteld. We gaan de database herstellen als bestanden naar dezelfde SQL-server die u hebt beveiligd, met de naam hxehost.
  • --rp-name: Voor een herstel naar een bepaald tijdstip is de naam van het herstelpunt 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

Het antwoord op de bovenstaande query js een herstelconfiguratieobject dat wordt weergegeven als:

{
  "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"
}

Als u de database nu wilt herstellen als bestanden, voert u de opdracht az restore restore-azurewl uit. Als u deze opdracht wilt gebruiken, voert u de JSON-uitvoer hierboven in die is opgeslagen in een bestand met de naam recoveryconfig.json.

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

De uitvoer wordt weergegeven als:

{
  "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"
}

Het antwoord geeft u de taaknaam. U kunt deze taaknaam gebruiken om de taakstatus bij te houden met behulp van de opdracht az backup job show .

Notitie

Als u de hele keten niet wilt herstellen, maar alleen een subset van bestanden, volgt u de stappen die hier worden beschreven.

Herstellen tussen abonnementen

Met CSR (Cross Subscription Restore) hebt u de flexibiliteit om te herstellen naar elk abonnement en elke kluis onder uw tenant als er herstelmachtigingen beschikbaar zijn. CSR is standaard ingeschakeld voor alle Recovery Services-kluizen (bestaande en nieuw gemaakte kluizen).

Notitie

  • U kunt herstel tussen abonnementen activeren vanuit de Recovery Services-kluis.
  • CSR wordt alleen ondersteund voor back-ups op basis van streaming en wordt niet ondersteund voor back-ups op basis van momentopnamen.
  • CRR (Cross Regional Restore) met CSR wordt niet ondersteund.
az backup vault create

Voeg de parameter cross-subscription-restore-state toe waarmee u de CSR-status van de kluis kunt instellen tijdens het maken en bijwerken van de kluis.

az backup recoveryconfig show

Voeg de parameter --target-subscription-id toe waarmee u het doelabonnement kunt opgeven als invoer tijdens het activeren van herstel tussen abonnementen voor SQL- of HANA-gegevensbronnen.

Voorbeeld:

   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}

Volgende stap