Недавно я установил новый экземпляр Windows Server 2012 R2 с SQL Server 2016 Web Edition и пытаюсь настроить автоматическое резервное копирование в Azure, но безуспешно. Сначала я создал учетную запись хранения в Azure, затем создал подпись общего доступа (SAS), и здесь я начинаю теряться. Отсюда я пробовал:
Создание локальных учетных данных с помощью этого скрипта:
CREATE CREDENTIAL [BlobUrlWithContainerName]
WITH IDENTITY = '[FriendlyName]',
SECRET = '[SAS Token]'`
В приведенном выше сценарии не сообщалось об ошибках, однако выполнение команды BACKUP DATABASE для URL-адреса приводит к неподдерживаемой команде (полная ошибка: Cannot open backup device 'https://[storagename].blob.core.windows.net/[containername]/AdventureWorks2016.bak'. Operating system error 50(The request is not supported.)
.
Затем я попытался пройти через SSMS для отдельного варианта резервного копирования базы данных, щелкнув правой кнопкой мыши базу данных и выбрав Tasks ==> Back Up..
, изменив «Резервное копирование на» на URL-адрес и нажав «Добавить». Когда я это сделаю, мне будет предложено следующее:
Зарегистрированных контейнеров не существует (и я не могу найти никаких подробностей о том, как их зарегистрировать), поэтому я нажимаю New Container, что дает мне Connect to a Microsoft Subscription
диалог. Я вошел в свою учетную запись Azure, вижу две подписки (Бесплатная пробная версия, срок действия которой истек, и Pay As You Go, которая является правильной), выберите Pay As You Go, а затем, когда я перейду, чтобы выбрать свою учетную запись хранения, диалоговое окно закрывается, и я получаю сообщение об ошибке «Индекс вне допустимого диапазона», что означает, что он не может найти никаких контейнеров. Вот соответствующие скриншоты:
Я не понимаю, куда идти дальше. Любые идеи?
Два варианта резервного копирования: РЕЗЕРВНОЕ КОПИРОВАНИЕ БД НА URL-адрес С УЧЕТНЫМИ ДАННЫМИ - создает большой двоичный объект, требует учетных данных для использования токена, а не SAS, при создании [Не удается разделить резервные копии на несколько файлов]
РЕЗЕРВНОЕ КОПИРОВАНИЕ БД НА URL [без учетных данных] - создает блоки, требует, чтобы имя учетных данных совпадало с URL-адресом [учетная запись хранения + контейнер], SAS в секрете, [CAN разделяет резервные копии на несколько файлов]
Удаление ведущего символа '?' почти никогда не упоминается и заполняет всех вокруг.
Ошибка операционной системы 50 (для меня на Windows Server 2012 R2; sql server SQL Server 2016) возможна, даже если все правильно: у меня есть задание, которое выполняет резервное копирование dbs в Azure с чередованием файлов - сбой 1 базы данных в пятницу, успешное выполнение того же db без менять что-нибудь в субботу ... только чтобы подлить масла в огонь.
Возможно, именно ваша аутентификация является причиной того, что вы не можете найти контейнеры.
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 trailing forward slash.
WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
, SECRET = 'sharedaccesssignature' –- this is the shared access signature token
GO
Источник: https://docs.microsoft.com/en-us/sql/t-sql/statements/create-credential-transact-sql.
/ * Оставляем это как исторический контекст * / REFER «MSDN: Резервное копирование SQL Server на URL: рекомендации и устранение неполадок»
Я нашел ваш пост, потому что меня тоже поразила ошибка 50, даже после прочтения «MSDN: Учебное пособие: использование службы хранилища BLOB-объектов Microsoft Azure с базами данных SQL Server 2016»
Я думаю, тебе стоит получить доступ http://portal.azure.com а затем войдите в свою подписку Azure. Вы меняете «каталоги» с Пробной на Плату по мере использования в правом верхнем углу экрана ...
Кстати, я думаю, вам может понадобиться общая подпись доступа в SQL 2016, потому что, когда я копирую сценарий SQL 2012 {Backup DB X using CREDENTIAL Y} в экземпляр 2016, он терпит неудачу (ЗАПРЕЩЕНО) НЕСМОТРЯ на то, что они говорят, что вы можете использовать учетные данные ...
Кроме того, ошибка операционной системы 50 (запрос не поддерживается) заставляет меня думать, что сервер 2012 r2 может быть ошибкой ... тестирование в настоящее время на моем ноутбуке (Windows 8) дает такую же ошибку.
Удачи.
Для меня все было правильно, ЗА ИСКЛЮЧЕНИЕМ токена SAS. Маркер SAS НЕ должен начинаться с символа "?" знак вопроса.
Пример токена SAS (секретный ключ / пароль)
sv=2017-01-02&ss=abcd&srt=abc&sp=rwdlacup&se=2027-09-11T05:00:00Z&st=2017-09-11T04:55:00Z&spr=https&sig=randomcharactersandnumbers
У меня была аналогичная проблема (Operating System error 50 (The request is not supported)
), и мне помогло использование идентификатора учетной записи хранения и ключа доступа вместо SAS-ключа. Не оптимально во всех случаях, но решила мой случай.
Создание учетных данных:
IF NOT EXISTS
(SELECT * FROM sys.credentials
WHERE name = '<mycredentialname>')
CREATE CREDENTIAL [<mycredentialname>] WITH IDENTITY = '<mystorageaccountname>'
,SECRET = '<mystorageaccountaccesskey>';
Используя учетные данные:
BACKUP DATABASE AdventureWorks2016
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016.bak'
WITH CREDENTIAL = '<mycredentialname>'
,COMPRESSION
,STATS = 5;
GO