Dela via


Självstudie: Använda Azure Blob Storage med SQL Server

gäller för: SQL Server 2016 (13.x) och senare versioner

Den här självstudien hjälper dig att förstå hur du använder Azure Blob Storage för datafiler och säkerhetskopior i SQL Server 2016 och senare versioner.

SQL Server-integreringsstöd för Azure Blob Storage började som en SQL Server 2012 Service Pack 1 CU2-förbättring och förbättrades ytterligare med SQL Server 2014 och SQL Server 2016. En översikt över funktionerna och fördelarna med att använda den här funktionen finns i SQL Server Data Files i Microsoft Azure.

Den här handledningen visar hur du arbetar med SQL Server Data Files i Azure Blob Storage som omfattar flera avsnitt. Varje avsnitt fokuserar på en specifik uppgift och avsnitten ska slutföras i följd. Först får du lära dig hur du skapar en ny container i Blob Storage med en lagrad åtkomstprincip och en signatur för delad åtkomst. Sedan får du lära dig hur du skapar en SQL Server-autentiseringsuppgift för att integrera SQL Server med Azure Blob Storage. Därefter säkerhetskopierar du en databas till Blob Storage och återställer den till en virtuell Azure-dator. Sedan använder du ögonblicksbildssäkerhetskopiering av transaktionslogg för SQL Server för att återställa till en viss tidpunkt och till en ny databas. Slutligen visar handledningen användningen av systemlagrade procedurer och funktioner för metadata som hjälper dig att förstå och arbeta med ögonblicksbilder av säkerhetskopior.

Förutsättningar

För att slutföra den här självstudien måste du känna till begreppen säkerhetskopiering och återställning av SQL Server och T-SQL-syntax.
Om du vill använda den här självstudien behöver du ett Azure Storage-konto, SQL Server Management Studio (SSMS), åtkomst till en instans av SQL Server lokalt, åtkomst till en virtuell Azure-dator (VM) som kör en instans av SQL Server 2016 eller senare samt en AdventureWorks2022 databas. Dessutom bör kontot som används för att utfärda kommandona BACKUP och RESTORE finnas i db_backupoperator databasrollen med ändra eventuella behörigheter för autentiseringsuppgifter.

Viktig

SQL Server stöder inte Azure Data Lake Storage, se till att hierarkisk namnrymd inte är aktiverad på lagringskontot som används för den här handledningen.

1 – Skapa lagrad åtkomstprincip och lagring med delad åtkomst

I det här avsnittet använder du ett Azure PowerShell- skript för att skapa en signatur för delad åtkomst i en Azure Blob Storage-container med hjälp av en lagrad åtkomstprincip.

Observera

Det här skriptet skrivs med Azure PowerShell 5.0.10586.

En signatur för delad åtkomst är en URI som ger begränsad åtkomstbehörighet till containrar, blobar, köer eller tabeller. En lagrad åtkomstprincip ger ytterligare en nivå av kontroll över signaturer för delad åtkomst på serversidan, inklusive återkallande, upphörande eller utökad åtkomst. När du använder den här nya förbättringen måste du skapa en princip för en container med minst läs-, skriv- och listrättigheter.

Du kan skapa en lagrad åtkomstprincip och en signatur för delad åtkomst med hjälp av Azure PowerShell, Azure Storage SDK, Azure REST API eller ett verktyg från tredje part. Den här självstudien visar hur du använder ett Azure PowerShell-skript för att slutföra uppgiften. Skriptet använder Resource Manager-distributionsmodellen och skapar följande nya resurser

  • Resursgrupp
  • Lagringskonto
  • Azure Blob Storage-container
  • SAS-policy

Det här skriptet börjar med att deklarera ett antal variabler för att ange namnen på ovanstående resurser och namnen på följande obligatoriska indatavärden:

  • Ett prefixnamn som används för att namnge andra resursobjekt
  • Prenumerationsnamn
  • Datacenterplats

Skriptet slutförs genom att generera lämplig CREATE CREDENTIAL-instruktion som du ska använda i 2 – Skapa en SQL Server-autentiseringsuppgift med hjälp av en signatur för delad åtkomst. Detta uttalande kopieras till urklippet för dig och skrivs ut i konsolen så att du kan se det.

Följ dessa steg för att skapa en princip för containern och generera en signatur för delad åtkomst (SAS):

  1. Öppna Windows PowerShell eller Windows PowerShell ISE (se versionskrav ovan).

  2. Redigera och kör sedan skriptet nedan:

    # 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.Substring(1)
    $tSql | clip
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. När skriptet är klart finns kommandot CREATE CREDENTIAL i Urklipp för användning i nästa avsnitt.

2 – Skapa en SQL Server-autentiseringsuppgift med en signatur för delad åtkomst

I det här avsnittet skapar du en autentiseringsuppgift för att lagra säkerhetsinformationen som ska användas av SQL Server för att skriva till och läsa från Azure Blob Storage-containern som du skapade i föregående steg.

En SQL Server-autentiseringsuppgift är ett objekt som används för att lagra autentiseringsinformation som krävs för att ansluta till en resurs utanför SQL Server. Autentiseringsuppgifterna lagrar URI-sökvägen för Azure Blob Storage-containern och signaturen för delad åtkomst för den här containern.

Följ dessa steg för att skapa en SQL Server-autentiseringsuppgift:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn i din lokala miljö.

  3. I det nya frågefönstret klistrar du in instruktionen CREATE CREDENTIAL med signaturen för delad åtkomst från avsnitt 1 och kör skriptet.

    Skriptet ser ut som följande kod.

    /* 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://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
      -- 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. Om du vill se alla tillgängliga autentiseringsuppgifter kan du köra följande instruktion i ett frågefönster som är anslutet till din instans:

    SELECT * from sys.credentials
    
  5. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn.

  6. I det nya frågefönstret klistrar du in instruktionen CREATE CREDENTIAL med signaturen för delad åtkomst från avsnitt 1 och kör skriptet.

  7. Upprepa steg 5 och 6 för eventuella ytterligare SQL Server-instanser som du vill ha åtkomst till containern.

3 – Säkerhetskopiering av databas till URL

I det här avsnittet säkerhetskopierar du AdventureWorks2022-databasen i SQL Server-instansen till containern som du skapade i avsnitt 1.

Not

Om du vill säkerhetskopiera en SQL Server 2012-databas (11.x) SP1 CU2+ eller en SQL Server 2014-databas (12.x) till den här containern kan du använda den inaktuella syntax som dokumenterats här för att säkerhetskopiera till en URL med syntaxen WITH CREDENTIAL.

Följ dessa steg för att säkerhetskopiera en databas till bloblagring:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen på din virtuella Azure-dator.

  3. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1 och kör sedan det här skriptet.

    -- 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://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
    
  4. Öppna Object Explorer och anslut till Azure Storage med ditt lagringskonto och din kontonyckel.

    1. Expandera Containrar, expandera containern som du skapade i avsnitt 1 och kontrollera att säkerhetskopian från steg 3 ovan visas i den här containern.

    Skärmbilder som anger processen med flera steg för att ansluta till Azure Storage-kontot.

4 – Återställa databasen till en virtuell dator från URL:en

I det här avsnittet återställer du AdventureWorks2022-databasen till SQL Server-instansen på den virtuella Azure-datorn.

Not

För enkelhetens skull i den här handledningen använder vi samma container för de data- och loggfiler som vi använde för databassäkerhetskopian. I en produktionsmiljö skulle du förmodligen använda flera containrar och ofta flera datafiler också. Du kan också överväga att ta bort säkerhetskopieringen över flera blobar för att öka säkerhetskopieringsprestandan när du säkerhetskopierar en stor databas.

Följ dessa steg för att återställa AdventureWorks2022-databasen från Azure Blob Storage till SQL Server-instansen på den virtuella Azure-datorn:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn.

  3. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1 och kör sedan det här skriptet.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
       WITH
          MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Data.mdf'
         ,MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Log.ldf'
    --, REPLACE
    
  4. Öppna Object Explorer och anslut till din Azure SQL Server-instans.

  5. I Object Explorer expanderar du noden Databases och kontrollerar att AdventureWorks2022-databasen har återställts (uppdatera noden efter behov)

    1. Högerklicka på AdventureWorks2022och välj Egenskaper.
    2. Välj Filer och kontrollera att sökvägarna för de två databasfilerna är URL:er som pekar på blobar i Azure Blob Storage-containern (välj Avbryt när du är klar).

    Skärmbilder från SSMS av [! INCLUDE [sssampledbobject-md](.. /includes/sssampledbobject-md.md)] databas på den virtuella Azure-datorn.

  6. I Object Explorer ansluter du till Azure Storage.

    1. Expandera Containrar, expandera containern som du skapade i avsnitt 1 och kontrollera att AdventureWorks2022_Data.mdf och AdventureWorks2022_Log.ldf från steg 3 ovan visas i den här containern tillsammans med säkerhetskopieringsfilen från avsnitt 3 (uppdatera noden efter behov).

    Skärmbild från Object Explorer i SSMS som visar datafilerna i containern i Azure under en SQL Server-instanspost.

5 – Säkerhetskopiera databas med hjälp av säkerhetskopiering av ögonblicksbilder

I det här avsnittet säkerhetskopierar du AdventureWorks2022-databasen på din virtuella Azure-dator med ögonblicksbildsäkerhetskopiering för att utföra en nästan omedelbar säkerhetskopiering med Azure-snapshots. Mer information om säkerhetskopieringar av ögonblicksbilder finns i File-Snapshot Säkerhetskopior för databasfiler i Azure

Följ dessa steg för att säkerhetskopiera AdventureWorks2022-databasen med hjälp av ögonblicksbildsäkerhetskopiering av filer:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn.

  3. Kopiera, klistra in och kör följande Transact-SQL skript i frågefönstret (stäng inte det här frågefönstret – du kör skriptet igen i steg 5. Med den här system lagrade proceduren kan du visa befintliga säkerhetskopior av ögonblicksbilder för varje fil som består av en angiven databas. Du kommer att märka att det inte finns några säkerhetskopieringar av ögonblicksbilder för den här databasen.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1 och kör sedan det här skriptet. Observera hur snabbt säkerhetskopieringen sker.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. När du har kontrollerat att skriptet i steg 4 har körts korrekt kör du följande skript igen. Observera att operationen för att säkerhetskopiera fil-snapshots i steg 4 genererade fil-snapshots av både data och loggfilen.

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

    En skärmbild från SSMS av resultatet av fn_db_backup_file_snapshots som visar ögonblicksbilder.

  6. I Object Explorer expanderar du Databases-noden i sql Server-instansen på den virtuella Azure-datorn och kontrollerar att AdventureWorks2022-databasen har återställts till den här instansen (uppdatera noden efter behov).

  7. I Object Explorer ansluter du till Azure Storage.

  8. Expandera Containrar, expandera containern som du skapade i avsnitt 1 och kontrollera att AdventureWorks2022_Azure.bak från steg 4 ovan visas i den här containern, tillsammans med säkerhetskopian från avsnitt 3 och databasfilerna från avsnitt 4 (uppdatera noden efter behov).

    En skärmbild från Object Explorer i SSMS som visar säkerhetskopieringen av ögonblicksbilden i Azure.

6 – Generera aktivitets- och säkerhetskopieringslogg med hjälp av säkerhetskopiering av filögonblicksbilder

I det här avsnittet genererar du aktivitet i AdventureWorks2022-databasen och skapar regelbundet säkerhetskopior av transaktionsloggar med hjälp av säkerhetskopior av ögonblicksbilder. Mer information om hur du använder säkerhetskopieringar av ögonblicksbilder finns i File-Snapshot Säkerhetskopior för databasfiler i Azure.

Följ dessa steg för att generera aktivitet i AdventureWorks2022-databasen och regelbundet skapa säkerhetskopior av transaktionsloggar med hjälp av säkerhetskopieringar av filögonblicksbilder:

  1. Starta SSMS.

  2. Öppna två nya frågefönster och anslut var och en till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn.

  3. Kopiera, klistra in och kör följande Transact-SQL skript i ett av frågefönstren. Observera att tabellen Production.Location har 14 rader innan vi lägger till nya rader i steg 4.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. Kopiera och klistra in följande två Transact-SQL skript i de två separata frågefönstren. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1 och kör sedan skripten samtidigt i separata frågefönster. De här skripten tar ungefär sju minuter att slutföra.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count INT=1, @inner INT;
    WHILE @count < 400
       BEGIN
          BEGIN TRAN;
             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;
       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://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/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. Granska utdata från det första skriptet och observera att antalet sista rader nu är 29 939.

    En skärmbild från SSMS som visar en resultatuppsättning med radantalet 29 939.

  6. Granska utdata från det andra skriptet och observera att varje gång instruktionen SÄKERHETSKOPIERINGsLOGG körs så skapas två nya filögonblicksbilder, en ögonblicksbild av loggfilen och en ögonblicksbild av datafilen för totalt två ögonblicksbilder av filer för varje databasfil. När det andra skriptet har slutförts ser du att det nu finns totalt 16 ögonblicksbilder av filer, 8 för varje databasfil – en från instruktionen BACKUP DATABASE och en för varje körning av BACKUP LOG-instruktionen.

    En skärmbild från SSMS som visar resultatuppsättningen för ögonblicksbildshistorik för säkerhetskopiering.

  7. I Object Explorer ansluter du till Azure Storage.

  8. Expandera Containrar, expandera containern som du skapade i avsnitt 1 och kontrollera att sju nya säkerhetskopieringsfiler visas tillsammans med datafilerna från föregående avsnitt (uppdatera noden efter behov).

    En skärmbild från Object Explorer i SSMS med flera ögonblicksbilder i Azure Container.

7 – Återställa en databas till en tidpunkt

I det här avsnittet återställer du AdventureWorks2022-databasen till en tidpunkt mellan två av säkerhetskopiorna i transaktionsloggen.

Med traditionella säkerhetskopior, för att åstadkomma återställning till tidpunkt, skulle du behöva använda den fullständiga databassäkerhetskopian, kanske en differentiell säkerhetskopia, och alla transaktionsloggfiler fram till och precis förbi den tidpunkt som du vill återställa till. Med ögonblicksbildkopior av filer behöver du bara de två intilliggande loggsäkerhetskopiorna som anger tidsgränserna för den tidpunkt du vill återställa till. Du behöver bara två säkerhetskopieringsuppsättningar för ögonblicksbilder av loggfiler eftersom varje loggsäkerhetskopia skapar en ögonblicksbild av varje databasfil (varje datafil och loggfilen).

Följ dessa steg för att återställa en databas till en angiven tidpunkt från säkerhetskopieringsuppsättningar för ögonblicksbilder av filer:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn.

  3. Kopiera, klistra in och kör följande Transact-SQL skript i frågefönstret. Kontrollera att tabellen Production.Location har 29 939 rader innan vi återställer den till en tidpunkt då det finns färre rader i steg 4.

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

    En skärmbild av SSMS-resultaten som visar ett radantal på 29 939.

  4. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Välj två intilliggande loggsäkerhetskopieringsfiler och konvertera filnamnet till det datum och den tid du behöver för det här skriptet. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1, ange namn på den första och andra säkerhetskopian, ange STOPAT-tiden i formatet "26 juni 2018 01:48" och kör sedan skriptet. Det tar några minuter att slutföra det här skriptet

    -- 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://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'
       WITH NORECOVERY,REPLACE;
    RESTORE LOG AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<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. Granska utdata. Observera att radantalet efter återställningen är 18 389, vilket är ett antal rader mellan loggsäkerhetskopiering 5 och 6 (antalet rader varierar).

    18-thousand-rows.JPG.

8 – Återställ som ny databas från loggbackup

I det här avsnittet kommer du att återställa databasen AdventureWorks2022 som en ny databas från en filögonblickssäkerhetskopia av transaktionsloggen.

I det här scenariot utför du en återställning till en SQL Server-instans på en annan virtuell dator för affärsanalys och rapportering. Genom att återställa till en annan instans på en annan virtuell dator avlastas arbetsbelastningen till en virtuell dator som är dedikerad och rätt dimensionerad för detta ändamål, vilket minskar resurskraven från transaktionssystemet.

Återställning från en säkerhetskopiering av transaktionsloggen med säkerhetskopiering av ögonblicksbilder är mycket snabb, betydligt snabbare än med traditionella säkerhetskopieringar av direktuppspelning. Med traditionella säkerhetskopieringar av direktuppspelning skulle du behöva använda den fullständiga databassäkerhetskopian, kanske en differentiell säkerhetskopia, och några eller alla säkerhetskopior av transaktionsloggen (eller en ny fullständig databassäkerhetskopia). Men med filögonblicksbild-loggsäkerhetskopior behöver du endast den senaste loggsäkerhetskopian (eller någon annan loggsäkerhetskopia eller två intilliggande loggsäkerhetskopior för att återställa till en tidpunkt mellan två loggsäkerhetskopieringstillfällen). För att vara tydlig behöver du bara en säkerhetskopieringsuppsättning för loggfilsögonblicksbilder eftersom varje säkerhetskopia av filögonblicksloggen skapar en ögonblicksbild av varje databasfil (varje datafil och loggfilen).

Följ dessa steg för att återställa en databas till en ny databas från en säkerhetskopia av transaktionsloggen med hjälp av säkerhetskopiering av ögonblicksbilder av filer:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på en virtuell Azure-dator.

    Notera

    Om det här är en annan virtuell Azure-dator än du har använt i föregående avsnitt kontrollerar du att du har följt stegen i 2 – Skapa en SQL Server-autentiseringsuppgift med hjälp av en signatur för delad åtkomst. Om du vill återställa till en annan container följer du stegen i 1 – Skapa lagrad åtkomstprincip och lagring med delad åtkomst för den nya containern.

  3. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Välj den loggsäkerhetskopieringsfil som du vill använda. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1, ange namnet på loggsäkerhetskopian och kör sedan det här skriptet.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'
        WITH MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Data.mdf'
       , MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Log.ldf'
       , RECOVERY
    --, REPLACE
    
  4. Granska utdata för att kontrollera att återställningen lyckades.

  5. I Object Explorer ansluter du till Azure Storage.

  6. Expandera Containrar, expandera containern som du skapade i avsnitt 1 (uppdatera om det behövs) och kontrollera att de nya data- och loggfilerna visas i containern, tillsammans med blobarna från föregående avsnitt.

    Skärmbild av SQL Server Management Studios lagringswebbläsare med Azure-containrar som visar data och loggfiler för den nya databasen.

9 – Hantera säkerhetskopieringsuppsättningar och filsnapshots-säkerhetskopior

I det här avsnittet tar du bort en säkerhetskopieringsuppsättning med hjälp av den systemlagrade proceduren sp_delete_backup (Transact-SQL). Den här system lagrade proceduren tar bort säkerhetskopieringsfilen och ögonblicksbilden av filen på varje databasfil som är associerad med den här säkerhetskopieringsuppsättningen.

Not

Om du försöker ta bort en säkerhetskopieringsuppsättning genom att helt enkelt ta bort säkerhetskopieringsfilen från Azure Blob Storage-containern tar du bara bort själva säkerhetskopieringsfilen – de associerade ögonblicksbilderna av filen kommer att finnas kvar. Om du befinner dig i det här scenariot, använder du systemfunktionen sys.fn_db_backup_file_snapshots (Transact-SQL) för att identifiera URL:en för de övergivna filögonblicksbilderna och använder systemproceduren sp_delete_backup_file_snapshot (Transact-SQL) för att ta bort varje övergiven filögonblicksbild. Mer information finns i File-Snapshot Backups for Database Files i Azure.

Följ dessa steg om du vill ta bort en uppsättning säkerhetskopieringar av ögonblicksbilder:

  1. Starta SSMS.

  2. Öppna ett nytt frågefönster och anslut till SQL Server-instansen av databasmotorn på den virtuella Azure-datorn (eller till valfri SQL Server-instans med behörighet att läsa och skriva på den här containern).

  3. Kopiera och klistra in följande Transact-SQL skript i frågefönstret. Välj den loggbackup som du vill ta bort och dess associerade ögonblicksbilder. Ändra URL:en på rätt sätt för lagringskontots namn och containern som du angav i avsnitt 1, ange namnet på loggsäkerhetskopian och kör sedan det här skriptet.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. I Object Explorer ansluter du till Azure Storage.

  5. Expandera Containrar, expandera containern som du skapade i avsnitt 1 och kontrollera att säkerhetskopieringsfilen som du använde i steg 3 inte längre visas i den här containern (uppdatera noden efter behov).

    Två skärmbilder av SQL Server Management Studios-lagringswebbläsaren som visar Azure-containrar och borttagningen av säkerhetskopieringsbloben för transaktionsloggen.

  6. Kopiera, klistra in och kör följande Transact-SQL-skript i frågefönstret för att verifiera att två snapshotfiler har tagits bort.

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

    Skärmbild av SSMS-resultatfönstret som visar två borttagna filögonblicksbilder.

10 – Ta bort resurser

När du är klar med den här självstudien, och för att spara resurser, se till att ta bort den resursgrupp som skapades i den här självstudien.

Om du vill ta bort resursgruppen kör du följande PowerShell-kod:

# 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

Nästa steg