Руководство. Использование хранилища BLOB-объектов Azure с SQL Server

Область применения: SQL Server 2016 (13.x) и более поздних версий

В этом руководстве показано, как использовать хранилище BLOB-объектов Azure для файлов данных и резервных копий в SQL Server 2016 и более поздних версиях.

Поддержка интеграции SQL Server для хранилища BLOB-объектов Azure началась в качестве усовершенствования с пакетом обновления 1 (SP1) с пакетом обновления 1 (SP2) SQL Server 2014 и SQL Server 2016. Обзор возможностей и преимуществ использования этих функций см. в статье Файлы данных SQL Server в Microsoft Azure.

В этом руководстве в нескольких разделах показано, как работать с файлами данных SQL Server в Хранилище BLOB-объектов Azure. В каждом разделе рассматривается определенная задача, и их следует выполнять по порядку. Сначала вы узнаете, как создать контейнер в Хранилище BLOB-объектов с помощью хранимой политики доступа и подписанного URL-адреса. Затем вы узнаете, как создать учетные данные SQL Server, чтобы интегрировать SQL Server с Хранилищем BLOB-объектов Azure. Далее вы выполните резервное копирование базы данных в Хранилище BLOB-объектов и восстановите ее в виртуальной машине Azure. Затем вы будете использовать резервную копию журнала транзакций моментального снимка файлов SQL Server для восстановления до точки во времени и в новую базу данных. Наконец, в учебнике будет продемонстрировано использование хранимых процедур и функций системы метаданных, что позволит вам понять, как работать с резервными копиями моментальных снимков файлов.

Предварительные условия

Для работы с этим руководством необходимо ознакомиться с понятиями резервного копирования и восстановления SQL Server и синтаксисом T-SQL.
Чтобы использовать это руководство, вам потребуется учетная запись хранения Azure, СРЕДА SQL Server Management Studio (SSMS), доступ к экземпляру локальной среды SQL Server, доступ к виртуальной машине Azure под управлением экземпляра SQL Server 2016 или более поздней версии и AdventureWorks2022 базы данных. Кроме того, учетная запись, используемая для выдачи команд резервного копирования и восстановления, должна находиться в роли базы данных db_backupoperator с разрешениями изменение любых учетных данных.

Внимание

SQL Server не поддерживает Azure Data Lake Storage, убедитесь, что иерархическое пространство имен не включено в учетной записи хранения, используемой для этого руководства.

1. Создание хранимой политики доступа и хранилища с общим доступом

В этом разделе описан сценарий Azure PowerShell для создания подписанного URL-адреса в контейнере хранилища BLOB-объектов Azure с помощью хранимой политики доступа.

Заметка

Этот скрипт написан с помощью Azure PowerShell 5.0.10586.

Подписанный URL-адрес — это универсальный код ресурса (URI), который предоставляет ограниченные права доступа к контейнерам, большим двоичным объектам, очередям и таблицам. Хранимая политика доступа предоставляет дополнительный уровень контроля над сервером, включая отзыв, истечение срока действия и продление доступа. При использовании этого расширения необходимо создать политику в контейнере как минимум с правами на чтение, запись и перечисление.

Хранимую политику доступа и подписанный URL-адрес можно создать с помощью Azure PowerShell, пакета SDK службы хранилища Azure, REST API Azure или служебной программы стороннего разработчика. В этом учебнике демонстрируется применение скрипта Azure PowerShell для выполнения данной задачи. В скрипте используется модель развертывания диспетчера ресурсов и создаются следующие ресурсы:

  • Группа ресурсов
  • Учетная запись хранения
  • Контейнер хранилища BLOB-объектов Azure
  • Политика SAS

Выполнение скрипта начинается с объявления ряда переменных для указания имен перечисленных выше ресурсов и имен следующих обязательных входных значений:

  • имя префикса, используемое для именования других объектов ресурсов;
  • Имя подписки
  • расположение центра обработки данных.

В результате выполнения скрипта создается соответствующая инструкция CREATE CREDENTIAL, которая будет использоваться в разделе 2. Создание учетных данных SQL Server с помощью подписанного URL-адреса. Эта инструкция копируется в буфер обмена и выводится в консоль.

Чтобы создать политику в контейнере и создать подписанный URL-адрес (SAS), выполните следующие действия.

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

  2. Измените, а затем выполните приведенный ниже скрипт:

    # 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 будет находиться в буфере обмена для использования в следующем разделе.

2. Создание учетных данных SQL Server с помощью подписанного URL-адреса

В этом разделе вы создадите учетные данные для хранения сведений о безопасности, которые будут использоваться SQL Server для записи и чтения из контейнера хранилища BLOB-объектов Azure, созданного на предыдущем шаге.

Учетные данные SQL Server — это объект, который используется для хранения сведений, необходимых для проверки подлинности при подключении к ресурсу вне SQL Server. Учетные данные хранят URI-путь контейнера хранилища BLOB-объектов Azure и подписанный URL-адрес для этого контейнера.

Чтобы создать учетные данные SQL Server, выполните указанные ниже действия.

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД в локальной среде.

  3. В новое окно запроса вставьте инструкцию CREATE CREDENTIAL с подписанным URL-адресом из раздела 1, а затем выполните этот скрипт.

    Код скрипта будет выглядеть следующим образом.

    /* 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. Чтобы увидеть все доступные учетные данные, можно выполнить следующую инструкцию в окне запроса, подключенном к экземпляру:

    SELECT * from sys.credentials
    
  5. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД на виртуальной машине Azure.

  6. В новое окно запроса вставьте инструкцию CREATE CREDENTIAL с подписанным URL-адресом из раздела 1, а затем выполните этот скрипт.

  7. Повторите шаги 5 и 6 для любых дополнительных экземпляров SQL Server, к которым вы хотите получить доступ к контейнеру.

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

В этом разделе описано, как создать AdventureWorks2022 резервную копию базы данных в экземпляре SQL Server, в контейнер, созданный в разделе 1.

Заметка

Если вы хотите создать резервную копию базы данных SQL Server 2012 (11.x) с пакетом обновления 1 (SP1) или базы данных SQL Server 2014 (12.x) в этом контейнере, можно использовать устаревший синтаксис, описанный здесь , для резервного копирования по URL-адресу с помощью синтаксиса WITH CREDENTIAL .

Чтобы создать резервную копию базы данных в хранилище BLOB-объектов, выполните следующие действия.

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server в виртуальной машине Azure.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт.

    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.
    USE master;
    ALTER DATABASE AdventureWorks2022
       SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
    
  4. Откройте обозреватель объектов и подключитесь к хранилищу Azure с помощью учетной записи хранения и ключа учетной записи.

    1. Разверните контейнеры, разверните контейнер, созданный в разделе 1, и убедитесь, что резервная копия из шага 3 выше отображается в этом контейнере.

    Screenshots indicating the multistep process to connect to Azure Storage account.

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

В этом разделе вы восстановите AdventureWorks2022 базу данных в экземпляре SQL Server на виртуальной машине Azure.

Заметка

В целях упрощения в этом учебнике для файлов данных и журналов применяется тот же контейнер, который использовался для резервной копии базы данных. В рабочей среде обычно используется несколько контейнеров, а также несколько файлов данных. Вы также можете рассмотреть возможность чередовать резервную копию по нескольким blob-объектам, чтобы повысить производительность резервного копирования при резервном копировании большой базы данных.

Чтобы восстановить AdventureWorks2022 базу данных из хранилища BLOB-объектов Azure в экземпляр SQL Server на виртуальной машине Azure, выполните следующие действия.

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД на виртуальной машине Azure.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
       WITH
          MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Data.mdf'
         ,MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Log.ldf'
    --, REPLACE
    
  4. Откройте обозреватель объектов и подключитесь к экземпляру SQL Server Azure.

  5. В обозревателе объектов разверните узел баз данных и убедитесь, что AdventureWorks2022 база данных восстановлена (при необходимости обновите узел)

    1. Щелкните правой кнопкой мыши AdventureWorks2022 и выберите "Свойства".
    2. Выберите файлы и убедитесь, что пути для двух файлов базы данных являются URL-адресами, указывающими на большие двоичные объекты в контейнере хранилища BLOB-объектов Azure (нажмите кнопку "Отмена " при завершении).

    Screenshots from SSMS of the [!INCLUDE [sssampledbobject-md](../includes/sssampledbobject-md.md)] database on the Azure VM.

  6. В обозревателе объектов подключитесь к хранилищу Azure.

    1. Разверните контейнеры, разверните контейнер, созданный в разделе 1, и убедитесь, что AdventureWorks2022_Data.mdf в этом контейнере отображается и AdventureWorks2022_Log.ldf из шага 3 выше, а также файл резервной копии из раздела 3 (при необходимости обновите узел).

    Screenshot from Object Explorer in SSMS showing the data files within container on Azure beneath a SQL Server instance entry.

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

В этом разделе описано, как создать AdventureWorks2022 резервную копию базы данных в виртуальной машине Azure с помощью резервного копирования моментальных снимков файлов для выполнения почти мгновенной резервной копии с помощью моментальных снимков Azure. Дополнительные сведения о резервных копиях моментальных снимков файлов см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.

Чтобы создать резервную копию базы данных с помощью резервного AdventureWorks2022 копирования моментальных снимков файлов, выполните следующие действия.

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД на виртуальной машине Azure.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его (не закрывайте окно запроса — этот скрипт необходимо будет выполнить еще раз на шаге 5). Эта системная хранимая процедура позволяет просмотреть существующие резервные копии моментальных снимков файлов для каждого файла, входящего в состав указанной базы данных. Обратите внимание на то, что для данной базы данных резервных копий моментальных снимков файлов нет.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали ранее в разделе 1, а затем выполните этот скрипт. Обратите внимание на то, как быстро выполняется это резервное копирование.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. Проверив успешность выполнения скрипта в шаге 4, выполните приведенный ниже скрипт еще раз. Обратите внимание на то, что в результате операции резервного копирования моментальных снимков файлов в шаге 4 были созданы моментальные снимки как файлов данных, так и файлов журналов.

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

    A screenshot from SSMS of the results of fn_db_backup_file_snapshots, showing snapshots.

  6. В обозревателе объектов в экземпляре SQL Server на виртуальной машине Azure разверните узел баз данных и убедитесь, что AdventureWorks2022 база данных восстановлена в этом экземпляре (при необходимости обновите узел).

  7. В обозревателе объектов подключитесь к хранилищу Azure.

  8. Разверните контейнеры, разверните контейнер, созданный в разделе 1, и убедитесь, что на AdventureWorks2022_Azure.bak шаге 4 выше в этом контейнере отображается файл резервной копии из раздела 3 и файлы базы данных из раздела 4 (при необходимости обновите узел).

    A screenshot from Object Explorer in SSMS showing the snapshot backup on Azure.

6. Создание действия и журнала резервного копирования с помощью резервного копирования моментальных снимков файлов

В этом разделе описано, как создать действия в AdventureWorks2022 базе данных и периодически создавать резервные копии журналов транзакций с помощью резервных копий моментальных снимков файлов. Дополнительные сведения об использовании резервных копий моментальных снимков файлов см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.

Чтобы создать действия в AdventureWorks2022 базе данных и периодически создавать резервные копии журналов транзакций с помощью резервных копий моментальных снимков файлов, выполните следующие действия.

  1. Запустите среду SSMS.

  2. Откройте два новых окна запросов и подключите каждый экземпляр SQL Server ядра СУБД в виртуальной машине Azure.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в одно из окон запросов, а затем выполните этот скрипт. Обратите внимание, что в Production.Location таблице есть 14 строк, прежде чем добавлять новые строки на шаге 4.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. Скопируйте и вставьте приведенные ниже скрипты Transact-SQL в два отдельных окна запросов. Измените в URL-адресе имя учетной записи хранения и контейнер, которые вы указали в разделе 1, а затем одновременно выполните эти скрипты в отдельных окнах запросов. На выполнение скриптов потребуется приблизительно семь минут.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count INT=1, @inner INT;
    WHILE @count < 400
       BEGIN
          BEGIN TRAN;
             SET @inner =1;
                WHILE @inner <= 75
                   BEGIN;
                      INSERT INTO AdventureWorks2022.Production.Location
                         (Name, CostRate, Availability, ModifiedDate)
                            VALUES (NEWID(), .5, 5.2, GETDATE());
                      SET @inner = @inner + 1;
                   END;
          COMMIT;
       WAITFOR DELAY '00:00:01';
       SET @count = @count + 1;
       END;
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;
    WHILE @count <= 7
       BEGIN
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location);
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. Просмотрите выходные данные первого скрипта и обратите внимание на то, что последняя строка теперь имеет номер 29 939.

    A screenshot from SSMS showing a result set with row count of 29,939.

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

    A screenshot from SSMS showing the result set of backup snapshot history.

  7. В обозревателе объектов подключитесь к хранилищу Azure.

  8. Разверните контейнеры, разверните контейнер, созданный в разделе 1, и убедитесь, что отображаются семь новых файлов резервной копии, а также файлы данных из предыдущих разделов (при необходимости обновите узел).

    A screenshot from Object Explorer in SSMS with multiple snapshots in Azure Container.

7. Восстановление базы данных на момент времени

В этом разделе вы восстановите AdventureWorks2022 базу данных до точки во времени между двумя резервными копиями журнала транзакций.

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

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

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру SQL Server ядра СУБД на виртуальной машине Azure.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его. Убедитесь, что Production.Location таблица содержит 29 939 строк, прежде чем восстановить ее до точки во времени, когда на шаге 4 меньше строк.

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

    A screenshot of the SSMS results showing a row count of 29,939.

  4. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Выберите два смежных файла резервных копий журнала и укажите вместо их имен дату и время, требуемые для этого скрипта. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имена файлов для первой и второй резервных копий, укажите время STOPAT в формате "June 26, 2018 01:48 PM" (26 июня, 2018 13:48), а затем выполните этот скрипт. Выполнение скрипта займет несколько минут.

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count
    ALTER DATABASE AdventureWorks2022 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'
       WITH NORECOVERY,REPLACE;
    RESTORE LOG AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    ALTER DATABASE AdventureWorks2022 set multi_user;
    -- get new count
    SELECT COUNT (*) FROM AdventureWorks2022.Production.Location ;
    
  5. Просмотрите выходные данные. Обратите внимание на то, что после восстановления число строк равно 18 389 — это число строк межу резервными копиями журнала 5 и 6 (ваше число строк может быть другим).

    18-thousand-rows.JPG.

8. Восстановление новой базы данных из резервной копии журнала

В этом разделе вы восстановите AdventureWorks2022 базу данных в качестве новой базы данных из резервной копии журнала транзакций моментального снимка файлов.

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

Восстановление из резервной копии журнала транзакций, созданной посредством резервного копирования моментальных снимков файлов, выполняется очень быстро — существенно быстрее, чем при использовании традиционных потоковых резервных копий. В случае с традиционными потоковыми резервными копиями вам потребовалось бы использовать полную резервную копию базы данных, а также, возможно, разностную резервную копию и все или часть резервных копий журнала транзакций (либо новую полную резервную копию базы данных). При использовании же резервных копий журнала на основе моментальных снимков файлов требуется только самая последняя резервная копия журнала (либо любая другая резервная копия журнала, либо две смежные резервные копии журнала для восстановления на определенный момент времени). Если точнее, требуется только один резервный набор моментальных снимков файлов, так как каждая операция резервного копирования журнала с помощью моментальных снимков файлов создает моментальный снимок каждого файла базы данных (то есть файла данных и файла журнала).

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

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру ЯДРА СУБД SQL Server в виртуальной машине Azure.

    Заметка

    Если это не та виртуальная машина Azure, которую вы использовали в предыдущих разделах, выполните инструкции из раздела 2. Создание учетных данных SQL Server с помощью подписанного URL-адреса. Если вы хотите восстановить данные в другой контейнер, выполните для нового контейнера действия из раздела 1. Создание хранимой политики доступа и хранилища с общим доступом.

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Выберите файл резервной копии журнала, который нужно использовать. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имя файла резервной копии журнала, а затем выполните этот скрипт.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'
        WITH MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Data.mdf'
       , MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Log.ldf'
       , RECOVERY
    --, REPLACE
    
  4. Просмотрите выходные данные, чтобы проверить успешность восстановления.

  5. В обозревателе объектов подключитесь к хранилищу Azure.

  6. Разверните контейнер, разверните контейнер, созданный в разделе 1 (при необходимости) и убедитесь, что новые файлы данных и журналов отображаются в контейнере вместе с большими двоичными объектами из предыдущих разделов.

    Screenshot of SQL Server Management Studio's storage browser of Azure containers showing the data and log files for the new database.

9. Управление резервными наборами данных и резервными копиями моментальных снимков файлов

В этом разделе описано, как удалить резервный набор с помощью хранимой процедуры sp_delete_backup (Transact-SQL ). Эта процедура удаляет файл резервной копии и моментальный снимок файла для каждого файла базы данных, связанного с резервным набором данных.

Заметка

Если вы пытаетесь удалить резервный набор, просто удалив файл резервной копии из контейнера хранилища BLOB-объектов Azure, то будет удален только сам файл резервной копии. Связанные моментальные снимки файлов останутся. Если вы найдете себя в этом сценарии, используйте системную функцию sys.fn_db_backup_file_snapshots (Transact-SQL), чтобы определить URL-адрес моментальных снимков потерянных файлов и использовать хранимую процедуру sp_delete_backup_file_snapshot (Transact-SQL), чтобы удалить каждый потерянный моментальный снимок файла. Дополнительные сведения см. в разделе Резервные копии моментальных снимков файлов для файлов базы данных в Azure.

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

  1. Запустите среду SSMS.

  2. Откройте новое окно запроса и подключитесь к экземпляру ядра СУБД SQL Server в виртуальной машине Azure (или к любому экземпляру SQL Server с разрешениями на чтение и запись в этом контейнере).

  3. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Выберите резервную копию журнала, которую нужно удалить вместе со связанными моментальными снимками файлов. В URL-адресе измените имя учетной записи хранения и контейнер, которые вы указали в разделе 1, укажите имя файла резервной копии журнала, а затем выполните этот скрипт.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. В обозревателе объектов подключитесь к хранилищу Azure.

  5. Разверните контейнеры, разверните контейнер, созданный в разделе 1, и убедитесь, что файл резервной копии, используемый на шаге 3, больше не отображается в этом контейнере (при необходимости обновите узел).

    Two screenshots of SQL Server Management Studios storage browser showing Azure containers and the deletion of the transaction log backup blob.

  6. Чтобы убедиться в том, что оба моментальных снимка файлов были удалены, скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окно запроса, а затем выполните его.

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

    Screenshot of the SSMS results pane showing two file snapshots deleted.

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

Когда вы закончите работу с этим руководством, не забудьте в целях экономии ресурсов удалить группу ресурсов, созданную в этом руководстве.

Чтобы удалить группу ресурсов, выполните следующий код PowerShell:

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

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

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

# Set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionId $subscriptionID
  
# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName

Далее