Freigeben über


Lernprogramm: Verwenden von Azure Blob Storage mit SQL Server

Gilt für: SQL Server 2016 (13.x) und höhere Versionen

In diesem Lernprogramm erfahren Sie, wie Sie azure Blob Storage für Datendateien und Sicherungen in SQL Server 2016 (13.x) und höheren Versionen verwenden.

Unterstützung für Azure Blob Storage in SQL Server wurde in SQL Server 2012 (11.x) Service Pack 1 CU2 eingeführt und in späteren Versionen verbessert. Eine Übersicht über die Funktionalität und die Vorteile dieser Funktion finden Sie unter SQL Server-Datendateien in Microsoft Azure.

In diesem Lernprogramm erfahren Sie, wie Sie mit SQL Server-Datendateien in Azure Blob Storage in mehreren Abschnitten arbeiten. Jeder Abschnitt konzentriert sich auf einen bestimmten Vorgang, und Sie sollten die Abschnitte in Sequenz abschließen. Zunächst erfahren Sie, wie Sie einen neuen Container in Blob Storage mit einer gespeicherten Zugriffsrichtlinie und einer freigegebenen Zugriffssignatur erstellen. Anschließend erfahren Sie, wie Sie sql Server-Anmeldeinformationen erstellen, um SQL Server in Azure Blob Storage zu integrieren. Als Nächstes sichern Sie eine Datenbank in Blob Storage und stellen sie auf einem virtuellen Azure-Computer wieder her. Anschließend verwenden Sie die Sicherung des SQL Server-Transaktionsprotokolls zur Dateimomentaufnahme, um sie zu einem Bestimmten Zeitpunkt und zu einer neuen Datenbank wiederherzustellen. Schließlich veranschaulicht das Lernprogramm die Verwendung von gespeicherten Prozeduren und Funktionen des Metadatensystems, um Sie mit Dateimomentaufnahmensicherungen zu verstehen und zu arbeiten.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, müssen Sie mit sql Server-Sicherungs- und Wiederherstellungskonzepten und der T-SQL-Syntax vertraut sein.

Um dieses Lernprogramm zu verwenden, benötigen Sie ein Azure-Speicherkonto, SQL Server Management Studio (SSMS), zugriff auf eine Instanz von SQL Server lokal, zugriff auf einen virtuellen Azure-Computer (VM), auf dem eine Instanz von SQL Server 2016 (13.x) oder eine AdventureWorks2025 Datenbank ausgeführt wird. Darüber hinaus sollte sich das Konto, das zum Ausgeben der BACKUP Und RESTORE Befehle verwendet wurde, in der db_backupoperator Datenbankrolle befinden, wobei alle Anmeldeinformationsberechtigungen geändert werden.

Von Bedeutung

SQL Server unterstützt Azure Data Lake Storage nicht. Stellen Sie sicher, dass der hierarchische Namespace für das für dieses Lernprogramm verwendete Speicherkonto nicht aktiviert ist.

1 – Erstellen einer gespeicherten Zugriffsrichtlinie und des freigegebenen Zugriffsspeichers

In diesem Abschnitt verwenden Sie ein Azure PowerShell-Skript , um eine freigegebene Zugriffssignatur in einem Azure Blob Storage-Container mithilfe einer gespeicherten Zugriffsrichtlinie zu erstellen.

Hinweis

Dieses Skript wird mit Azure PowerShell 5.0.10586 geschrieben.

Eine Gemeinsame Zugriffssignatur ist ein URI, der eingeschränkte Zugriffsrechte für Container, Blobs, Warteschlangen oder Tabellen gewährt. Eine gespeicherte Zugriffsrichtlinie bietet eine zusätzliche Kontrolle über freigegebene Zugriffssignaturen auf der Serverseite, einschließlich Widerrufen, Ablaufen oder Erweitern des Zugriffs. Wenn Sie diese neue Erweiterung verwenden, müssen Sie eine Richtlinie für einen Container mit mindestens Lese-, Schreib- und Listenrechten erstellen.

Sie können eine gespeicherte Zugriffsrichtlinie und eine freigegebene Zugriffssignatur erstellen, indem Sie Azure PowerShell, das Azure Storage SDK, die Azure REST-API oder ein Drittanbieterprogramm verwenden. In diesem Lernprogramm wird die Verwendung eines Azure PowerShell-Skripts zum Abschließen dieser Aufgabe veranschaulicht. Das Skript verwendet das Ressourcen-Manager-Bereitstellungsmodell und erstellt die folgenden neuen Ressourcen.

  • Ressourcengruppe
  • Speicherkonto
  • Azure Blob Storage-Container
  • SAS-Richtlinie

Dieses Skript beginnt mit dem Deklarieren mehrerer Variablen, um die Namen für die vorherigen Ressourcen und die Namen der folgenden erforderlichen Eingabewerte anzugeben:

  • Ein Präfixname, der beim Benennen anderer Ressourcenobjekte verwendet wird
  • Abonnementname
  • Rechenzentrumsstandort

Das Skript wird abgeschlossen, indem die entsprechende CREATE CREDENTIAL Anweisung generiert wird, die Sie in 2 verwenden – Erstellen Sie eine SQL Server-Anmeldeinformationen mithilfe einer freigegebenen Zugriffssignatur. Diese Anweisung wird für Sie in die Zwischenablage kopiert und wird in die Konsole ausgegeben, damit Sie sehen können.

Führen Sie die folgenden Schritte aus, um eine Richtlinie für den Container zu erstellen und eine Freigegebene Zugriffssignatur (Shared Access Signature, SAS) zu generieren:

  1. Öffnen Sie Windows PowerShell oder Windows PowerShell ISE (siehe vorherige Versionsanforderungen).

  2. Bearbeiten Sie das folgende Skript, und führen Sie es aus:

    # Define global variables for the script
    $prefixName = '<a prefix name>'               # used as the prefix for the name for various objects
    $subscriptionID = '<your subscription ID>'    # the ID  of subscription name you will use
    $locationName = '<a data center location>'    # the data center region you will use
    $storageAccountName = $prefixName + 'storage' # the storage account name you will create or use
    $containerName = $prefixName + 'container'    # the storage container name to which you will attach the SAS policy with its SAS token
    $policyName = $prefixName + 'policy'          # the name of the SAS policy
    
    # Set a variable for the name of the resource group you will create or use
    $resourceGroupName = $prefixName + 'rg'
    
    # Add an authenticated Azure account for use in the session
    Connect-AzAccount
    
    # Set the tenant, subscription and environment for use in the rest of
    Set-AzContext -SubscriptionId $subscriptionID
    
    # Create a new resource group - comment out this line to use an existing resource group
    New-AzResourceGroup -Name $resourceGroupName -Location $locationName
    
    # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName
    
    # Get the access keys for the Azure Resource Manager storage account
    $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
    
    # Create a new storage account context using an Azure Resource Manager storage account
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value
    
    # Creates a new container in Blob Storage
    $container = New-AzStorageContainer -Context $storageContext -Name $containerName
    
    # Sets up a Stored Access Policy and a Shared Access Signature for the new container
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld
    
    # Gets the Shared Access Signature for the policy
    $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''
    
    # Sets the variables for the new container you just created
    $container = Get-AzStorageContainer -Context $storageContext -Name $containerName
    $cbc = $container.CloudBlobContainer
    
    # Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature
    Write-Host 'Credential T-SQL'
    $tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='SHARED ACCESS SIGNATURE', SECRET='{1}'" -f $cbc.Uri, $sas
    Set-Clipboard -Value $tSql
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. Nach Abschluss des Skripts befindet sich die CREATE CREDENTIAL Anweisung in der Zwischenablage für die Verwendung im nächsten Abschnitt.

2 – Erstellen einer SQL Server-Anmeldeinformation mithilfe einer freigegebenen Zugriffssignatur

In diesem Abschnitt erstellen Sie eine Anmeldeinformationen zum Speichern der Sicherheitsinformationen, die von SQL Server zum Schreiben und Lesen aus dem Azure Blob Storage-Container verwendet werden, den Sie im vorherigen Schritt erstellt haben.

Eine SQL Server-Anmeldeinformation ist ein Objekt, das zum Speichern von Authentifizierungsinformationen verwendet wird, die zum Herstellen einer Verbindung mit einer Ressource außerhalb von SQL Server erforderlich sind. Die Anmeldeinformationen speichern den URI-Pfad des Azure Blob Storage-Containers und die Freigegebene Zugriffssignatur für diesen Container.

Führen Sie die folgenden Schritte aus, um eine SQL Server-Anmeldeinformationen zu erstellen:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls in Ihrer lokalen Umgebung her.

  3. Fügen Sie im neuen Abfragefenster die CREATE CREDENTIAL Anweisung mit der Signatur für den freigegebenen Zugriff aus Abschnitt 1 ein, und führen Sie dieses Skript aus.

    Das Skript sieht wie der folgende Code aus.

    /* Example:
          USE master
          CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername]
          WITH IDENTITY='SHARED ACCESS SIGNATURE'
          , SECRET = 'sharedaccesssignature'
         GO */
    USE master;
    
    CREATE CREDENTIAL [https://<storage-account>.blob.core.windows.net/<container-name>]
    -- this name must match the container path, start with https and must not contain a forward slash at the end
        WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        -- this is a mandatory string and should not be changed
        SECRET = 'sharedaccesssignature';
        -- this is the shared access signature key that you obtained in section 1.
    GO
    
  4. Um alle verfügbaren Anmeldeinformationen anzuzeigen, können Sie die folgende Anweisung in einem Abfragefenster ausführen, das mit Ihrer Instanz verbunden ist:

    SELECT *
    FROM sys.credentials;
    
  5. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer her.

  6. Fügen Sie im neuen Abfragefenster die CREATE CREDENTIAL Anweisung mit der Signatur für den freigegebenen Zugriff aus Abschnitt 1 ein, und führen Sie dieses Skript aus.

  7. Wiederholen Sie die Schritte 5 und 6 für alle zusätzlichen SQL Server-Instanzen, auf die Sie Zugriff auf den Container haben möchten.

3 – DatenbankSICHERUNG zu URL

In diesem Abschnitt sichern Sie die AdventureWorks2025 Datenbank in Ihrer SQL Server-Instanz auf dem Container, den Sie in Abschnitt 1 erstellt haben.

Führen Sie die folgenden Schritte aus, um eine Datenbank im BLOB-Speicher zu sichern:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz auf Ihrem virtuellen Azure-Computer her.

  3. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Ändern Sie die URL entsprechend für Ihren Speicherkontonamen und den Container, den Sie in Abschnitt 1 angegeben haben, und führen Sie dann dieses Skript aus.

    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.
    USE master;
    ALTER DATABASE AdventureWorks2022
        SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
        TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak';
    
  4. Öffnen Sie den Objekt-Explorer, und stellen Sie mithilfe Ihres Speicherkontos und Kontoschlüssels eine Verbindung mit Azure Storage her.

    1. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben, und stellen Sie sicher, dass die Sicherung aus Schritt 3 weiter oben in diesem Container angezeigt wird.

    Screenshot des mehrstufigen Prozesses zum Herstellen einer Verbindung mit dem Azure Storage-Konto.

4 – Wiederherstellen der Datenbank auf einem virtuellen Computer über die URL

In diesem Abschnitt stellen Sie die AdventureWorks2025 Datenbank in Ihrer SQL Server-Instanz auf Ihrem virtuellen Azure-Computer wieder her.

Hinweis

Aus Gründen der Einfachheit in diesem Lernprogramm verwenden wir denselben Container für die Daten- und Protokolldateien, die wir für die Datenbanksicherung verwendet haben. In einer Produktionsumgebung würden Sie wahrscheinlich mehrere Container und häufig auch mehrere Datendateien verwenden. Sie können ihre Sicherung auch über mehrere Blobs hinweg entfernen, um die Sicherungsleistung beim Sichern einer großen Datenbank zu erhöhen.

Führen Sie die folgenden Schritte aus, um die AdventureWorks2025 Datenbank aus Azure Blob Storage in Ihrer SQL Server-Instanz in Ihrem virtuellen Azure-Computer wiederherzustellen:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer her.

  3. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Ändern Sie die URL entsprechend für Ihren Speicherkontonamen und den Container, den Sie in Abschnitt 1 angegeben haben, und führen Sie dann dieses Skript aus.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Log.ldf';
         --, REPLACE
    
  4. Öffnen Sie den Objekt-Explorer, und stellen Sie eine Verbindung mit Ihrer Azure SQL Server-Instanz her.

  5. Erweitern Sie im Objekt-Explorer den Knoten "Datenbanken ", und stellen Sie sicher, dass die AdventureWorks2025 Datenbank wiederhergestellt wurde (aktualisieren Sie den Knoten bei Bedarf).

    1. Klicken Sie mit der rechten Maustaste auf AdventureWorks2025, und wählen Sie "Eigenschaften" aus.

    2. Wählen Sie "Dateien" aus, und überprüfen Sie, ob die Pfade für die beiden Datenbankdateien URLs sind, die auf Blobs im Azure Blob Storage-Container verweisen (wählen Sie "Abbrechen " aus, wenn Sie fertig sind).

    Screenshot von SSMS der AdventureWorks2022-Datenbank auf der Azure-VM.

  6. Stellen Sie im Objekt-Explorer eine Verbindung mit Azure Storage her.

    1. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben, und stellen Sie sicher, dass die AdventureWorks2022_Data.mdf und AdventureWorks2022_Log.ldf von Schritt 3 weiter oben in diesem Container zusammen mit der Sicherungsdatei aus Abschnitt 3 angezeigt wird (aktualisieren Sie den Knoten nach Bedarf).

    Screenshot aus dem Objekt-Explorer in SSMS mit den Datendateien im Container unter Azure unter einem SQL Server-Instanzeintrag.

5 – Sicherungsdatenbank mit Dateimomentaufnahmesicherung

In diesem Abschnitt sichern Sie die Datenbank auf Ihrem virtuellen Azure-Computer mithilfe der AdventureWorks2025 Dateimomentaufnahmesicherung, um eine nahezu sofortige Sicherung mithilfe von Azure-Momentaufnahmen durchzuführen. Weitere Informationen zu Dateimomentaufnahmensicherungen finden Sie unter File-Snapshot Sicherungen für Datenbankdateien in Azure

Führen Sie die folgenden Schritte aus, um die Datenbank mithilfe der AdventureWorks2025 Dateimomentaufnahmesicherung zu sichern:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer her.

  3. Kopieren, einfügen und ausführen Sie das folgende Transact-SQL Skript in das Abfragefenster (schließen Sie dieses Abfragefenster nicht . Sie führen dieses Skript erneut in Schritt 5 aus). Mit dieser gespeicherten Systemprozedur können Sie die vorhandenen Dateimomentaufnahmesicherungen für jede Datei anzeigen, die eine angegebene Datenbank umfasst. Sie können sehen, dass es keine Dateimomentaufnahmesicherungen für diese Datenbank gibt.

    -- Verify that no file snapshot backups exist
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    
  4. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Ändern Sie die URL entsprechend für Ihren Speicherkontonamen und den Container, den Sie in Abschnitt 1 angegeben haben, und führen Sie dann dieses Skript aus. Beachten Sie, wie schnell diese Sicherung auftritt.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. Nachdem Sie überprüft haben, ob das Skript in Schritt 4 erfolgreich ausgeführt wurde, führen Sie das folgende Skript erneut aus. Der Sicherungsvorgang "Dateimomentaufnahme" in Schritt 4 generierte Dateimomentaufnahmen sowohl der Daten als auch der Protokolldatei.

    -- Verify that two file-snapshot backups exist
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    

    Screenshot von SSMS der Ergebnisse von fn_db_backup_file_snapshots mit Momentaufnahmen.

  6. Erweitern Sie im Objekt-Explorer in Ihrer SQL Server-Instanz auf Ihrem virtuellen Azure-Computer den Knoten "Datenbanken ", und stellen Sie sicher, dass die AdventureWorks2025 Datenbank in dieser Instanz wiederhergestellt wurde (aktualisieren Sie den Knoten bei Bedarf).

  7. Stellen Sie im Objekt-Explorer eine Verbindung mit Azure Storage her.

  8. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben, und stellen Sie sicher, dass der AdventureWorks2022_Azure.bak von Schritt 4 weiter oben in diesem Container angezeigt wird, zusammen mit der Sicherungsdatei aus Abschnitt 3 und den Datenbankdateien aus Abschnitt 4 (aktualisieren Sie den Knoten nach Bedarf).

    Screenshot aus dem Objekt-Explorer in SSMS mit der Momentaufnahmesicherung in Azure.

6 – Generieren von Aktivitäten und Sicherungsprotokollen mithilfe der Dateimomentaufnahmesicherung

In diesem Abschnitt generieren Sie Aktivitäten in der AdventureWorks2025 Datenbank und erstellen regelmäßig Transaktionsprotokollsicherungen mithilfe von Dateimomentaufnahmensicherungen. Weitere Informationen zur Verwendung von Sicherungen von Dateimomentaufnahmen finden Sie unter File-Snapshot Sicherungen für Datenbankdateien in Azure.

Führen Sie die folgenden Schritte aus, um Aktivitäten in der AdventureWorks2025 Datenbank zu generieren und in regelmäßigen Abständen Transaktionsprotokollsicherungen mithilfe von Dateimomentaufnahmen zu erstellen:

  1. Starten Sie SSMS.

  2. Öffnen Sie zwei neue Abfragefenster, und verbinden Sie die einzelnen Abfragen mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer.

  3. Kopieren, Einfügen und Ausführen des folgenden Transact-SQL Skripts in einem der Abfragefenster. Die Production.Location Tabelle enthält 14 Zeilen, bevor neue Zeilen in Schritt 4 hinzugefügt werden.

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  4. Kopieren Sie die folgenden beiden Transact-SQL Skripts, und fügen Sie sie in die beiden separaten Abfragefenster ein. Ändern Sie die URL entsprechend für Ihren Speicherkontonamen und den Container, den Sie in Abschnitt 1 angegeben haben, und führen Sie diese Skripts dann gleichzeitig in separaten Abfragefenstern aus. Diese Skripts dauern einige Minuten.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count AS INT = 1, @inner AS INT;
    
    WHILE @count < 400
        BEGIN
            BEGIN TRANSACTION;
            SET @inner = 1;
            WHILE @inner <= 75
                BEGIN
                    INSERT INTO AdventureWorks2022.Production.Location (
                        Name,
                        CostRate,
                        Availability,
                        ModifiedDate
                    )
                    VALUES (NEWID(), .5, 5.2, GETDATE());
                    SET @inner = @inner + 1;
                END
            COMMIT TRANSACTION;
            WAITFOR DELAY '00:00:01';
            SET @count = @count + 1;
        END
    
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;
    WHILE @count <= 7
       BEGIN
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location);
             SET @device = 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. Überprüfen Sie die Ausgabe des ersten Skripts, und beachten Sie, dass die letzte Zeilenanzahl jetzt 29.939 beträgt.

    Screenshot von SSMS mit einem Resultset mit Zeilenanzahl von 29.939.

  6. Überprüfen Sie die Ausgabe des zweiten Skripts, und beachten Sie, dass jedes Mal, wenn die BACKUP LOG Anweisung ausgeführt wird, zwei neue Dateimomentaufnahmen erstellt werden, eine Dateimomentaufnahme der Protokolldatei und eine Dateimomentaufnahme der Datendatei – für insgesamt zwei Dateimomentaufnahmen für jede Datenbankdatei. Beachten Sie nach Abschluss des zweiten Skripts, dass es jetzt insgesamt 16 Dateimomentaufnahmen gibt, 8 für jede Datenbankdatei – eine aus der BACKUP DATABASE Anweisung und eine für jede Ausführung der BACKUP LOG Anweisung.

    Screenshot von SSMS mit dem Resultset des Sicherungsmomentaufnahmeverlaufs.

  7. Stellen Sie im Objekt-Explorer eine Verbindung mit Azure Storage her.

  8. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben, und vergewissern Sie sich, dass sieben neue Sicherungsdateien zusammen mit den Datendateien aus den vorherigen Abschnitten angezeigt werden (aktualisieren Sie den Knoten nach Bedarf).

    Screenshot aus dem Objekt-Explorer in SSMS mit mehreren Momentaufnahmen in Azure-Container.

7 – Wiederherstellen einer Datenbank zu einem Zeitpunkt

In diesem Abschnitt stellen Sie die AdventureWorks2025 Datenbank zu einem Zeitpunkt zwischen zwei der Transaktionsprotokollsicherungen wieder her.

Mit herkömmlichen Sicherungen müssen Sie die vollständige Datenbanksicherung, vielleicht eine differenzielle Sicherung, alle Transaktionsprotokolldateien bis zu dem Zeitpunkt, zu dem Sie wiederherstellen möchten, verwenden, um eine Zeitwiederherstellung durchzuführen. Bei Sicherungen von Dateimomentaufnahmen benötigen Sie nur die beiden angrenzenden Protokolldateien, die die Zielbeiträge bereitstellen, die die Zeit für die Wiederherstellung bereitstellen. Sie benötigen nur zwei Sicherungssätze für Protokolldateimomentaufnahmen, da jede Protokollsicherung eine Dateimomentaufnahme jeder Datenbankdatei erstellt (jede Datendatei und die Protokolldatei).

Führen Sie die folgenden Schritte aus, um eine Datenbank zu einem bestimmten Zeitpunkt aus Sicherungssätzen für Dateimomentaufnahmen wiederherzustellen:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer her.

  3. Kopieren, Einfügen und Ausführen des folgenden Transact-SQL Skripts in das Abfragefenster. Stellen Sie sicher, dass die Production.Location Tabelle über 29.939 Zeilen verfügt, bevor sie zu einem Zeitpunkt wiederhergestellt werden, in dem in Schritt 4 weniger Zeilen vorhanden sind.

    -- Verify row count at start
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    

    Screenshot der SSMS-Ergebnisse mit einer Zeilenanzahl von 29.939.

  4. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Wählen Sie zwei benachbarte Protokolldateien aus, und konvertieren Sie den Dateinamen in das Datum und die Uhrzeit, die Sie für dieses Skript benötigen. Ändern Sie die URL entsprechend für den Namen Ihres Speicherkontos und den Container, den Sie in Abschnitt 1 angegeben haben. Geben Sie die Namen der ersten und zweiten Sicherungsdatei an, geben Sie die STOPAT Uhrzeit im Format an June 26, 2018 01:48 PM, und führen Sie dann dieses Skript aus. Es dauert ein paar Minuten, bis sie abgeschlossen sind.

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count
    ALTER DATABASE AdventureWorks2022
        SET SINGLE_USER
        WITH ROLLBACK IMMEDIATE;
    
    RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<firstbackupfile>.bak'
        WITH NORECOVERY, REPLACE;
    
    RESTORE LOG AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<secondbackupfile>.bak'
        WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    
    ALTER DATABASE AdventureWorks2022
        SET MULTI_USER;
    
    -- get new count
    SELECT COUNT(*)
    FROM AdventureWorks2022.Production.Location;
    
  5. Überprüfen Sie die Ausgabe. Nach der Wiederherstellung beträgt die Zeilenanzahl 18.389, bei der es sich um eine Zeilenanzahlnummer zwischen Protokollsicherung 5 und 6 handelt (Ihre Zeilenanzahl kann variieren).

    Screenshot von 18.000 Zeilen.

8 – Wiederherstellen als neue Datenbank aus der Protokollsicherung

In diesem Abschnitt stellen Sie die AdventureWorks2025 Datenbank als neue Datenbank aus einer Dateimomentaufnahme-Transaktionsprotokollsicherung wieder her.

In diesem Szenario führen Sie eine Wiederherstellung einer SQL Server-Instanz auf einem anderen virtuellen Computer für die Geschäftsanalyse und Berichterstellung durch. Durch das Wiederherstellen einer anderen Instanz auf einem anderen virtuellen Computer wird die Arbeitsauslastung zu einem virtuellen Computer ausgelagert, der zu diesem Zweck reserviert und angepasst wurde, wodurch die Ressourcenanforderungen aus dem Transaktionssystem entfernt werden.

Die Wiederherstellung aus einer Transaktionsprotokollsicherung mit Dateimomentaufnahmesicherung ist wesentlich schneller als bei herkömmlichen Streamingsicherungen. Bei herkömmlichen Streamingsicherungen müssen Sie die vollständige Datenbanksicherung, vielleicht eine differenzielle Sicherung und einige oder alle Transaktionsprotokollsicherungen (oder eine neue vollständige Datenbanksicherung) verwenden. Bei Sicherungen des Dateimomentaufnahmeprotokolls benötigen Sie jedoch nur die letzte Protokollsicherung (oder eine andere Protokollsicherung oder alle zwei benachbarten Protokollsicherungen für einen Punkt zwischen zwei Protokollsicherungszeiten). Um zu löschen, benötigen Sie nur einen Sicherungssatz für Protokolldateimomentaufnahmen, da jede Dateimomentaufnahmeprotokollsicherung eine Dateimomentaufnahme jeder Datenbankdatei (jede Datendatei und die Protokolldatei) erstellt.

Führen Sie die folgenden Schritte aus, um eine Datenbank aus einer Transaktionsprotokollsicherung mithilfe der Sicherung der Dateimomentaufnahme wiederherzustellen:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf einem virtuellen Azure-Computer her.

    Wenn es sich um einen anderen virtuellen Azure-Computer handelt, als sie für die vorherigen Abschnitte verwendet wurden, stellen Sie sicher, dass Sie die Schritte in 2 befolgt haben – Erstellen sie eine SQL Server-Anmeldeinformationen mithilfe einer freigegebenen Zugriffssignatur. Wenn Sie einen anderen Container wiederherstellen möchten, führen Sie die Schritte in 1 aus: Erstellen einer gespeicherten Zugriffsrichtlinie und des freigegebenen Zugriffsspeichers für den neuen Container.

  3. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Wählen Sie die Protokolldatei aus, die Sie verwenden möchten. Ändern Sie die URL entsprechend für Den Namen Ihres Speicherkontos und den Container, den Sie in Abschnitt 1 angegeben haben, geben Sie den Namen der Protokollsicherungsdatei an, und führen Sie dann dieses Skript aus.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<logbackupfile.bak>'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Log.ldf',
         RECOVERY;
         --, REPLACE
    
  4. Überprüfen Sie die Ausgabe, um zu überprüfen, ob die Wiederherstellung erfolgreich war.

  5. Stellen Sie im Objekt-Explorer eine Verbindung mit Azure Storage her.

  6. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben (bei Bedarf aktualisieren), und überprüfen Sie, ob die neuen Daten und Protokolldateien im Container zusammen mit den Blobs aus den vorherigen Abschnitten angezeigt werden.

    Screenshot des Speicherbrowsers von SQL Server Management Studio von Azure-Containern mit den Daten und Protokolldateien für die neue Datenbank.

9 – Verwalten von Sicherungssätzen und Sicherungen von Dateimomentaufnahmen

In diesem Abschnitt löschen Sie einen Sicherungssatz mithilfe der gespeicherten sp_delete_backup Systemprozedur. Diese vom System gespeicherte Prozedur löscht die Sicherungsdatei und die Dateimomentaufnahme für jede Datenbankdatei, die diesem Sicherungssatz zugeordnet ist.

Hinweis

Wenn Sie versuchen, einen Sicherungssatz zu löschen, indem Sie die Sicherungsdatei aus dem Azure Blob Storage-Container löschen, löschen Sie nur die Sicherungsdatei selbst – die zugeordneten Dateimomentaufnahmen bleiben erhalten. Wenn Sie sich in diesem Szenario befinden, verwenden Sie die sys.fn_db_backup_file_snapshots Systemfunktion, um die URL der verwaisten Dateimomentaufnahmen zu identifizieren und die sp_delete_backup_file_snapshot gespeicherten Systemprozedur zu verwenden, um jede verwaiste Dateimomentaufnahme zu löschen. Weitere Informationen finden Sie unter Dateimomentaufnahme-Sicherungen für Datenbankdateien in Azure.

Führen Sie die folgenden Schritte aus, um einen Sicherungssatz für eine Dateimomentaufnahme zu löschen:

  1. Starten Sie SSMS.

  2. Öffnen Sie ein neues Abfragefenster, und stellen Sie eine Verbindung mit der SQL Server-Instanz des Datenbankmoduls auf Ihrem virtuellen Azure-Computer (oder mit einer beliebigen SQL Server-Instanz mit Berechtigungen zum Lesen und Schreiben in diesem Container) her.

  3. Kopieren Sie das folgende Transact-SQL Skript, und fügen Sie es in das Abfragefenster ein. Wählen Sie die Protokollsicherung aus, die Sie zusammen mit den zugehörigen Dateimomentaufnahmen löschen möchten. Ändern Sie die URL entsprechend für Den Namen Ihres Speicherkontos und den Container, den Sie in Abschnitt 1 angegeben haben, geben Sie den Namen der Protokollsicherungsdatei an, und führen Sie dann dieses Skript aus.

    EXECUTE sys.sp_delete_backup 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-21764-20181003205236.bak';
    
  4. Stellen Sie im Objekt-Explorer eine Verbindung mit Azure Storage her.

  5. Erweitern Sie Container, erweitern Sie den Container, den Sie in Abschnitt 1 erstellt haben, und überprüfen Sie, ob die in Schritt 3 verwendete Sicherungsdatei in diesem Container nicht mehr angezeigt wird (aktualisieren Sie den Knoten nach Bedarf).

    Screenshot des SPEICHERbrowsers von SQL Server Management Studios mit Azure-Containern und dem Löschen des Sicherungs-BLOB für Transaktionsprotokolle.

  6. Kopieren, einfügen und führen Sie das folgende Transact-SQL Skript in das Abfragefenster aus, um zu überprüfen, ob zwei Dateimomentaufnahmen gelöscht wurden.

    -- verify that two file snapshots have been removed
    SELECT *
    FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
    

    Screenshot des Bereichs

10 – Ressourcen entfernen

Sobald Sie mit diesem Lernprogramm fertig sind und Ressourcen sparen möchten, müssen Sie die in diesem Lernprogramm erstellte Ressourcengruppe löschen.

Führen Sie zum Löschen der Ressourcengruppe den folgenden PowerShell-Code aus:

# Define global variables for the script
$prefixName = '<prefix name>' # should be the same as the beginning of the tutorial

# Set a variable for the name of the resource group you will create or use
$resourceGroupName = $prefixName + 'rg'

# Adds an authenticated Azure account for use in the session
Connect-AzAccount

# Set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionId $subscriptionID

# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName