Резервное копирование MSSQL в S3 и Azure Blob Storage через BACKUP TO URL
- Ошибка выполнения:
Cannot open backup device 'https://storageaccount.blob.core.windows.net/...'. - Сбой
Operating system error 50 (The request is not supported)илиSSL Security errorпри обращении к URL. - Превышение максимального размера блочного блоба при попытке сохранить однофайловый бэкап крупной базы 1С.
- Таймаут сетевого соединения при нестабильном интернет-канале до S3 хранилища.
1. Создание Master Key и SQL Credential с SAS-токеном или S3 ключами
-- 1. Создание Master Key в базе master (если не создан)
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongMasterKeyPassword123!';
-- 2. Создание Credential для Azure Blob (SAS Token) или S3 (SQL Server 2022+)
CREATE CREDENTIAL [https://mybackupstorage.blob.core.windows.net/sqlbackups]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2022-11-02&ss=b&srt=sco&sp=rwlac&se=2026-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=ABC123Signature...';2. Выполнение многопоточного бэкапа с разделением на полосы (Striping)
Для ускорения и обхода лимита размера одного файла используйте параллельную запись в несколько URL блобов:
BACKUP DATABASE [Enterprise1C]
TO URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe1.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe2.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe3.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe4.bak'
WITH COMPRESSION, CHECKSUM, STATS = 10, BLOCKSIZE = 65536, MAXTRANSFERSIZE = 4194304;3. Проверка содержимого удаленного бэкапа через T-SQL
RESTORE HEADERONLY
FROM URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe1.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe2.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe3.bak',
URL = N'https://mybackupstorage.blob.core.windows.net/sqlbackups/Enterprise1C_stripe4.bak'; Частые вопросы (FAQ)
Поддерживает ли SQL Server резервное копирование напрямую в S3-совместимые хранилища (MinIO, Ceph, Yandex Object Storage)?
Прямая нативная поддержка S3-совместимых REST API через синтаксис BACKUP TO URL появилась начиная с SQL Server 2022. Для более ранних версий требуется использование Azure Blob или сторонних утилит проксирования.
Почему при создании SAS-токена для SQL Server нельзя указывать ведущий знак вопроса '?' в Secret?
В диалекте T-SQL при создании CREDENTIAL для Azure Blob SAS-токен должен передаваться без ведущего символа '?'. Если оставить '?', SQL Server вернет ошибку аутентификации HTTP 403 Forbidden.
Какой максимальный размер бэкапа поддерживается при сохранении в один блоб Azure?
При использовании Block Blob в SQL Server 2016+ максимальный размер одного файла составляет до 12.8 ТБ (при использовании блока 100MB). При разделении на 64 URL-полосы (Stripes) поддерживаются базы объемом до десятков терабайт.
Как устранить ошибку SSL Handshake failure при выполнении бэкапа в S3?
Убедитесь, что на сервере включена поддержка TLS 1.2/1.3 в Windows Schannel, а также установлены доверенные корневые сертификаты УЦ, выпустившего SSL-сертификат для S3 эндпоинта.