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


Рекомендации по резервному копированию SQL Server по URL-адресу для Хранилища BLOB-объектов Microsoft Azure и устранение неполадок

Область применения: SQL Server Управляемый экземпляр SQL Azure

Эта статья содержит рекомендации и советы по устранению неполадок для резервного копирования и восстановления SQL Server на Azure Blob Storage.

Дополнительные сведения об использовании Хранилища BLOB-объектов Azure для операций резервного копирования или восстановления SQL Server см. в следующих разделах.

Управление резервными копиями

В следующем списке перечислены общие рекомендации по управлению резервным копированием.

  • Рекомендуется присваивать каждому резервному файлу уникальное имя, чтобы предотвратить случайное перезаписывание BLOB-объектов.

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

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

  • Сбой во время резервного копирования может привести к созданию неработоспособного файла резервной копии. Рекомендуем периодически идентифицировать неудачные резервные копии и удалять файлы BLOB. Дополнительные сведения см. в статье о удалении резервных BLOB-файлов с активными захватами.

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

  • Задайте аргументы MAXTRANSFERSIZE и BLOCKSIZE, как рекомендуется в разделе Резервное копирование в SQL Server по URL-адресу.

  • SQL Server не зависит от используемого типа избыточности хранилища. Резервное копирование на страничные и блочные объекты (BLOB) поддерживается для каждой степени избыточности хранилища (LRS/ZRS/GRS/RA-GRS/RA-GZRS и т. д.).

Обработка больших файлов

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

WITH COMPRESSION Использование параметра, как рекомендуется в разделе "Управление резервными копиями", важно при резервном копировании больших файлов.

Устранение неполадок резервного копирования или восстановления из URL-адреса

Ниже приведено несколько быстрых способов устранения неполадок при резервном копировании или восстановлении в Хранилище BLOB-объектов Azure.

Чтобы избежать ошибок из-за неподдерживаемых параметров или ограничений, просмотрите список ограничений и поддержку команд BACKUP и RESTORE в статье Резервное копирование и восстановление SQL Server в Microsoft Azure Blob Storage.

Ошибка инициализации

Параллельное резервное копирование в один blob приводит к сбою одной из резервных копий с ошибкой Ошибка инициализации.

  • В SQL Server 2016 (13.x) и более поздних версиях блочный BLOB-объект предпочтителен для резервного копирования по URL-адресу.

  • При использовании страничных BLOB-объектов BACKUP TO URL можно использовать флаг трассировки 3051 для включения записи в определенный журнал ошибок со следующим форматом: BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, где \<action> один из следующих вариантов:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Вы также можете найти сведения, просмотрив Просмотр событий Windows в журналах приложений с именемSQLBackupToUrl.

Не удалось выполнить запрос из-за ошибки устройства ввода-вывода.

При резервном копировании больших баз данных следует учитывать COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZE, а также несколько аргументов URL-адресов. См. статью Резервное копирование сверхбольших баз данных (VLDB) в хранилище BLOB-объектов Azure.

Ошибка:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Пример резолюции

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536;

Метка файла сообщений на устройстве не выровнена

При восстановлении из сжатой резервной копии может появиться следующее сообщение об ошибке:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

Чтобы устранить эту ошибку, повторно выполните инструкцию RESTORE с указанным параметром BLOCKSIZE = 65536.

Сбой резервного копирования может привести к объектам с активными арендами.

Ошибка во время резервного копирования из-за блобов с активной арендой: Failed backup activity can result in blobs with active leases.

Если оператор резервного копирования повторно выполнен, операция резервного копирования может завершиться с ошибкой, аналогичной следующему выводу:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Если инструкция восстановления выполнялись в резервном файле большого двоичного объекта с активной арендой, операция резервного копирования может завершиться со следующей ошибкой:

Exception Message: The remote server returned an error: (409) Conflict..

Если возникает такая ошибка, файлы больших двоичных объектов следует удалить. Дополнительные сведения об этом сценарии и устранении этой проблемы см. в статье Удаление файлов BLOB-объектов резервного копирования с использованием активных аренд.

Ошибка ОС 50. Запрос не поддерживается

При резервном копировании базы данных может появиться ошибка Operating system error 50(The request is not supported) по следующим причинам:

  • Указанная учетная запись хранения не является учетной записью хранения общего назначения версии 1 или 2.
  • Маркер SAS содержал символ ? в начале токена в момент создания учетных данных. Если это так, удалите это.
  • Текущее подключение не позволяет подключиться к учетной записи хранения с текущего компьютера с помощью Обозревателя службы хранилища или SSMS.
  • Политика, назначенная токену SAS, истекла. С помощью Обозревателя службы хранилища Azure создайте новую политику и либо создайте новый маркер SAS с этой политикой, либо измените учетные данные и повторите попытку резервного копирования.
  • Корневой сертификат отсутствует в Доверенном корневом хранилище сертификатов. Дополнительные сведения см. в разделе "Корневые центры сертификации Azure".

Ошибки проверки подлинности

WITH CREDENTIAL — это новый параметр, необходимый при резервном копировании или восстановлении в Хранилище BLOB-объектов Azure.

Ошибка, связанная с учетными данными, может быть следующей: The credential specified in the **BACKUP** or **RESTORE** command does not exist.

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

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

Учетные данные существуют, но имя входа, используемое для выполнения команды резервного копирования, не имеет разрешений на доступ к учетным данным. Используйте учетную запись в роли db_backupoperator с разрешениями Изменить любые учетные данные.

Проверьте имя учетной записи хранилища и значение ключа. Сведения, хранящиеся в учетных данных, должны соответствовать значениям свойств учетной записи хранения Azure, которую вы используете в операциях резервного копирования и восстановления.

Ошибки 400 (недопустимый запрос)

При использовании SQL Server 2012 (11.x) может возникнуть ошибка при выполнении резервной копии, аналогичной следующим выходным данным:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (400) Bad Request.

Это вызвано версией TLS, поддерживаемой учетной записью хранения Azure. Изменение поддерживаемой версии TLS или использование обходного пути, указанного в статье базы знаний 4017023.

Ошибки прокси-сервера

При использовании прокси-серверов для доступа к Интернету могут возникнуть следующие проблемы:

Регулирование соединений прокси-серверами

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

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Если вы используете страничные BLOB-объекты, и включите подробное ведение журнала с помощью флага трассировки 3051, в журналах может появиться следующее сообщение: HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

Параметры прокси-сервера по умолчанию не были выбраны

Иногда параметры по умолчанию не применяются, что приводит к ошибкам аутентификации прокси-сервера, таким как:

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

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

  1. Создайте файл конфигурации BackuptoURL.exe.config со следующим XML-кодом:

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Поместите файл конфигурации в папку Binn экземпляра SQL Server. Например, если SQL Server установлен на C диске компьютера, поместите файл конфигурации в C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exeне вызывается при использовании ключей SAS, но активируется при использовании ключа доступа. Убедитесь, что вы используете ключи доступа или можете получить следующую ошибку:

    Ошибка операционной системы 50 ("Запрос не поддерживается")

Распространенные ошибки и способы их устранения

Проблема Решение
Ошибка 3063. Сбой записи на устройство https://storageaccount/container/name.bak резервного блочного BLOB-объекта. На устройстве достигнуто предельное число допустимых блоков. Чтобы исправить эту проблему, разбейте целевой объект резервного копирования на несколько файлов и убедитесь, что используете следующие параметры в команде резервного копирования: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Ошибка 3035. Сбой создания разностной резервной копии для одной или нескольких баз данных. Это происходит, если вы настроили службу резервного копирования Azure для создания резервных копий баз данных SQL или снимков виртуальных машин, что не создает резервную копию в режиме только копирования, и в результате сбой происходит в плане обслуживания или запуске задачи агента SQL по требованию. Чтобы устранить эту проблему, добавьте эти разделы реестра в ВМ, которые хостят экземпляры SQL Server, по адресу раздела [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT], и добавьте "USEVSSCOPYBACKUP"="TRUE".
Ошибка 3201: сбой резервного копирования — ошибка операционной системы 50 (запрос не поддерживается). Повторно создайте маркер подписанного URL-адреса (SAS) с помощью обозревателя службы хранилища Azure. Вы можете создать новую политику с помощью обозревателя службы хранилища Azure и создать новый маркер SAS с этой политикой в обозревателе службы хранилища Azure. Повторно создайте учетные данные с помощью нового маркера SAS, созданного в Службе хранилища Azure, и повторите попытку резервного копирования. Дополнительные сведения см. в разделе известные проблемы с BACKUP TO URL. Убедитесь, что ваша группа безопасности сети (NSG) и/или брандмауэр разрешает входящие и исходящие соединения через порты 1433 и 443.
Ошибка 3271: резервное копирование не удалось из-за ошибки TLS - резервное копирование через URL завершилось исключением от удаленной конечной точки. Это может произойти в SQL Server версии 2012, 2014 и 2016. Резервирование данных в службе хранилища BLOB-объектов Microsoft Azure по URL-адресу несовместимо с TLS 1.2 и может быть решено, следуя инструкциям в KB4017023.
Ошибка 3271. При резервном копировании по URL-адресу получено исключение от удаленной конечной точки. Сообщение об исключении: не удалось разрешить имя удаленного сервера. Это сообщение отображается, если для настройки резервного копирования использовался неправильный ключ учетных данных, секрета или SAS. Удалите учетные данные и создайте их повторно. Для SQL Server 2012/2014 используйте удостоверение учетной записи хранения и ключ доступа, а для SQL Server 2016 и более поздних версий используйте SAS.
Ошибка 18210. Исключение. Удаленный сервер вернул ошибку: (400) Неправильный запрос. Чтобы устранить проблему, измените минимальную версию TLS для учетной записи хранения на 1.0 (Учетная запись хранения>Конфигурация>Минимальная версия TLS), или включите усиленную криптографию, как описано в KB4017023.
Сообщение об исключении: Удаленный сервер возвратил ошибку: (412) в настоящее время существует аренда для BLOB, и в запросе не указан идентификатор аренды. Определите объекты BLOB в обозревателе хранилища Azure размером в 1 ТБ, прекратите аренду, удалите объект BLOB и повторите операцию резервного копирования.
Ошибка. Удаленный сервер вернул ошибку 403 Forbidden (Запрещено). Воссоздайте учетную запись хранения, учетные данные и маркер SAS, чтобы устранить проблему.
Резервное копирование базы данных 1 ТБ завершается ошибкой в SQL Server 2012/2014. Резервное копирование размером 1 ТБ — это известное ограничение для страничных BLOB-объектов до SQL Server 2016 (13.x). Используйте сжатие резервных копий, добавив предложение WITH COMPRESSION в инструкцию резервного копирования T-SQL или обновив экземпляр SQL Server до SQL Server 2016 (13.x) и более поздних версий.
Ошибка. При резервном копировании по URL-адресу получено исключение от удаленной конечной точки. Сообщение об исключении. Удаленный сервер вернул ошибку "(416) Указанный диапазон страниц недопустим". Это может возникнуть, если вы находитесь в SQL Server 2012 (11.x) и SQL Server 2014 (12.x), а размер резервного копирования увеличивается до 1 ТБ. Разделите файлы резервных копий и/или используйте сжатие резервных копий для решения проблемы.
Сбой резервного копирования при использовании плана обслуживания. В плане обслуживания есть несколько ошибок. Попробуйте использовать T-SQL для выполнения резервной копии. Если T-SQL работает, можно создать задание агента SQL для запуска для резервного копирования баз данных.
Сбой резервного копирования из-за достижения ограничений виртуальной машины. Если вы получаете ошибки, связанные с ограничением операций ввода-вывода в секунду на диск или виртуальную машину, резервные копии могут замедлить или завершиться сбоем. Чтобы отслеживать ограничения на IOPS/виртуальные машины, используйте Метрики Azure Monitor и при необходимости измените размер виртуальной машины или диска, чтобы устранить проблему.
Удаленный сервер вернул ошибку: (409) Конфликт для SQL Server 2012/2014" Учетные записи хранения с иерархическим пространством имен оснащены для блочных BLOB-объектов, а не страничных BLOB-объектов. Учетные записи хранения без этой функции не следует использовать для операции BACKUP TO URL в SQL Server 2014 (12.x).