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


SQL Server резервное копирование по URL-адресу для Microsoft Azure Blob Storage лучшие практики и устранение неполадок

Применимо к:SQL ServerAzure SQL Managed Instance

В этой статье содержатся лучшие практики и советы по устранению неполадок бэкапа и восстановления данных SQL Server в Azure Blob Storage.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ниже приведены некоторые быстрые способы устранения ошибок при резервном копировании или восстановлении из Azure Blob Storage.

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

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

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

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

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

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Вы также можете найти информацию, просмотрив Windows Event Viewer в разделе Application logs с именем SQLBackupToUrl.

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

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

Ошибка:

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 содержал символ ? в начале токена в момент создания учетных данных. Если это так, удалите это.
  • Текущее подключение не может подключиться к учетной записи хранения с текущего компьютера с помощью Storage Explorer или SQL Server Management Studio (SSMS).
  • Политика, назначенная токену SAS, истекла. Создайте новую политику с помощью Azure Storage Explorer и создайте новый маркер SAS с помощью политики или измените учетные данные и повторите попытку резервного копирования.
  • Корневой сертификат отсутствует в Доверенном корневом хранилище сертификатов. Для получения дополнительной информации см. корневые центры сертификации Azure.

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

WITH CREDENTIAL — это новый параметр и требуется для резервного копирования или восстановления из Azure Blob Storage.

Ошибка, связанная с учетными данными, может быть следующей: 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 Storage. Изменение поддерживаемой версии 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. Эта ошибка также может возникать, если резервная копия достигает максимального поддерживаемого размера. Например, в SQL Server 2022 и более ранних версиях максимальный размер резервного копирования составляет 12,8 ТБ, вычисляется как 64 полосы × 50 000 блоков × 4 МБ MAXTRANSFERSIZE.
Ошибка 3035. Сбой создания разностной резервной копии для одной или нескольких баз данных. Это происходит, если вы настроили службу Azure Backup для резервного копирования баз данных SQL или моментального снимка виртуальной машины, который не создает резервную копию только для копирования, что приводит к сбою плана обслуживания или задания агента SQL по запросу. Чтобы устранить эту проблему, добавьте эти разделы реестра на виртуальных машинах, где размещаются экземпляры SQL Server, в разделе реестра [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT], и добавьте "USEVSSCOPYBACKUP"="TRUE".
Ошибка 3201: сбой резервного копирования — ошибка операционной системы 50 (запрос не поддерживается). Повторно создайте токен с общей подписью доступа (SAS) с помощью Storage Explorer: вы можете создать новую политику с помощью Azure Storage Explorer и создать новый токен SAS, использующий эту политику. Re-create the credential используя этот новый SAS-токен, созданный с помощью Azure Storage, и попробуйте выполнить резервное копирование снова. Дополнительные сведения см. в разделе известные проблемы с BACKUP TO URL. Убедитесь, что ваша группа безопасности сети (NSG) и/или брандмауэр разрешает входящие и исходящие соединения через порты 1433 и 443.
Ошибка 3271: резервное копирование не удалось из-за ошибки TLS - резервное копирование через URL завершилось исключением от удаленной конечной точки. Это может произойти в SQL Server версиях 2012, 2014 и 2016. Резервное копирование в URL-адрес службы Microsoft Azure Blob Storage несовместимо с TLS 1.2 и может быть исправлено, следуя инструкциям в KB4017023.
Ошибка 3271. При резервном копировании по URL-адресу получено исключение от удаленной конечной точки. Сообщение об исключении: не удалось разрешить имя удаленного сервера. Это сообщение отображается, если для настройки резервного копирования использовался неправильный ключ учетных данных, секрета или SAS. Удалите учетные данные и создайте их повторно. Для SQL Server 2012/2014 используйте удостоверение учетной записи хранения и ключ доступа и для SQL Server 2016 и более поздних версий, используйте SAS.
Ошибка 18210. Исключение. Удаленный сервер вернул ошибку: (400) Неправильный запрос. Чтобы устранить проблему, измените минимальную версию TLS для учетной записи хранения на 1.0 (Учетная запись хранения>Конфигурация>Минимальная версия TLS), или включите усиленную криптографию, как описано в KB4017023.
Сообщение об исключении: Удаленный сервер возвратил ошибку: (412) в настоящее время существует аренда для BLOB, и в запросе не указан идентификатор аренды. Определите блобы в Azure Storage Explorer размером 1 ТБ, прекратите аренду, удалите блоб и повторите операцию резервного копирования.
Ошибка. Удаленный сервер вернул ошибку 403 Forbidden (Запрещено). Воссоздайте учетную запись хранения, учетные данные и маркер SAS, чтобы устранить проблему.
Backup для базы данных объемом 1 ТБ не удается на SQL Server 2012/2014. Резервные копии размером 1 ТБ — это известное ограничение на страничных двоичных объектах до 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).