Поделиться через


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

Применимо к: SQL Server 2016 (13.x) и более поздних версий

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

Поддержка Azure Blob Storage в SQL Server была введена в SQL Server 2012 (11.x) с Service Pack 1 CU2 и улучшена в более поздних версиях. Общие сведения о функциональных возможностях и преимуществах использования этой функции см. в файлах данных SQL Server в Microsoft Azure.

В этом руководстве показано, как работать с файлами данных SQL Server в хранилище BLOB-объектов Azure в нескольких разделах. Каждый раздел ориентирован на определенную задачу, и вы должны завершить разделы в последовательности. Сначала вы узнаете, как создать новый контейнер в хранилище объектов Blob с хранимой политикой доступа и разделенной подписью доступа. Затем вы узнаете, как создать учетные данные 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 (13.x) или более поздней версии и AdventureWorks2025 базы данных. Кроме того, учетная запись, используемая для использования команд BACKUPRESTORE, должна находиться в роли базы данных db_backupoperator с разрешениями на изменение любых учетных данных.

Это важно

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

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

В этом разделе вы используете сценарий Azure PowerShell, чтобы создать общую подпись доступа в контейнере Azure Blob Storage с использованием политики хранимого доступа.

Замечание

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

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

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

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

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

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

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

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

  1. Откройте окно PowerShell или Windows PowerShell ISE (см. предыдущие требования к версии).

  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
    Set-Clipboard -Value $tSql
    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 с помощью общей подписи доступа

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

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

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

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

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

  3. В новом окне запроса вставьте CREATE CREDENTIAL инструкцию с подписью общего доступа из раздела 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://<storage-account>.blob.core.windows.net/<container-name>]
    -- 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 инструкцию с подписью общего доступа из раздела 1 и выполните этот скрипт.

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

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

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

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

  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://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak';
    
  4. Откройте обозреватель объектов и подключитесь к хранилищу Azure с помощью учетной записи хранения и ключа учетной записи.

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

    Снимок экрана: многоэтапный процесс подключения к учетной записи хранения Azure.

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

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

Замечание

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

Чтобы восстановить базу данных AdventureWorks2025 из хранилища 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://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Log.ldf';
         --, REPLACE
    
  4. Откройте обозреватель объектов и подключитесь к экземпляру SQL Server Azure.

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

    1. Щелкните правой кнопкой мыши AdventureWorks2025 и выберите "Свойства".

    2. Выберите Файлы и убедитесь, что пути для двух файлов базы данных являются URL-адресами, указывающими на BLOB-объекты в вашем контейнере Azure Blob Storage (выберите Отмена, когда закончите).

    Снимок экрана: SSMS базы данных AdventureWorks2022 на виртуальной машине Azure.

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

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

    Снимок экрана из Обозревателя объектов в SSMS, показывающий файлы данных в контейнере в Azure под записями экземпляра SQL Server.

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

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

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

  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://<storage-account>.blob.core.windows.net/<container-name>/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');
    

    Снимок экрана из SSMS результатов fn_db_backup_file_snapshots, показывающий моментальные снимки.

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

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

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

    Снимок экрана обозревателя объектов в SSMS, показывающий резервную копию моментального снимка в Azure.

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

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

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

  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 AS INT = 1, @inner AS INT;
    
    WHILE @count < 400
        BEGIN
            BEGIN TRANSACTION;
            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 TRANSACTION;
            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://<storage-account>.blob.core.windows.net/<container-name>/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.

    Снимок экрана SSMS, показывающий результирующий набор с количеством строк 29 939.

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

    Скриншот из SSMS, показывающий результат истории резервного копирования моментальных снимков.

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

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

    Снимок экрана из Обозревателя объектов в SSMS с несколькими мгновенными снимками в контейнере Azure.

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

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

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

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

  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;
    

    Снимок экрана: результаты SSMS с числом строк 29 939.

  4. Скопируйте и вставьте приведенный ниже скрипт Transact-SQL в окне запроса. Выберите два смежных файла резервного копирования журналов и преобразуйте имя файла в дату и время, необходимое для этого скрипта. Измените URL-адрес соответствующим образом для имени учетной записи хранения и контейнера, указанного в разделе 1. Укажите имена первого и второго файлов резервного копирования, укажите время в формате STOPATJune 26, 2018 01:48 PM, а затем выполните этот скрипт. Процедура займет всего несколько минут.

    -- 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://<storage-account>.blob.core.windows.net/<container-name>/<firstbackupfile>.bak'
        WITH NORECOVERY, REPLACE;
    
    RESTORE LOG AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<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 000 строк.

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

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

В этом сценарии выполняется восстановление экземпляра 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://<storage-account>.blob.core.windows.net/<container-name>/<logbackupfile.bak>'
    WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Data.mdf',
         MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Log.ldf',
         RECOVERY;
         --, REPLACE
    
  4. Просмотрите выходные данные, чтобы проверить успешность восстановления.

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

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

    Снимок экрана обозревателя хранилищ SQL Server Management Studio для контейнеров Azure, показывающий файлы данных и файлы журналов для новой базы данных.

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

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

Замечание

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

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

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

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

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

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

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

    Снимок экрана браузера хранилища SQL Server Management Studio, показывающий контейнеры Azure и удаление резервной копии журнала транзакций в формате blob.

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

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

    Снимок экрана: область результатов SSMS с удаленными двумя моментальными снимками файлов.

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