Partilhar via


Tutorial: Usar o Armazenamento de Blob do Azure com o SQL Server

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

Este tutorial ajuda você a entender como usar o Armazenamento de Blob do Azure para arquivos de dados e backups no SQL Server 2016 e versões posteriores.

O suporte à integração do SQL Server para o Armazenamento de Blobs do Azure começou como um aprimoramento do SQL Server 2012 Service Pack 1 CU2 e foi aprimorado ainda mais com o SQL Server 2014 e o SQL Server 2016. Para obter uma visão geral da funcionalidade e dos benefícios do uso desse recurso, consulte Arquivos de dados do SQL Server no Microsoft Azure.

Este tutorial mostra como trabalhar com Arquivos de Dados do SQL Server no Armazenamento de Blobs do Azure em várias seções. Cada seção é focada em uma tarefa específica e as seções devem ser concluídas em sequência. Primeiro, você aprenderá como criar um novo contêiner no Armazenamento de Blobs com uma política de acesso armazenado e uma assinatura de acesso compartilhado. Em seguida, você aprenderá como criar uma credencial do SQL Server para integrar o SQL Server ao Armazenamento de Blobs do Azure. Em seguida, você fará backup de um banco de dados no Armazenamento de Blobs e o restaurará em uma máquina virtual do Azure. Em seguida, você usará o backup de log de transações de instantâneo de arquivo do SQL Server para restaurar para um ponto no tempo e para um novo banco de dados. Finalmente, o tutorial demonstrará o uso de procedimentos armazenados e funções do sistema de metadados para ajudá-lo a compreender e trabalhar com backups de instantâneos de ficheiro.

Pré-requisitos

Para concluir este tutorial, você deve estar familiarizado com os conceitos de backup e restauração do SQL Server e a sintaxe T-SQL.
Para usar este tutorial, você precisa de uma conta de armazenamento do Azure, do SQL Server Management Studio (SSMS), acesso a uma instância do SQL Server local, acesso a uma máquina virtual (VM) do Azure executando uma instância do SQL Server 2016 ou versão posterior e um banco de dados AdventureWorks2022. Além disso, a conta usada para emitir os comandos BACKUP e RESTORE deve estar na função db_backupoperator com permissões para alterar qualquer credencial .

Importante

O SQL Server não oferece suporte a de Armazenamento do Azure Data Lake , verifique se de namespace hierárquico não está habilitado na conta de armazenamento usada para este tutorial.

1 - Criar política de acesso armazenado e armazenamento de acesso compartilhado

Nesta seção, você usará um script de do Azure PowerShell para criar uma assinatura de acesso compartilhado em um contêiner de Armazenamento de Blobs do Azure usando uma política de acesso armazenado.

Observação

Este script foi escrito usando o Azure PowerShell 5.0.10586.

Uma assinatura de acesso compartilhado é um URI que concede direitos de acesso restrito a contêineres, blobs, filas ou tabelas. Uma política de acesso armazenado fornece um nível adicional de controle sobre assinaturas de acesso compartilhado no lado do servidor, incluindo revogação, expiração ou extensão do acesso. Ao usar esse novo aprimoramento, você precisa criar uma política em um contêiner com pelo menos direitos de leitura, gravação e lista.

Você pode criar uma política de acesso armazenado e uma assinatura de acesso compartilhado usando o Azure PowerShell, o SDK de Armazenamento do Azure, a API REST do Azure ou um utilitário de terceiros. Este tutorial demonstra como usar um script do Azure PowerShell para concluir essa tarefa. O script usa o modelo de implantação do Resource Manager e cria os seguintes novos recursos:

  • Grupo de recursos
  • Conta de armazenamento
  • Contentor de Armazenamento de Blobs do Azure
  • Política SAS

Este script começa declarando uma série de variáveis para especificar os nomes para os recursos acima e os nomes dos seguintes valores de entrada necessários:

  • Um nome de prefixo usado para nomear outros objetos de recurso
  • Nome da subscrição
  • Localização do centro de dados

O script é concluído gerando a instrução CREATE CREDENTIAL apropriada que você usará no 2 - Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado. Esta instrução é copiada para a área de transferência para você e é enviada para o console para você ver.

Para criar uma política no contêiner e gerar uma assinatura de acesso compartilhado (SAS), execute estas etapas:

  1. Abra o Windows PowerShell ou o Windows PowerShell ISE (consulte os requisitos de versão acima).

  2. Edite e execute o script abaixo:

    # 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. Após a conclusão do script, a instrução CREATE CREDENTIAL estará na área de transferência para uso na próxima seção.

2 - Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado

Nesta seção, você criará uma credencial para armazenar as informações de segurança que serão usadas pelo SQL Server para gravar e ler no contêiner de Armazenamento de Blob do Azure criado na etapa anterior.

Uma credencial do SQL Server é um objeto usado para armazenar informações de autenticação necessárias para se conectar a um recurso fora do SQL Server. A credencial armazena o caminho de URI do contêiner de Armazenamento de Blobs do Azure e a assinatura de acesso compartilhado para esse contêiner.

Para criar uma credencial do SQL Server, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em seu ambiente local.

  3. Na nova janela de consulta, cole a instrução CREATE CREDENTIAL com a assinatura de acesso compartilhado da seção 1 e execute esse script.

    O script será semelhante ao código a seguir.

    /* 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. Para ver todas as credenciais disponíveis, você pode executar a seguinte instrução em uma janela de consulta conectada à sua instância:

    SELECT * from sys.credentials
    
  5. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure.

  6. Na nova janela de consulta, cole a instrução CREATE CREDENTIAL com a assinatura de acesso compartilhado da seção 1 e execute esse script.

  7. Repita as etapas 5 e 6 para todas as instâncias adicionais do SQL Server que você deseja ter acesso ao contêiner.

3 - Cópia de segurança da base de dados para URL

Nesta seção, você fará backup do banco de dados AdventureWorks2022 em sua instância do SQL Server para o contêiner criado Seção 1.

Observação

Se desejar fazer backup de um banco de dados SQL Server 2012 (11.x) SP1 CU2+ ou um banco de dados SQL Server 2014 (12.x) para esse contêiner, você pode usar a sintaxe preterida documentada aqui fazer backup para URL usando a sintaxe WITH CREDENTIAL.

Para fazer backup de um banco de dados para armazenamento de blob, execute estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server em sua máquina virtual do Azure.

  3. Copie e cole o seguinte script Transact-SQL na janela de consulta. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1 e, em seguida, execute este script.

    -- 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. Abra o Pesquisador de Objetos e conecte-se ao armazenamento do Azure usando sua conta de armazenamento e chave de conta.

    1. Expanda Containers, expanda o contêiner que você criou na seção 1 e verifique se o backup da etapa 3 acima aparece nesse contêiner.

    Capturas de tela indicando o processo de várias etapas para se conectar à conta de Armazenamento do Azure.

4 - Restaurar banco de dados para máquina virtual a partir de URL

Nesta seção, você restaurará o banco de dados AdventureWorks2022 para sua instância do SQL Server em sua máquina virtual do Azure.

Observação

Para fins de simplicidade neste tutorial, estamos usando o mesmo contêiner para os dados e arquivos de log que usamos para o backup do banco de dados. Em um ambiente de produção, você provavelmente usaria vários contêineres e, com frequência, vários arquivos de dados também. Você também pode considerar dispersar o backup em vários blobs para aumentar o desempenho do backup ao fazer backup de um banco de dados de grande dimensão.

Para restaurar o banco de dados AdventureWorks2022 do Armazenamento de Blobs do Azure para sua instância do SQL Server em sua máquina virtual do Azure, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure.

  3. Copie e cole o seguinte script Transact-SQL na janela de consulta. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1 e, em seguida, execute este script.

    -- 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. Abra o Pesquisador de Objetos e conecte-se à sua instância do SQL Server do Azure.

  5. No Pesquisador de Objetos, expanda o nó Bancos de Dados e verifique se o banco de dados AdventureWorks2022 foi restaurado (atualize o nó conforme necessário)

    1. Clique com o botão direito do mouse AdventureWorks2022e selecione Propriedades.
    2. Selecione Arquivos e verifique se os caminhos para os dois arquivos de banco de dados são URLs apontando para blobs em seu contêiner de Armazenamento de Blobs do Azure (selecione Cancelar quando terminar).

    Capturas de ecrã do SQL Server Management Studio da base de dados [!INCLUDE [sssampledbobject-md](../includes/sssampledbobject-md.md)] na VM do Azure.

  6. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.

    1. Expanda Containers, expanda o contêiner que você criou na seção 1 e verifique se os AdventureWorks2022_Data.mdf e AdventureWorks2022_Log.ldf da etapa 3 acima aparecem nesse contêiner, juntamente com o arquivo de backup da seção 3 (atualize o nó conforme necessário).

    Captura de tela do Pesquisador de Objetos no SSMS mostrando os arquivos de dados dentro do contêiner no Azure abaixo de uma entrada de instância do SQL Server.

5 - Backup de banco de dados usando backup de instantâneo de arquivo

Nesta secção, fará uma cópia de segurança do banco de dados AdventureWorks2022 na sua máquina virtual do Azure, utilizando a cópia de segurança de instantâneos de ficheiro, para realizar um backup quase instantâneo com os instantâneos do Azure. Para obter mais informações sobre cópias de segurança de instantâneo de ficheiro, consulte File-Snapshot Cópias de Segurança para Ficheiros de Banco de Dados no Azure

Para fazer backup do banco de dados AdventureWorks2022 usando o backup de instantâneo de arquivo, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure.

  3. Copie, cole e execute o seguinte script Transact-SQL na janela de consulta (não feche esta janela de consulta - você executará esse script novamente na etapa 5. Este procedimento armazenado do sistema permite visualizar os backups de instantâneos de arquivos existentes para cada arquivo que compreende um banco de dados especificado. Você notará que não há backups de instantâneos de arquivos para esse banco de dados.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. Copie e cole o seguinte script Transact-SQL na janela de consulta. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1 e, em seguida, execute este script. Observe a rapidez com que esse backup ocorre.

    -- 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. Depois de verificar se o script na etapa 4 foi executado com êxito, execute o script a seguir novamente. Observe que a operação de backup de instantâneo de arquivo na etapa 4 gerou instantâneos de arquivo dos dados e do arquivo de log.

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

    Uma captura de tela do SSMS dos resultados do fn_db_backup_file_snapshots, mostrando instantâneos.

  6. No Pesquisador de Objetos, na sua instância do SQL Server na sua máquina virtual do Azure, expanda o nó Bancos de Dados e verifique se o banco de dados AdventureWorks2022 foi restaurado nesta instância (atualize o nó conforme necessário).

  7. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.

  8. Expanda Containers, expanda o contêiner que você criou na seção 1 e verifique se o AdventureWorks2022_Azure.bak da etapa 4 acima aparece nesse contêiner, juntamente com o arquivo de backup da seção 3 e os arquivos de banco de dados da seção 4 (atualize o nó conforme necessário).

    Uma captura de tela do Pesquisador de Objetos no SSMS mostrando o backup de instantâneo no Azure.

6 - Gerar atividade e registo de backup usando backup de instantâneo de arquivo

Nesta seção, gerará atividade no banco de dados AdventureWorks2022, criando periodicamente cópias de segurança do log de transações usando cópias instantâneas de ficheiro. Para obter mais informações sobre como usar backups de instantâneo de arquivo, consulte File-Snapshot Backups para Arquivos de Banco de Dados no Azure.

Para gerar atividade no banco de dados AdventureWorks2022 e criar periodicamente backups de log de transações usando backups de instantâneo de arquivo, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra duas novas janelas de consulta e conecte cada uma à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure.

  3. Copie, cole e execute o seguinte script Transact-SQL em uma das janelas de consulta. Observe que a tabela Production.Location tem 14 linhas antes de adicionarmos novas linhas na etapa 4.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. Copie e cole os dois scripts Transact-SQL a seguir nas duas janelas de consulta separadas. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1 e, em seguida, execute esses scripts simultaneamente em janelas de consulta separadas. Esses scripts levarão cerca de sete minutos para serem concluídos.

    -- 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. Revise a saída do primeiro script e observe que a contagem final de linhas agora é de 29.939.

    Uma captura de tela do SSMS mostrando um conjunto de resultados com contagem de linhas de 29.939.

  6. Analise a saída do segundo script e observe que cada vez que a instrução BACKUP LOG é executada, dois novos instantâneos de arquivo são criados, um instantâneo de arquivo do arquivo de log e um instantâneo de arquivo do arquivo de dados - para um total de dois instantâneos de arquivo para cada arquivo de banco de dados. Após a conclusão do segundo script, observe que agora há um total de 16 instantâneos de arquivo, 8 para cada arquivo de banco de dados - um da instrução BACKUP DATABASE e um para cada execução da instrução BACKUP LOG.

    Uma captura de tela do SSMS mostrando o conjunto de resultados do histórico de instantâneos de backup.

  7. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.

  8. Expanda Containers, expanda o contêiner que você criou na seção 1 e verifique se sete novos arquivos de backup aparecem, juntamente com os arquivos de dados das seções anteriores (atualize o nó conforme necessário).

    Uma captura de tela do Pesquisador de Objetos no SSMS com vários instantâneos no Contêiner do Azure.

7 - Restaurar um banco de dados para um ponto no tempo

Nesta seção, você restaurará o banco de dados AdventureWorks2022 para um ponto no tempo entre dois dos backups do log de transações.

Com backups tradicionais, para realizar a restauração a um ponto específico no tempo, necessita de usar o backup completo do banco de dados, talvez um backup diferencial, e todos os arquivos de log de transações até e imediatamente após o ponto no tempo para o qual deseja restaurar. Com backups de instantâneos de arquivo, só precisa dos dois arquivos de backup de log adjacentes que fornecem os pontos de referência que delimitam o tempo para o qual deseja restaurar. Você só precisa de dois conjuntos de backup de instantâneo de arquivo de log porque cada backup de log cria um instantâneo de arquivo de cada arquivo de banco de dados (cada arquivo de dados e o arquivo de log).

Para restaurar um banco de dados para um momento específico a partir de conjuntos de backup de momentos instantâneos de arquivo, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure.

  3. Copie, cole e execute o seguinte script Transact-SQL na janela de consulta. Verifique se a tabela Production.Location tem 29.939 linhas antes de restaurá-la para um ponto no tempo em que há menos linhas na etapa 4.

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

    Uma captura de ecrã dos resultados do SSMS que mostra uma contagem de linhas de 29 939.

  4. Copie e cole o seguinte script Transact-SQL na janela de consulta. Selecione dois arquivos de backup de log adjacentes e converta o nome do arquivo na data e hora necessárias para este script. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1, forneça o primeiro e o segundo nomes de arquivo de backup, forneça a hora STOPAT no formato "26 de junho de 2018 13:48" e execute este script. Este script levará alguns minutos para ser concluído

    -- 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. Analise a saída. Observe que, após a restauração, a contagem de linhas é 18.389, que é um número de contagem de linhas entre o backup de log 5 e 6 (sua contagem de linhas variará).

    18-thousand-rows.JPG.

8 - Restaurar como nova base de dados a partir do backup de log

Nesta seção, você restaurará o banco de dados AdventureWorks2022 como um novo banco de dados a partir de um backup de log de transações de instantâneo de arquivo.

Nesse cenário, você está executando uma restauração para uma instância do SQL Server em uma máquina virtual diferente para fins de análise de negócios e relatórios. Restaurar para uma instância diferente numa máquina virtual distinta transfere a carga de trabalho para uma máquina virtual dedicada e dimensionada para este propósito, eliminando os requisitos de recursos do sistema transacional.

A restauração a partir de um backup de log de transações com backup de instantâneo de arquivo é muito rápida, substancialmente mais rápida do que com backups de streaming tradicionais. Com backups de streaming tradicionais, você precisaria usar o backup completo do banco de dados, talvez um backup diferencial e alguns ou todos os backups do log de transações (ou um novo backup completo do banco de dados). No entanto, com backups de log de instantâneo de arquivo, você só precisa do backup de log mais recente (ou qualquer outro backup de log ou quaisquer dois backups de log adjacentes para restauração point-in-time até um ponto entre dois tempos de backup de log). Para esclarecer, você só precisa de um conjunto de backup de instantâneo de ficheiro de log porque cada backup de instantâneo de ficheiro de log cria um instantâneo de ficheiro de cada ficheiro de base de dados (cada ficheiro de dados e o ficheiro de log).

Para restaurar um banco de dados para um novo banco de dados a partir de um backup de log de transações usando o backup de instantâneo de arquivo, execute estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em uma máquina virtual do Azure.

    Observação

    Se esta for uma máquina virtual do Azure diferente da que você tem usado nas seções anteriores, certifique-se de ter seguido as etapas no 2 - Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado. Se desejar restaurar para um contentor diferente, siga os passos no 1 - Criar política de acesso armazenado e armazenamento de acesso partilhado para o novo contentor.

  3. Copie e cole o seguinte script Transact-SQL na janela de consulta. Selecione o arquivo de backup de log que deseja usar. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1, forneça o nome do arquivo de backup de log e execute este script.

    -- 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. Verifique o resultado para confirmar se a restauração foi bem-sucedida.

  5. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.

  6. Expanda Containers, expanda o contêiner que você criou na seção 1 (atualize se necessário) e verifique se os novos dados e arquivos de log aparecem no contêiner, juntamente com os blobs das seções anteriores.

    Captura de tela do navegador de armazenamento do SQL Server Management Studio de contêineres do Azure mostrando os dados e os arquivos de log para o novo banco de dados.

9 - Gerencie conjuntos de backup e backups de instantâneos de arquivos

Nesta secção, será excluído um conjunto de backup utilizando o procedimento armazenado do sistema sp_delete_backup (Transact-SQL). Este procedimento armazenado do sistema elimina o ficheiro de backup e a captura instantânea de ficheiro de cada ficheiro de base de dados associado a este conjunto de backup.

Observação

Se você tentar excluir um conjunto de backup simplesmente excluindo o arquivo de backup do contêiner de Armazenamento de Blob do Azure, excluirá apenas o próprio arquivo de backup - os instantâneos de arquivo associados permanecerão. Se se encontrar nesse cenário, utilize a função de sistema sys.fn_db_backup_file_snapshots (Transact-SQL) para identificar a URL dos instantâneos de ficheiros órfãos e utilize o procedimento armazenado de sistema sp_delete_backup_file_snapshot (Transact-SQL) para excluir cada instantâneo de ficheiro órfão. Para obter mais informações, consulte File-Snapshot Backups para arquivos de banco de dados no Azure.

Para eliminar um conjunto de backups de instantâneos de ficheiros, siga estas etapas:

  1. Inicie o SSMS.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados em sua máquina virtual do Azure (ou a qualquer instância do SQL Server com permissões para ler e gravar nesse contêiner).

  3. Copie e cole o seguinte script Transact-SQL na janela de consulta. Selecione o backup de log que deseja excluir, juntamente com seus instantâneos de arquivo associados. Modifique a URL apropriadamente para o nome da conta de armazenamento e o contêiner especificado na seção 1, forneça o nome do arquivo de backup de log e execute este script.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.

  5. Expanda Containers, expanda o contêiner que você criou na seção 1 e verifique se o arquivo de backup usado na etapa 3 não aparece mais nesse contêiner (atualize o nó conforme necessário).

    Duas capturas de tela do navegador de armazenamento do SQL Server Management Studios mostrando contêineres do Azure e a exclusão do blob de backup do log de transações.

  6. Copie, cole e execute o seguinte script Transact-SQL na janela de consulta para verificar se dois instantâneos de arquivo foram excluídos.

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

    Captura de tela do painel de resultados do SSMS mostrando dois instantâneos de arquivo excluídos.

10 - Remover recursos

Depois de concluir este tutorial, e para conservar recursos, certifique-se de excluir o grupo de recursos criado neste tutorial.

Para excluir o grupo de recursos, execute o seguinte código do PowerShell:

# 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

Próximos passos