Tutorial: Usar o serviço de Armazenamento de Blobs do Azure com o SQL Server 2016Tutorial: Use Azure Blob storage service with SQL Server 2016

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Bem-vindo ao tutorial “Trabalhando com o SQL Server 2016 no serviço de Armazenamento de Blobs do Microsoft Azure”.Welcome to the Working with SQL Server 2016 in Microsoft Azure Blob Storage service tutorial. Este tutorial o ajudará a entender como usar o serviço de armazenamento de Blobs do Microsoft Azure para arquivos de dados e backups do SQL Server.This tutorial helps you understand how to use the Microsoft Azure Blob storage service for SQL Server data files and SQL Server backups.

O suporte da integração do SQL Server no serviço de armazenamento de Blobs do Microsoft Azure começou como uma melhoria do SQL Server 2012 Service Pack 1 CU2 e foi aprimorado ainda mais com o SQL Server 2014 e SQL Server 2016.SQL Server integration support for the Microsoft Azure Blob storage service began as a SQL Server 2012 Service Pack 1 CU2 enhancement, and has been enhanced further with SQL Server 2014 and SQL Server 2016. Para obter uma visão geral da funcionalidade e dos benefícios do uso desse recurso, confira Arquivos de dados do SQL Server no Microsoft Azure.For an overview of the functionality and benefits of using this feature, see SQL Server Data Files in Microsoft Azure. Para uma demonstração ao vivo, confira Demonstração da recuperação pontual.For a live demo, see Demo of Point in Time Restore.

Este tutorial mostra como trabalhar com arquivos de dados do SQL Server no serviço de Armazenamento de Blobs do Microsoft Azure em várias seções.This tutorial shows you how to work with SQL Server Data Files in Microsoft Azure Blob storage service in multiple sections. Cada seção é centrada em uma tarefa específica e as seções devem ser concluídas na sequência.Each section is focused on a specific task and the sections should be completed in sequence. Primeiro, você aprenderá a criar um novo contêiner no armazenamento de Blobs com uma política de acesso armazenado e uma assinatura de acesso compartilhado.First, you will learn how to create a new container in Blob storage with a stored access policy and a shared access signature. Em seguida, você aprenderá a criar uma credencial do SQL Server para integrar o SQL Server com o Armazenamento de Blobs do Azure.Then, you will learn how to create a SQL Server credential to integrate SQL Server with Azure Blob storage. Em seguida, você vai fazer backup de um banco de dados no armazenamento de Blobs e restaurá-lo em uma máquina virtual do Azure.Next, you will back up a database to Blob storage and restore it to an Azure virtual machine. Depois, você vai usar o backup de log de transações de instantâneo de arquivo do SQL Server 2016 para restaurá-lo em um ponto específico e em um novo banco de dados.You will then use SQL Server 2016 file-snapshot transaction log backup to restore to a point in time and to a new database. Por fim, o tutorial demonstrará o uso dos procedimentos armazenados e funções do sistema de metadados para ajudá-lo a entender e trabalhar com backups de instantâneo de arquivo.Finally, the tutorial will demonstrate the use of meta data system stored procedures and functions to help you understand and work with file-snapshot backups.

PrerequisitesPrerequisites

Para concluir este tutorial, você deve estar familiarizado com os conceitos de backup e restauração do SQL ServerSQL Server e a sintaxe do T-SQL.To complete this tutorial, you must be familiar with SQL ServerSQL Server backup and restore concepts and T-SQL syntax. Para usar este tutorial, você precisa de uma conta de Armazenamento do Azure, o SSMS (SQL Server Management Studio), acesso a uma instância local do SQL Server, acesso a uma VM (máquina virtual) do Azure que execute o SQL Server 2016 e um banco de dados AdventureWorks2016.To use this tutorial, you need an Azure storage account, SQL Server Management Studio (SSMS), access to an instance of SQL Server on-premises, access to an Azure virtual machine (VM) running SQL Server 2016, and an AdventureWorks2016 database. Além disso, a conta de usuário usada para emitir os comandos BACKUP e RESTORE deve estar na função de banco de dados db_backupoperator com as permissões Alterar qualquer credencial.Additionally, the account used to issue the BACKUP and RESTORE commands should be in the db_backupoperator database role with alter any credential permissions.

Somos todos ouvidos: Se você encontrar algo desatualizado ou incorreto neste artigo, como uma etapa ou um exemplo de código, informe-nos.We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. Você pode clicar no botão Esta página na seção Comentários na parte inferior desta página.You can click the This page button in the Feedback section at the bottom of this page. Lemos todos os itens de comentários sobre o SQL, normalmente no dia seguinte.We read every item of feedback about SQL, typically the next day. Obrigado.Thanks.

1 – Criar uma política de acesso armazenado e um armazenamento de acesso compartilhado1 - Create stored access policy and shared access storage

Nesta seção, você usará um script do Azure PowerShell para criar uma assinatura de acesso compartilhado em um contêiner de Blobs do Azure usando uma política de acesso armazenado.In this section, you will use an Azure PowerShell script to create a shared access signature on an Azure Blob container using a stored access policy.

Observação

Esse script é escrito com o Azure PowerShell 5.0.10586.This script is written using 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.A shared access signature is a URI that grants restricted access rights to containers, blobs, queues, or tables. Uma política de acesso armazenado fornece um nível adicional de controle sobre as assinaturas de acesso compartilhado do servidor, incluindo revogação, expiração ou extensão do acesso.A stored access policy provides an additional level of control over shared access signatures on the server side including revoking, expiring, or extending access. Ao usar essa nova melhoria, você precisa criar uma política em um contêiner com direitos de leitura, gravação e lista.When using this new enhancement, you need to create a policy on a container with at least read, write, and list rights.

Você pode criar uma política de acesso armazenado e uma assinatura de acesso compartilhado usando o Azure PowerShell, o SDK do Armazenamento do Azure, a API REST do Azure ou um utilitário de terceiros.You can create a stored access policy and a shared access signature by using Azure PowerShell, the Azure Storage SDK, the Azure REST API, or a third-party utility. Este tutorial demonstra como usar um script do Azure PowerShell para concluir esta tarefa.This tutorial demonstrates how to use an Azure PowerShell script to complete this task. O script usa o modelo de implantação do Resource Manager e cria os seguintes novos recursosThe script uses the Resource Manager deployment model and creates the following new resources

  • Grupo de recursosResource group
  • Conta de armazenamentoStorage account
  • Contêiner de blobs do AzureAzure blob container
  • Política do SASSAS policy

Esse script começa declarando diversas variáveis para especificar os nomes dos recursos acima e os nomes dos seguintes valores de entrada necessários:This script starts by declaring a number of variables to specify the names for the above resources and the names of the following required input values:

  • Um nome de prefixo usado na nomeação de outros objetos de recursoA prefix name used in naming other resource objects
  • Nome da assinaturaSubscription name
  • Local do datacenterData center location

O script é concluído com a geração da instrução CREATE CREDENTIAL apropriada que você usará em 2 – Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado.The script completes by generating the appropriate CREATE CREDENTIAL statement that you will use in 2 - Create a SQL Server credential using a shared access signature. Essa instrução é copiada na área de transferência para você e é gerada no console para exibição.This statement is copied to your clipboard for you and is output to the console for you to see.

Para criar uma política no contêiner e gerar uma chave SAS (Assinatura de Acesso Compartilhado), siga estas etapas:To create a policy on the container and generate a Shared Access Signature (SAS) key, follow these steps:

  1. Abra a janela do Windows PowerShell ou o ISE do Windows PowerShell (consulte os requisitos de versão acima).Open Window PowerShell or Windows PowerShell ISE (see version requirements above).

  2. Edite e execute o script b:Edit and then execute the b script:

    # 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á localizada na área de transferência para uso na próxima seção.After the script completes, the CREATE CREDENTIAL statement will be in your clipboard for use in the next section.

2 – Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado2 - Create a SQL Server credential using a shared access signature

Nesta seção, você aprenderá a criar uma credencial para armazenar as informações de segurança que serão usadas pelo SQL Server para gravar e ler o contêiner do Azure criado na etapa anterior.In this section, you will create a credential to store the security information that will be used by SQL Server to write to and read from the Azure container that you created in the previous step.

Uma credencial do SQL Server é um objeto usado para armazenar as informações de autenticação necessárias para se conectar a um recurso fora do SQL Server.A SQL Server credential is an object that is used to store authentication information required to connect to a resource outside of SQL Server. A credencial armazena o caminho de URI do contêiner de armazenamento e a assinatura de acesso compartilhado desse contêiner.The credential stores the URI path of the storage container and the shared access signature for this container.

Para criar uma credencial do SQL Server, siga estas etapas:To create a SQL Server credential, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server do mecanismo de banco de dados no ambiente local.Open a new query window and connect to the SQL Server instance of the database engine in your on-premises environment.

  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.In the new query window, paste the CREATE CREDENTIAL statement with the shared access signature from section 1 and execute that script.

    O script será parecido com o código a seguir.The script will look like the following code.

    /* 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:To see all available credentials, you can run the following statement in a query window connected to your instance:

    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 na máquina virtual do Azure.Open a new query window and connect to the SQL Server instance of the database engine in your Azure virtual machine.

  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.In the new query window, paste the CREATE CREDENTIAL statement with the shared access signature from section 1 and execute that script.

  7. Repita as etapas 5 e 6 para todas as outras instâncias do SQL Server às quais você quer conceder acesso ao contêiner do Azure.Repeat steps 5 and 6 for any additional SQL Server instances that you wish to have access to the Azure container.

3 – Backup de banco de dados em URL3 - Database backup to URL

Nesta seção, você fará backup do banco de dados AdventureWorks2016 na sua instância local do SQL Server 2016 no contêiner do Azure criado na Seção 1.In this section, you will back up the AdventureWorks2016 database in your on-premises SQL Server 2016 instance to the Azure container that you created in Section 1.

Observação

Se quiser fazer backup de um banco de dados SQL Server 2012 SP1 CU2 ou posterior ou SQL Server 2014 nesse contêiner do Azure, você poderá usar a sintaxe preterida documentada aqui para fazer backup na URL usando a sintaxe WITH CREDENTIAL.If you wish to backup a SQL Server 2012 SP1 CU2 or later database or a SQL Server 2014 database to this Azure container, you can use the deprecated syntax documented here to backup to URL using the WITH CREDENTIAL syntax.

Para fazer backup de um banco de dados no armazenamento de Blobs, siga estas etapas:To back up a database to Blob storage, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Modifique a URL de forma adequada para o nome de sua conta de armazenamento e o contêiner especificado na Seção 1 e execute este script.Modify the URL appropriately for your storage account name and the container that you specified in section 1 and then execute this script.

    
    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.  
    USE master;  
    ALTER DATABASE AdventureWorks2016  
       SET RECOVERY FULL;  
    
    -- Back up the full AdventureWorks2016 database to the container that you created in section 1  
    BACKUP DATABASE AdventureWorks2016   
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_onprem.bak'  
    
    
  4. Abra o Pesquisador de Objetos e conecte-se ao armazenamento do Azure usando sua conta de armazenamento e a chave de conta.Open Object Explorer and connect to Azure storage using your storage account and account key.

    1. Expanda Contêineres, expanda o contêiner criado na seção 1 e verifique se o backup da etapa 3 acima é exibido nesse contêiner.Expand Containers, expand the container that you created in section 1 and verify that the backup from step 3 above appears in this container.

Conectar a uma conta de Armazenamento do Azure

4 – Restaurar o banco de dados na máquina virtual por meio da URL4 - Restore database to virtual machine from URL

Nesta seção, você restaurará o banco de dados AdventureWorks2016 na instância do SQL Server 2016 na máquina virtual do Azure.In this section, you will restore the AdventureWorks2016 database to your SQL Server 2016 instance in your Azure virtual machine.

Observação

Para fins de simplicidade neste tutorial, estamos usando o mesmo contêiner para os arquivos de log e de dados que foram usados para o backup do banco de dados.For the purposes of simplicity in this tutorial, we are using the same container for the data and log files that we used for the database backup. Em um ambiente de produção, provavelmente, você usará vários contêineres e, com frequência, vários arquivos de dados também.In a production environment, you would likely use multiple containers, and frequently multiple data files as well. Com o SQL Server 2016, você poderá também considerar a distribuição do backup em vários blobs, a fim de aumentar o desempenho do backup ao fazer backup de um banco de dados grande.With SQL Server 2016, you could also consider striping your backup across multiple blobs to increase backup performance when backing up a large database.

Para restaurar o banco de dados AdventureWorks2016 do Armazenamento de Blobs do Azure para a instância do SQL Server 2016 na máquina virtual do Azure, siga estas etapas:To restore the AdventureWorks2016 database from Azure blob storage to your SQL Server 2016 instance in your Azure virtual machine, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Modifique a URL de forma adequada para o nome de sua conta de armazenamento e o contêiner especificado na Seção 1 e execute este script.Modify the URL appropriately for your storage account name and the container that you specified in section 1 and then execute this script.

    -- Restore AdventureWorks2016 from URL to SQL Server instance using Azure blob storage for database files  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_onprem.bak'   
       WITH  
          MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Data.mdf'  
         ,MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Log.ldf'  
    --, REPLACE  
    
    
  4. Abra o Pesquisador de Objetos e conecte-se à instância do Azure SQL Server 2016.Open Object Explorer and connect to your Azure SQL Server 2016 instance.

  5. No Pesquisador de Objetos, expanda o nó Bancos de Dados e verifique se o banco de dados AdventureWorks2016 foi restaurado (atualize o nó, conforme necessário)In Object Explorer, expand the Databases node and verify that the AdventureWorks2016 database has been restored (refresh the node as necessary)

    1. Clique com o botão direito do mouse no AdventureWorks2016 e selecione Propriedades.Right-click AdventureWorks2016, and select Properties.
    2. Selecione Arquivos e verifique se os caminhos para os dois arquivos de banco de dados são URLs que apontam para blobs no seu contêiner de blogs do Azure (selecione Cancelar ao concluir).Select Files and verify that the paths for the two database files are URLs pointing to blobs in your Azure blog container(select Cancel when done).

    Banco de dados AdventureWorks em VM do Azure

  6. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.In Object Explorer, connect to Azure storage.

    1. Expanda Contêineres, expanda o contêiner criado na seção 1 e verifique se o AdventureWorks2016_Data.mdf e o AdventureWorks2016_Log.ldf da etapa 3 acima são exibidos nesse contêiner, juntamente com o arquivo de backup da seção 3 (atualize o nó, conforme necessário).Expand Containers, expand the container that you created in section 1 and verify that the AdventureWorks2016_Data.mdf and AdventureWorks2016_Log.ldf from step 3 above appears in this container, along with the backup file from section 3 (refresh the node as necessary).

Arquivos de dados dentro do contêiner no Azure

5 – Fazer backup do banco de dados usando o backup de instantâneo de arquivo5 - Backup database using file-snapshot backup

Nesta seção, você fará backup do banco de dados AdventureWorks2016 na máquina virtual do Azure usando o backup de instantâneo de arquivo para executar um backup quase instantâneo usando instantâneos do Azure.In this section, you will back up the AdventureWorks2016 database in your Azure virtual machine using file-snapshot backup to perform a nearly instantaneous backup using Azure snapshots. Para obter mais informações sobre backups de instantâneo, veja Backups de instantâneo de arquivo para arquivos de banco de dados no AzureFor more information on file-snapshot backups, see File-Snapshot Backups for Database Files in Azure

Para fazer backup do banco de dados AdventureWorks2016 usando o backup de instantâneo de arquivo, siga estas etapas:To back up the AdventureWorks2016 database using file-snapshot backup, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Copie, cole e execute o script Transact-SQL a seguir na janela de consulta (não feche esta janela de consulta – você executará esse script novamente na etapa 5).Copy, paste, and execute the following Transact-SQL script into the query window (do not close this query window - you will execute this script again in step 5. Esse procedimento armazenado do sistema permite exibir os backups de instantâneo de arquivo existentes de cada arquivo que consiste em um banco de dados especificado.This system stored procedure enables you to view the existing file snapshot backups for each file that comprises a specified database. Você observará que não há nenhum backup de instantâneo de arquivo desse banco de dados.You will notice that there are no file snapshot backups for this database.

    -- Verify that no file snapshot backups exist  
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
    
  4. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Modifique a URL de forma adequada para o nome de sua conta de armazenamento e o contêiner especificado na Seção 1 e execute este script.Modify the URL appropriately for your storage account name and the container that you specified in section 1 and then execute this script. Observe como o backup ocorre rapidamente.Notice how quickly this backup occurs.

    -- Backup the AdventureWorks2016 database with FILE_SNAPSHOT  
    BACKUP DATABASE AdventureWorks2016   
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Azure.bak'   
       WITH FILE_SNAPSHOT;    
    
  5. Depois de verificar se o script da etapa 4 foi executado com êxito, execute novamente o script a seguir.After verifying that the script in step 4 executed successfully, execute the following script again. Observe que a operação de backup de instantâneo de arquivo da etapa 4 gerou instantâneos de arquivo dos dados e do arquivo de log.Notice that the file-snapshot backup operation in step 4 generated file-snapshots of both the data and log file.

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

    Resultados de fn_db_backup_file_snapshots mostrando instantâneos

  6. No Pesquisador de Objetos, na instância do SQL Server 2016 na máquina virtual do Azure, expanda o nó Bancos de Dados e verifique se o banco de dados AdventureWorks2016 foi restaurado para essa instância (atualize o nó, conforme necessário).In Object Explorer, in your SQL Server 2016 instance in your Azure virtual machine, expand the Databases node and verify that the AdventureWorks2016 database has been restored to this instance (refresh the node as necessary).

  7. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.In Object Explorer, connect to Azure storage.

  8. Expanda Contêineres, expanda o contêiner criado na seção 1 e verifique se o AdventureWorks2016_Azure.bak da etapa 4 acima é exibido 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).Expand Containers, expand the container that you created in section 1 and verify that the AdventureWorks2016_Azure.bak from step 4 above appears in this container, along with the backup file from section 3 and the database files from section 4 (refresh the node as necessary).

    Backup de instantâneo no Azure

6 – Gerar log de atividade e de backup usando o backup de instantâneo de arquivo6 - Generate activity and backup log using file-snapshot backup

Nesta seção, você gerará atividade no banco de dados AdventureWorks2016 e criará periodicamente backups de log de transações usando backups de instantâneo de arquivo.In this section, you will generate activity in the AdventureWorks2016 database and periodically create transaction log backups using file-snapshot backups. Para obter mais informações sobre como usar backups de instantâneo de arquivo, veja Backups de instantâneo de arquivo para arquivos de banco de dados no Azure.For more information on using file snapshot backups, see File-Snapshot Backups for Database Files in Azure.

Para gerar atividade no banco de dados AdventureWorks2016 e criar periodicamente backups de log de transações usando backups de instantâneo de arquivo, siga estas etapas:To generate activity in the AdventureWorks2016 database and periodically create transaction log backups using file-snapshot backups, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra duas novas janelas de consulta e conecte cada uma delas à instância do SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure.Open two new query windows and connect each to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Copie, cole e execute o script Transact-SQL a seguir em uma das janelas de consulta.Copy, paste, and execute the following Transact-SQL script into one of the query windows. Observe que a tabela Production.Location tem 14 linhas antes de adicionarmos novas linhas na etapa 4.Notice that the Production.Location table has 14 rows before we add new rows in step 4.

    -- Verify row count at start  
    SELECT COUNT (*) from AdventureWorks2016.Production.Location;    
    
  4. Copie e cole os dois scripts Transact-SQL a seguir em duas janelas de consulta separadas.Copy and paste the following two Transact-SQL scripts into the two separate query windows. Modifique a URL de forma adequada para o nome da sua conta de armazenamento e o contêiner especificado na seção 1 e execute estes scripts simultaneamente em janelas de consulta separadas.Modify the URL appropriately for your storage account name and the container that you specified in section 1 and then execute these scripts simultaneously in separate query windows. Esses scripts levarão cerca de sete minutos para serem concluídos.These scripts will take about seven minutes to complete.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2014 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 AdventureWorks2016.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 AdventureWorks2014.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 AdventureWorks2016.Production.Location);  
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';  
             BACKUP LOG AdventureWorks2016 TO URL = @device WITH FILE_SNAPSHOT;  
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
          WAITFOR DELAY '00:1:00';   
             SET @count = @count + 1;  
       END;  
    
  5. Examine a saída do primeiro script e observe que a contagem de linhas final agora é de 29.939.Review the output of the first script and notice that final row count is now 29,939.

    A contagem de linhas 29.939 é exibida

  6. Examine a saída do segundo script e observe que sempre que a instrução BACKUP LOG é executada, são criados dois novos instantâneos de arquivo: um instantâneo de arquivo do arquivo de log e um instantâneo de arquivo do arquivo de dados – em um total de dois instantâneos de arquivo para cada arquivo de banco de dados.Review the output of the second script and notice that each time the BACKUP LOG statement is executed that two new file snapshots are created, one file snapshot of the log file and one file snapshot of the data file - for a total of two file snapshots for each database file. 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.After the second script completes, notice that there are now a total of 16 file snapshots, 8 for each database file - one from the BACKUP DATABASE statement and one for each execution of the BACKUP LOG statement.

Resultados de instantâneo de backup

  1. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.In Object Explorer, connect to Azure storage.

  2. Expanda Contêineres, expanda o contêiner criado na seção 1 e verifique se sete novos arquivos de backup são exibidos, juntamente com os arquivos de dados das seções anteriores (atualize o nó, conforme necessário).Expand Containers, expand the container that you created in section 1 and verify that seven new backup files appear, along with the data files from the previous sections (refresh the node as needed).

    Vários instantâneos no Contêiner do Azure

7 – Restaurar um banco de dados para um momento determinado7 - Restore a database to a point in time

Nesta seção, você aprenderá a restaurar o banco de dados AdventureWorks2016 para um ponto específico entre dois backups de log de transações.In this section, you will restore the AdventureWorks2016 database to a point in time between two of the transaction log backups.

Com backups tradicionais, para realizar a restauração pontual, você precisaria usar o backup do banco de dados completo, talvez um backup diferencial, e todos os arquivos de log de transações incluindo e logo após o ponto específico para o qual você quer restaurar.With traditional backups, to accomplish point in time restore, you would need to use the full database backup, perhaps a differential backup, and all of the transaction log files up to and just past the point in time to which you wish to restore. Com os backups de instantâneo de arquivo, você só precisa de dois arquivos de backup de log de transações adjacentes que fornecem as metas que enquadram o tempo para o qual você quer restaurar.With file-snapshot backups, you only need the two adjacent log backup files that provide the goal posts framing the time to which you wish to restore. Você só precisa dois conjuntos de backup de instantâneo de arquivo de log, pois 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).You only need two log file snapshot backup sets because each log backup creates a file snapshot of each database file (each data file and the log file).

Para restaurar um banco de dados para um ponto específico por meio de conjuntos de backup de instantâneo de arquivo, siga estas etapas:To restore a database to a specified point in time from file snapshot backup sets, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Copie, cole e execute o script Transact-SQL a seguir na janela de consulta.Copy, paste, and execute the following Transact-SQL script into the query window. Verifique se a tabela Production.Location tem 29.939 linhas antes de restaurarmos para um ponto específico quando há menos linhas na etapa 5.Verify that the Production.Location table has 29,939 rows before we restore it to a point in time when there are fewer rows in step 5.

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

    A contagem de linhas 29.939 é exibida

  4. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Selecione dois arquivos de backup de log adjacentes e converta o nome de arquivo na data e hora de que você precisará para esse script.Select two adjacent log backup files and convert the file name into the date and time you will need for this script. Modifique a URL de forma adequada para o nome de sua conta de armazenamento e o contêiner especificado na seção 1, forneça os nomes do primeiro e segundo arquivos de backup, forneça a hora STOPAT no formato “26 de junho, 2018 01:48 PM” e execute este script.Modify the URL appropriately for your storage account name and the container that you specified in section 1, provide the first and second backup file names, provide the STOPAT time in the format of "June 26, 2018 01:48 PM" and then execute this script. Esse script levará alguns minutos para ser concluídoThis script will take a few minutes to complete

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count  
    ALTER DATABASE AdventureWorks2016 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'   
       WITH NORECOVERY,REPLACE;  
    RESTORE LOG AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'    
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';  
    ALTER DATABASE AdventureWorks2016 set multi_user;  
    -- get new count  
    SELECT COUNT (*) FROM AdventureWorks2016.Production.Location ;
    
  5. Examine a saída.Review the output. 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 (a contagem de linhas poderá variar).Notice that after the restore the row count is 18,389, which is a row count number between log backup 5 and 6 (your row count will vary).

    18-thousand-rows.JPG

8 – Restaurar como um novo banco de dados por meio do backup de log de transações8 - Restore as new database from log backup

Nesta seção, você aprenderá a restaurar o banco de dados AdventureWorks2016 como um novo banco de dados por meio de um backup de log de transações de instantâneo de arquivo.In this section, you will restore the AdventureWorks2016 database as a new database from a file-snapshot transaction log backup.

Nesse cenário, você realiza uma restauração de uma instância do SQL Server em outra máquina virtual para fins de análise de negócios e relatório.In this scenario, you are performing a restore to a SQL Server instance on a different virtual machine for the purposes of business analysis and reporting. A restauração em uma instância diferente em outra máquina virtual descarrega a carga de trabalho em uma máquina virtual dedicada e dimensionada para essa finalidade, removendo os requisitos de recursos do sistema transacional.Restoring to a different instance on a different virtual machine offloads the workload to a virtual machine dedicated and sized for this purpose, removing its resource requirements from the transactional system.

A restauração por meio de um backup de log de transações com backup de instantâneo de arquivo é muito rápida e significativamente mais rápida do que com backups tradicionais de streaming.Restore from a transaction log backup with file-snapshot backup is very quick, substantially quicker than with traditional streaming backups. 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 de log de transações (ou um novo backup completo do banco de dados).With traditional streaming backups, you would need to use the full database backup, perhaps a differential backup, and some or all of the transaction log backups (or a new full database backup). No entanto, com backups de log de instantâneo de arquivo, você só precisa do backup de log mais recente (ou outro backup de log ou os dois backups de log adjacentes para restauração pontual em um ponto entre dois horários de backup de log).However, with file-snapshot log backups, you only need the most recent log backup (or any other log backup or any two adjacent log backups for point in time restore to a point between two log backup times). Para ser claro, é necessário apenas um conjunto de backup de instantâneo de arquivo de log, porque cada backup de log de instantâneo de arquivo cria um instantâneo de arquivo de cada arquivo de banco de dados (cada arquivo de dados e o arquivo de log).To be clear, you only need one log file-snapshot backup set because each file-snapshot log backup creates a file snapshot of each database file (each data file and the log file).

Para restaurar um banco de dados em um novo banco de dados por meio de um backup de log de transações usando o backup de instantâneo de arquivo, siga estas etapas:To restore a database to a new database from a transaction log backup using file snapshot backup, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Abra uma nova janela de consulta e conecte-se à instância do SQL Server 2016 do mecanismo de banco de dados em uma máquina virtual do Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in an Azure virtual machine.

    Observação

    Se esta for uma máquina virtual do Azure diferente da que você usou nas seções anteriores, verifique se você seguiu as etapas em 2–Criar uma credencial do SQL Server usando uma assinatura de acesso compartilhado.If this is a different Azure virtual machine than you have been using for the previous sections, make sure you have followed the steps in 2 - Create a SQL Server credential using a shared access signature. Se você desejar restaurar para um contêiner diferente, siga as etapas em 1 – Criar política de acesso armazenado e armazenamento de acesso compartilhado para o novo contêiner.If you wish to restore to a different container, follow the steps in 1 - Create stored access policy and shared access storage for the new container.

  3. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Selecione o arquivo de backup de log que você deseja usar.Select the log backup file you wish to use. Modifique a URL de forma adequada para o nome de sua 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.Modify the URL appropriately for your storage account name and the container that you specified in section 1, provide the log backup file name and then execute this script.

    -- restore as a new database from a transaction log backup file  
    RESTORE DATABASE AdventureWorks2016_EOM   
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak'    
        WITH MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_EOM_Data.mdf'  
       , MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_EOM_Log.ldf'  
       , RECOVERY  
    --, REPLACE   
    
  4. Examine a saída para verificar se a restauração foi bem-sucedida.Review the output to verify the restore was successful.

  5. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.In Object Explorer, connect to Azure storage.

  6. Expanda Contêineres, expanda o contêiner criado na seção 1 (atualize se necessário) e verifique se os novos arquivos de log e de dados são exibidos no contêiner, juntamente com os blobs das seções anteriores.Expand Containers, expand the container that you created in section 1 (refresh if necessary) and verify that the new data and log files appear in the container, along with the blobs from the previous sections.

    Contêiner do Azure mostrando os arquivos de log e de dados para o novo banco de dados

9–Gerenciar conjuntos de backup e backups de instantâneo de arquivo9 - Manage backup sets and file-snapshot backups

Nesta seção, você excluirá um conjunto de backup usando o procedimento armazenado do sistema sp_delete_backup (Transact-SQL).In this section, you will delete a backup set using the sp_delete_backup (Transact-SQL) system stored procedure. Esse procedimento armazenado do sistema exclui o arquivo de backup e o arquivo de instantâneo em cada arquivo de banco de dados associado a esse conjunto de backup.This system stored procedure deletes the backup file and the file snapshot on each database file associated with this backup set.

Observação

Se tentar excluir um conjunto de backup excluindo apenas o arquivo de backup do contêiner de Blobs do Azure, você só excluirá o arquivo de backup em si – os instantâneos de arquivo associados permanecerão.If you attempt to delete a backup set by simply deleting the backup file from the Azure Blob container, you will only delete the backup file itself - the associated file snapshots will remain. Se você se deparar com este cenário, use a função do sistema sys.fn_db_backup_file_snapshots (Transact-SQL) para identificar a URL dos instantâneos de arquivo órfão e use o procedimento armazenado do sistema sp_delete_backup_file_snapshot (Transact-SQL) para excluir cada instantâneo de arquivo órfão.If you find yourself in this scenario, use the sys.fn_db_backup_file_snapshots (Transact-SQL) system function to identify the URL of the orphaned file snapshots and use the sp_delete_backup_file_snapshot (Transact-SQL) system stored procedure to delete each orphaned file snapshot. Para obter mais informações, consulte Backups de instantâneo de arquivo para arquivos de banco de dados no Azure.For more information, see File-Snapshot Backups for Database Files in Azure.

Para excluir um conjunto de backup de instantâneo de arquivo, siga estas etapas:To delete a file-snapshot backup set, follow these steps:

  1. Conecte-se ao SQL Server Management Studio.Connect to SQL Server Management Studio.
  2. Abra uma janela de nova consulta e conecte-se à instância do Azure SQL Server 2016 do mecanismo de banco de dados na máquina virtual do Azure (ou a qualquer instância do SQL Server 2016 com permissões de leitura e gravação nesse contêiner).Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine (or to any SQL Server 2016 instance with permissions to read and write on this container).
  3. Copie e cole o script Transact-SQL a seguir na janela de consulta.Copy and paste the following Transact-SQL script into the query window. Selecione o backup de log que você deseja excluir, juntamente com seus instantâneos de arquivo associados.Select the log backup you wish to delete along with its associated file snapshots. Modifique a URL de forma adequada para o nome de sua 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.Modify the URL appropriately for your storage account name and the container that you specified in section 1, provide the log backup file name and then execute this script.
sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';  
  1. No Pesquisador de Objetos, conecte-se ao armazenamento do Azure.In Object Explorer, connect to Azure storage.

  2. Expanda Contêineres, expanda o contêiner criado na seção 1 e verifique se o arquivo de backup utilizado na etapa 3 não é mais exibido neste contêiner (atualize o nó, conforme necessário).Expand Containers, expand the container that you created in section 1 and verify that the backup file you used in step 3 no longer appears in this container (refresh the node as necessary).

    Contêiner do Azure mostrando a exclusão do blob de backup de log de transações

  3. Copie, cole e execute o script Transact-SQL a seguir na janela de consulta para verificar se os dois instantâneos de arquivo foram excluídos.Copy, paste, and execute the following Transact-SQL script into the query window to verify that two file snapshots have been deleted.

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

    Painel de resultados mostrando dois instantâneos de arquivo excluídos

10–Remover recursos10 - Remove resources

Depois de concluir este tutorial, e para conservar recursos, exclua o grupo de recursos criado neste tutorial.Once you're done with this tutorial, and to conserve resources, be sure to delete the resource group created in this tutorial.

Para excluir o grupo de recursos, execute o seguinte código do powershell:To delete the resource group, run the following powershell code:

# 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   

Consulte TambémSee Also

Arquivos de dados do SQL Server no Microsoft AzureSQL Server Data Files in Microsoft Azure
Backups de instantâneo de arquivo para arquivos de banco de dados no AzureFile-Snapshot Backups for Database Files in Azure
Backup do SQL Server para URL Assinaturas de Acesso Compartilhado, Parte 1: Noções básicas sobre o modelo SASSQL Server Backup to URL Shared Access Signatures, Part 1: Understanding the SAS Model
Criar contêinerCreate Container
Definir ACL do contêinerSet Container ACL
Obter ACL do contêiner Credenciais (Mecanismo de Banco de Dados)Get Container ACL Credentials (Database Engine)
CREATE CREDENTIAL (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)
sys.credentials (Transact-SQL)sys.credentials (Transact-SQL)
sp_delete_backup (Transact-SQL)sp_delete_backup (Transact-SQL)
sys.fn_db_backup_file_snapshots (Transact-SQL)sys.fn_db_backup_file_snapshots (Transact-SQL)
sp_delete_backup_file_snapshot (Transact-SQL) Backups de instantâneo de arquivo para arquivos de banco de dados no Azuresp_delete_backup_file_snapshot (Transact-SQL) File-Snapshot Backups for Database Files in Azure