Руководство. Использование службы хранилища BLOB-объектов Azure с SQL Server 2016Tutorial: Use Azure Blob storage service with SQL Server 2016

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Добро пожаловать в учебник по работе с SQL Server 2016 в службе хранилища BLOB-объектов Microsoft Azure.Welcome to the Working with SQL Server 2016 in Microsoft Azure Blob Storage service tutorial. С помощью этого учебника вы научитесь использовать службу хранилища BLOB-объектов Microsoft Azure для сохранения файлов данных и резервных копий 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.

Поддержка интеграции SQL Server со службой хранилища BLOB-объектов Microsoft Azure появилась в SQL Server 2012 с пакетом обновления 1 (SP1) и накопительным пакетом обновления 2 и в дальнейшем была улучшена в SQL Server 2014 и 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. Обзор возможностей и преимуществ использования этих функций см. в статье Файлы данных SQL Server в Microsoft Azure.For an overview of the functionality and benefits of using this feature, see SQL Server Data Files in Microsoft Azure. Работа функции показана в видеоролике, посвященном восстановлению до точки во времени.For a live demo, see Demo of Point in Time Restore.

В этом руководстве в нескольких разделах показано, как работать с файлами данных SQL Server в службе хранилища BLOB-объектов Microsoft Azure.This tutorial shows you how to work with SQL Server Data Files in Microsoft Azure Blob storage service in multiple sections. В каждом разделе рассматривается определенная задача, и их следует выполнять по порядку.Each section is focused on a specific task and the sections should be completed in sequence. Сначала вы узнаете, как создать контейнер в хранилище BLOB-объектов с помощью хранимой политики доступа и подписанного URL-адреса.First, you will learn how to create a new container in Blob storage with a stored access policy and a shared access signature. Затем вы узнаете, как создать учетные данные SQL Server, чтобы интегрировать SQL Server с хранилищем BLOB-объектов Azure.Then, you will learn how to create a SQL Server credential to integrate SQL Server with Azure Blob storage. Далее вы выполните резервное копирование базы данных в хранилище BLOB-объектов и восстановите ее в виртуальной машине Azure.Next, you will back up a database to Blob storage and restore it to an Azure virtual machine. После этого вы используете резервную копию журнала транзакций SQL Server 2016 на основе моментального снимка файла, чтобы выполнить восстановление в новой базе данных на определенный момент времени.You will then use SQL Server 2016 file-snapshot transaction log backup to restore to a point in time and to a new database. Наконец, в учебнике будет продемонстрировано использование хранимых процедур и функций системы метаданных, что позволит вам понять, как работать с резервными копиями моментальных снимков файлов.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.

предварительные требованияPrerequisites

Чтобы выполнить задания этого руководства, необходимо владеть основными понятиями резервного копирования и восстановления SQL ServerSQL Server и синтаксисом T-SQL.To complete this tutorial, you must be familiar with SQL ServerSQL Server backup and restore concepts and T-SQL syntax. Для работы с этим руководством требуется учетная запись хранилища Azure, SQL Server Management Studio (SSMS), доступ к экземпляру SQL Server в локальной среде, доступ к виртуальной машине Azure под управлением SQL Server 2016 и база данных 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. Кроме того, учетная запись, используемая для выдачи команд резервного копирования и восстановления, должна находиться в роли базы данных db_backupoperator с разрешениями изменение любых учетных данных.Additionally, the account used to issue the BACKUP and RESTORE commands should be in the db_backupoperator database role with alter any credential permissions.

1. Создание хранимой политики доступа и хранилища с общим доступом1 - Create stored access policy and shared access storage

В этом разделе вы примените скрипт Azure PowerShell, чтобы создать подписанный URL-адрес для контейнера BLOB-объектов Azure с помощью хранимой политики доступа.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.

Примечание

Этот скрипт написан с помощью Azure PowerShell 5.0.10586.This script is written using Azure PowerShell 5.0.10586.

Подписанный URL-адрес — это универсальный код ресурса (URI), который предоставляет ограниченные права доступа к контейнерам, большим двоичным объектам, очередям и таблицам.A shared access signature is a URI that grants restricted access rights to containers, blobs, queues, or tables. Хранимая политика доступа предоставляет дополнительный уровень контроля над сервером, включая отзыв, истечение срока действия и продление доступа.A stored access policy provides an additional level of control over shared access signatures on the server side including revoking, expiring, or extending access. При использовании этого расширения необходимо создать политику в контейнере как минимум с правами на чтение, запись и перечисление.When using this new enhancement, you need to create a policy on a container with at least read, write, and list rights.

Хранимую политику доступа и подписанный URL-адрес можно создать с помощью Azure PowerShell, пакета SDK службы хранилища Azure, REST API Azure или служебной программы стороннего разработчика.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. В этом учебнике демонстрируется применение скрипта Azure PowerShell для выполнения данной задачи.This tutorial demonstrates how to use an Azure PowerShell script to complete this task. В скрипте используется модель развертывания диспетчера ресурсов и создаются следующие ресурсы:The script uses the Resource Manager deployment model and creates the following new resources

  • Группа ресурсовResource group
  • Учетная запись храненияStorage account
  • Контейнер BLOB-объектов AzureAzure blob container
  • Политика SASSAS policy

Выполнение скрипта начинается с объявления ряда переменных для указания имен перечисленных выше ресурсов и имен следующих обязательных входных значений: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:

  • имя префикса, используемое для именования других объектов ресурсов;A prefix name used in naming other resource objects
  • имя подписки;Subscription name
  • расположение центра обработки данных.Data center location

В результате выполнения скрипта создается соответствующая инструкция CREATE CREDENTIAL, которая будет использоваться в разделе 2. Создание учетных данных SQL Server с помощью подписанного URL-адреса.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. Эта инструкция копируется в буфер обмена и выводится в консоль.This statement is copied to your clipboard for you and is output to the console for you to see.

Чтобы создать политику для контейнера и ключ подписанного URL-адреса, выполните указанные ниже действия.To create a policy on the container and generate a Shared Access Signature (SAS) key, follow these steps:

  1. Откройте интегрированную среду сценариев Window PowerShell или Windows PowerShell (см. требования к версии выше).Open Window PowerShell or Windows PowerShell ISE (see version requirements above).

  2. Измените, а затем выполните приведенный ниже скрипт:Edit and then execute the below 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. По завершении выполнения скрипта инструкция CREATE CREDENTIAL будет находиться в буфере обмена для использования в следующем разделе.After the script completes, the CREATE CREDENTIAL statement will be in your clipboard for use in the next section.

2. Создание учетных данных SQL Server с помощью подписанного URL-адреса2 - Create a SQL Server credential using a shared access signature

В этом разделе вы создадите учетные данные для хранения сведений о безопасности, которые SQL Server будет использовать для записи в контейнер Azure, созданный на предыдущем шаге, и чтения из этого контейнера.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.

Учетные данные SQL Server — это объект, который используется для хранения сведений, необходимых для проверки подлинности при подключении к ресурсу вне 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. В учетных данных хранится URI-путь к контейнеру хранилища и подписанный URL-адрес этого контейнера.The credential stores the URI path of the storage container and the shared access signature for this container.

Чтобы создать учетные данные SQL Server, выполните указанные ниже действия.To create a SQL Server credential, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД в локальной среде.Open a new query window and connect to the SQL Server instance of the database engine in your on-premises environment.

  3. В новое окно запроса вставьте инструкцию CREATE CREDENTIAL с подписанным URL-адресом из раздела 1, а затем выполните этот скрипт.In the new query window, paste the CREATE CREDENTIAL statement with the shared access signature from section 1 and execute that script.

    Код скрипта будет выглядеть следующим образом.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. Чтобы увидеть все доступные учетные данные, можно выполнить следующую инструкцию в окне запроса, подключенном к экземпляру:To see all available credentials, you can run the following statement in a query window connected to your instance:

    SELECT * from sys.credentials  
    
  5. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД на виртуальной машине Azure.Open a new query window and connect to the SQL Server instance of the database engine in your Azure virtual machine.

  6. В новое окно запроса вставьте инструкцию CREATE CREDENTIAL с подписанным URL-адресом из раздела 1, а затем выполните этот скрипт.In the new query window, paste the CREATE CREDENTIAL statement with the shared access signature from section 1 and execute that script.

  7. Повторите шаги 5 и 6 для дополнительных экземпляров SQL Server, которые должны иметь доступ к контейнеру Azure.Repeat steps 5 and 6 for any additional SQL Server instances that you wish to have access to the Azure container.

3. Резервное копирование базы данных по URL-адресу3 - Database backup to URL

В этом разделе вы выполните резервное копирование базы данных AdventureWorks2016, размещенной в локальном экземпляре SQL Server 2016, в контейнер Azure, созданный в разделе 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.

Примечание

Если необходимо выполнить резервное копирование базы данных SQL Server 2012 с пакетом обновления 1 (SP1) и накопительным пакетом обновления 2 или более поздней версии либо базы данных SQL Server 2014 в этот контейнер Azure, можно воспользоваться устаревшим синтаксисом, который описывается здесь . Таким образом можно выполнить резервное копирование по URL-адресу с помощью синтаксиса 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.

Чтобы выполнить резервное копирование в хранилище BLOB-объектов, выполните указанные ниже действия.To back up a database to Blob storage, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт.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. Откройте обозреватель объектов и подключитесь к хранилищу Azure с помощью учетной записи хранения и ключа учетной записи.Open Object Explorer and connect to Azure storage using your storage account and account key.

    1. Разверните узел "Контейнеры", разверните созданный в разделе 1 контейнер и убедитесь, что в нем отображается резервная копия из шага 3.Expand Containers, expand the container that you created in section 1 and verify that the backup from step 3 above appears in this container.

Подключение к учетной записи хранения Azure

4. Восстановление базы данных на виртуальной машине по URL-адресу4 - Restore database to virtual machine from URL

В этом разделе вы восстановите базу данных AdventureWorks2016 в экземпляр SQL Server 2016 на виртуальной машине Azure.In this section, you will restore the AdventureWorks2016 database to your SQL Server 2016 instance in your Azure virtual machine.

Примечание

В целях упрощения в этом учебнике для файлов данных и журналов применяется тот же контейнер, который использовался для резервной копии базы данных.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. В рабочей среде обычно используется несколько контейнеров, а также несколько файлов данных.In a production environment, you would likely use multiple containers, and frequently multiple data files as well. В SQL Server 2016 можно также распределить резервную копию по нескольким BLOB-объектам, чтобы повысить производительность при резервном копировании большой базы данных.With SQL Server 2016, you could also consider striping your backup across multiple blobs to increase backup performance when backing up a large database.

Чтобы восстановить базу данных AdventureWorks2016 из хранилища BLOB-объектов Azure в экземпляр SQL Server 2016 на виртуальной машине Azure, выполните указанные ниже действия.To restore the AdventureWorks2016 database from Azure blob storage to your SQL Server 2016 instance in your Azure virtual machine, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт.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. Откройте обозреватель объектов и подключитесь к экземпляру Azure SQL Server 2016.Open Object Explorer and connect to your Azure SQL Server 2016 instance.

  5. В обозревателе объектов разверните узел "Базы данных" и убедитесь в том, что база данных AdventureWorks2016 восстановлена (при необходимости обновите узел).In Object Explorer, expand the Databases node and verify that the AdventureWorks2016 database has been restored (refresh the node as necessary)

    1. Щелкните AdventureWorks2016 правой кнопкой мыши и выберите "Свойства".Right-click AdventureWorks2016, and select Properties.
    2. Щелкните "Файлы" и убедитесь в том, что пути к двум файлам базы данных представляют собой URL-адреса, указывающие на BLOB-объекты в контейнере BLOB-объектов Azure (затем щелкните "Отмена").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).

    База данных AdventureWorks на виртуальной машине Azure

  6. В обозревателе объектов подключитесь к хранилищу Azure.In Object Explorer, connect to Azure storage.

    1. Разверните узел "Контейнеры", разверните созданный в разделе 1 контейнер и убедитесь, что в нем есть файлы AdventureWorks2016_Data.mdf и AdventureWorks2016_Log.ldf из шага 3, а также файл резервной копии из раздела 3 (при необходимости обновите узел).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).

Файлы данных в контейнере Azure

5. Резервное копирование базы данных с помощью резервного копирования моментальных снимков файлов5 - Backup database using file-snapshot backup

В этом разделе вы выполните резервное копирование базы данных AdventureWorks2016 с виртуальной машины Azure с помощью резервной копии моментального снимка файлов. Такой способ позволяет выполнять почти мгновенное резервное копирование с использованием моментальных снимков 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. Дополнительные сведения о резервных копиях моментальных снимков файлов см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.For more information on file-snapshot backups, see File-Snapshot Backups for Database Files in Azure

Чтобы создать резервную копию базы данных AdventureWorks2016 с помощью резервного копирования моментальных снимков файлов, выполните указанные ниже действия.To back up the AdventureWorks2016 database using file-snapshot backup, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его (не закрывайте окно запроса — этот скрипт необходимо будет выполнить еще раз на шаге 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. Эта системная хранимая процедура позволяет просмотреть существующие резервные копии моментальных снимков файлов для каждого файла, входящего в состав указанной базы данных.This system stored procedure enables you to view the existing file snapshot backups for each file that comprises a specified database. Обратите внимание на то, что для данной базы данных резервных копий моментальных снимков файлов нет.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. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт.Modify the URL appropriately for your storage account name and the container that you specified in section 1 and then execute this script. Обратите внимание на то, как быстро выполняется это резервное копирование.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. Проверив успешность выполнения скрипта в шаге 4, выполните приведенный ниже скрипт еще раз.After verifying that the script in step 4 executed successfully, execute the following script again. Обратите внимание на то, что в результате операции резервного копирования моментальных снимков файлов в шаге 4 были созданы моментальные снимки как файлов данных, так и файлов журналов.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');  
    
    

    Результаты для fn_db_backup_file_snapshots с отображением моментальных снимков

  6. В обозревателе объектов в экземпляре SQL Server 2016 на виртуальной машине Azure разверните узел "Базы данных" и убедитесь в том, что база данных AdventureWorks2016 восстановлена в этом экземпляре (при необходимости обновите узел).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. В обозревателе объектов подключитесь к хранилищу Azure.In Object Explorer, connect to Azure storage.

  8. Разверните узел "Контейнеры", разверните контейнер, созданный в разделе 1, и проверьте, есть ли в нем файл AdventureWorks2016_Azure.bak из шага 4, а также файл резервной копии из раздела 3 и файлы базы данных из раздела 4 (при необходимости обновите узел).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).

    Резервная копия моментального снимка в Azure

6. Создание действия и журнала резервного копирования с помощью резервного копирования моментальных снимков файлов6 - Generate activity and backup log using file-snapshot backup

В этом разделе вы создадите действие в базе данных AdventureWorks2016 и будете периодически создавать резервные копии журналов транзакций с помощью резервного копирования моментальных снимков файлов.In this section, you will generate activity in the AdventureWorks2016 database and periodically create transaction log backups using file-snapshot backups. Дополнительные сведения об использовании резервных копий моментальных снимков файлов см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.For more information on using file snapshot backups, see File-Snapshot Backups for Database Files in Azure.

Чтобы создать действие в базе данных AdventureWorks2016 и периодически создавать резервные копии журналов транзакций с помощью резервного копирования моментальных снимков файлов, выполните указанные ниже действия.To generate activity in the AdventureWorks2016 database and periodically create transaction log backups using file-snapshot backups, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте два новых окна запросов и подключите каждое из них к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине 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. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в одно из окон запросов, а затем выполните этот скрипт.Copy, paste, and execute the following Transact-SQL script into one of the query windows. Обратите внимание на то, что таблица Production.Location содержит 14 строк до того, как в нее будут добавлены новые строки в шаге 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. Скопируйте и вставьте приведенные ниже скрипты Transact-SQL в два отдельных окна запросов.Copy and paste the following two Transact-SQL scripts into the two separate query windows. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали в разделе 1, а затем одновременно выполните эти скрипты в отдельных окнах запросов.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. На выполнение скриптов потребуется приблизительно семь минут.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. Просмотрите выходные данные первого скрипта и обратите внимание на то, что последняя строка теперь имеет номер 29 939.Review the output of the first script and notice that final row count is now 29,939.

    Отображение числа строк 29 939

  6. Просмотрите выходные данные второго скрипта и обратите внимание на то, что при каждом выполнении инструкции BACKUP LOG для каждого файла создаются два моментальных снимка файлов: один снимок файла журнала и один снимок файла данных.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. После завершения выполнения второго скрипта должно быть создано всего 16 моментальных снимков файлов (по 8 для каждого файла базы данных): по одному при каждом выполнении инструкции BACKUP DATABASE и еще по одному при каждом выполнении инструкции 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.

Результаты резервного копирования моментального снимка

  1. В обозревателе объектов подключитесь к хранилищу Azure.In Object Explorer, connect to Azure storage.

  2. Разверните узел "Контейнеры", а также контейнер, созданный в разделе 1, и убедитесь в том, что появилось семь новых файлов резервных копий и файлы данных из предыдущих разделов (при необходимости обновите узел).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).

    Несколько моментальных снимков в контейнере Azure

7. Восстановление базы данных на момент времени7 - Restore a database to a point in time

В этом разделе вы восстановите базу данных AdventureWorks2016 на определенный момент времени между двумя резервными копиями журнала транзакций.In this section, you will restore the AdventureWorks2016 database to a point in time between two of the transaction log backups.

Чтобы выполнить восстановление на определенный момент времени из традиционных резервных копий, потребуется полная резервная копия базы данных, возможно, разностная резервная копия и все файлы журналов транзакций вплоть до того момента, на который необходимо выполнить восстановление, и сразу после него.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. При использовании резервных копий моментальных снимков файлов требуются только два ближайших файла резервных копий журнала с обеих сторон от целевой точки восстановления.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. Требуются только два резервных набора моментальных снимков файлов, так как каждая операция резервного копирования журнала создает моментальный снимок каждого файла базы данных (то есть файла данных и файла журнала).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).

Чтобы восстановить базу данных на определенный момент времени из резервных наборов моментальных снимков файлов, выполните указанные ниже действия.To restore a database to a specified point in time from file snapshot backup sets, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in your Azure virtual machine.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его.Copy, paste, and execute the following Transact-SQL script into the query window. Убедитесь в том, что таблица Production.Location содержит 29 939 строк, прежде чем восстанавливать ее на момент времени, когда было меньше строк, в шаге 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   
    

    Отображение числа строк 29 939

  4. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Выберите два смежных файла резервных копий журнала и укажите вместо их имен дату и время, требуемые для этого скрипта.Select two adjacent log backup files and convert the file name into the date and time you will need for this script. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имена файлов для первой и второй резервных копий, укажите время STOPAT в формате "June 26, 2018 01:48 PM" (26 июня, 2018 13:48), а затем выполните этот скрипт.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. Выполнение скрипта займет несколько минут.This 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. Просмотрите выходные данные.Review the output. Обратите внимание на то, что после восстановления число строк равно 18 389 — это число строк межу резервными копиями журнала 5 и 6 (ваше число строк может быть другим).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. Восстановление новой базы данных из резервной копии журнала8 - Restore as new database from log backup

В этом разделе вы восстановите базу данных AdventureWorks2016 в виде новой базы данных из резервной копии журнала транзакций на основе моментального снимка файлов.In this section, you will restore the AdventureWorks2016 database as a new database from a file-snapshot transaction log backup.

В этом сценарии вы восстановите базу данных в экземпляре SQL Server на другой виртуальной машине, предназначенной для бизнес-анализа и создания отчетов.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. Восстановление в другом экземпляре, размещенном в другой виртуальной машине, позволяет перенести нагрузку на выделенную виртуальную машину, специально предназначенную для этой цели, и снизить требования к ресурсам, предъявляемые к системе обработки транзакций.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.

Восстановление из резервной копии журнала транзакций, созданной посредством резервного копирования моментальных снимков файлов, выполняется очень быстро — существенно быстрее, чем при использовании традиционных потоковых резервных копий.Restore from a transaction log backup with file-snapshot backup is very quick, substantially quicker than with traditional streaming backups. В случае с традиционными потоковыми резервными копиями вам потребовалось бы использовать полную резервную копию базы данных, а также, возможно, разностную резервную копию и все или часть резервных копий журнала транзакций (либо новую полную резервную копию базы данных).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). При использовании же резервных копий журнала на основе моментальных снимков файлов требуется только самая последняя резервная копия журнала (либо любая другая резервная копия журнала, либо две смежные резервные копии журнала для восстановления на определенный момент времени).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). Если точнее, требуется только один резервный набор моментальных снимков файлов, так как каждая операция резервного копирования журнала с помощью моментальных снимков файлов создает моментальный снимок каждого файла базы данных (то есть файла данных и файла журнала).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).

Чтобы выполнить восстановление в новую базу данных из резервной копии журнала транзакций, созданной посредством резервного копирования моментальных снимков файлов, выполните указанные ниже действия.To restore a database to a new database from a transaction log backup using file snapshot backup, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure.Open a new query window and connect to the SQL Server 2016 instance of the database engine in an Azure virtual machine.

    Примечание

    Если это не та виртуальная машина Azure, которую вы использовали в предыдущих разделах, выполните инструкции из раздела 2. Создание учетных данных SQL Server с помощью подписанного URL-адреса.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. Если вы хотите восстановить данные в другой контейнер, выполните для нового контейнера действия из раздела 1. Создание хранимой политики доступа и хранилища с общим доступом.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. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Выберите файл резервной копии журнала, который нужно использовать.Select the log backup file you wish to use. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имя файла резервной копии журнала, а затем выполните этот скрипт.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. Просмотрите выходные данные, чтобы проверить успешность восстановления.Review the output to verify the restore was successful.

  5. В обозревателе объектов подключитесь к хранилищу Azure.In Object Explorer, connect to Azure storage.

  6. Разверните узел "Контейнеры", разверните созданный в разделе 1 контейнер (при необходимости обновите его) и убедитесь в том, что в нем появились новые файлы данных и журналов, а также BLOB-объекты из предыдущих разделов.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.

    Контейнер Azure с файлами данных и журналов для новой базы данных

9. Управление резервными наборами данных и резервными копиями моментальных снимков файлов9 - Manage backup sets and file-snapshot backups

В этом разделе вы удалите резервный набор данных с помощью системной хранимой процедуры sp_delete_backup (Transact-SQL).In this section, you will delete a backup set using the sp_delete_backup (Transact-SQL) system stored procedure. Эта процедура удаляет файл резервной копии и моментальный снимок файла для каждого файла базы данных, связанного с резервным набором данных.This system stored procedure deletes the backup file and the file snapshot on each database file associated with this backup set.

Примечание

Если вы попытаетесь удалить резервный набор данных, просто удалив файл резервной копии из контейнера BLOB-объектов Azure, будет удален только сам файл резервной копии, а связанные с ним моментальные снимки файлов сохранятся.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. Если у вас возникла такая ситуация, используйте системную функцию sys.fn_db_backup_file_snapshots (Transact-SQL) для определения URL-адреса потерянных моментальных снимков файлов, а затем используйте системную хранимую процедуру sp_delete_backup_file_snapshot (Transact-SQL) для удаления каждого утерянного моментального снимка файла.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. Дополнительные сведения см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.For more information, see File-Snapshot Backups for Database Files in Azure.

Чтобы удалить резервный набор моментальных снимков файлов, выполните указанные ниже действия.To delete a file-snapshot backup set, follow these steps:

  1. Подключитесь к среде Microsoft SQL Server Management Studio.Connect to SQL Server Management Studio.
  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server 2016 ядра СУБД в виртуальной машине Azure (или к любому экземпляру SQL Server 2016 с разрешениями на чтение и запись в этот контейнер).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. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса.Copy and paste the following Transact-SQL script into the query window. Выберите резервную копию журнала, которую нужно удалить вместе со связанными моментальными снимками файлов.Select the log backup you wish to delete along with its associated file snapshots. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имя файла резервной копии журнала, а затем выполните этот скрипт.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. В обозревателе объектов подключитесь к хранилищу Azure.In Object Explorer, connect to Azure storage.

  2. Разверните узел "Контейнеры", разверните созданный в разделе 1 контейнер и убедитесь в том, что файл резервной копии из раздела 3 больше не отображается в этом контейнере (при необходимости обновите узел).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).

    Контейнер Azure, в котором видно, что большой двоичный объект резервной копии журнала удален

  3. Чтобы убедиться в том, что оба моментальных снимка файлов были удалены, скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его.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');   
    

    Область результатов, где подтверждается удаление двух моментальных снимков файлов

10. Удаление ресурсов10 - Remove resources

Когда вы закончите работу с этим руководством, не забудьте в целях экономии ресурсов удалить группу ресурсов, созданную в этом руководстве.Once you're done with this tutorial, and to conserve resources, be sure to delete the resource group created in this tutorial.

Чтобы удалить группу ресурсов, выполните следующий код 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   

См. также:See Also

Файлы данных SQL Server в Microsoft AzureSQL Server Data Files in Microsoft Azure
Резервные копии моментальных снимков файлов для файлов базы данных в AzureFile-Snapshot Backups for Database Files in Azure
Резервное копирование в SQL Server по URL-адресу Подписанные URL-адреса. Часть 1. Общие сведения о модели SASSQL Server Backup to URL Shared Access Signatures, Part 1: Understanding the SAS Model
Create ContainerCreate Container
Set Container ACLSet Container ACL
Get Container ACL Учетные данные (компонент Database Engine)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) Резервные копии моментальных снимков файлов для файлов базы данных в Azuresp_delete_backup_file_snapshot (Transact-SQL) File-Snapshot Backups for Database Files in Azure