Вопрос или проблема
Итак, мы уже некоторое время экспериментируем с Veeam Backup & Replication. Мы настроили выделенную виртуальную машину для Veeam Backup Server, которая выполняет ежедневные резервные копии всех наших компонентов инфраструктуры. Мы пока не приобрели лицензии, поэтому это тестовая версия Community (версия 11a build 11.0.1.1261 P20220302)
У нас есть несколько виртуальных машин с экземплярами SQL Server, содержащими базы данных. Мы используем опцию обработки приложений Veeam для резервного копирования баз данных и включаем их в файл резервной копии.
Однако мы сталкиваемся с проблемой, когда пытаемся выполнить восстановление баз данных из файла резервной копии, как на машине Veeam Backup Server, так и на другой локальной машине. Мы выполняем восстановление элементов приложения, как описано в документации Veeam B&R, а затем проходим этапы публикации данных на локальный (подготовительный) SQL Server с помощью Veeam SQL Explorer. Мы пробовали публиковать базу данных, восстанавливать файл .BAK или даже сохранять файлы MDF и LDF напрямую. Все операции завершаются неудачей из-за недостатка прав (см. журнал Veeam SQL Explorer ниже).
11/04/2022 00:17:32 21 (8876) Подключение к SQL Server localhost\SQL2019 с использованием аутентификации Windows (имя пользователя: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32 21 (8876) Подключение завершено успешно.
11/04/2022 00:17:32 21 (8876) Проверка совместимости версий базы данных (сервер: Microsoft SQL Server 2014, версия базы данных: 782)...
11/04/2022 00:17:32 21 (8876) Целевой сервер (localhost\SQL2019) определён как Microsoft SQL Server 2019 (версия: 904).
11/04/2022 00:17:32 21 (8876) Подключение к SQL Server localhost\SQL2019 с использованием аутентификации Windows (имя пользователя: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32 21 (8876) Подключение к SQL Server localhost\SQL2019 с использованием аутентификации Windows (имя пользователя: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32 21 (8876) Проверка прав учетной записи для сервера 'localhost'...
11/04/2022 00:17:32 21 (8876) Проверка завершена успешно.
11/04/2022 00:17:33 16 (9136) Публикация базы данных...
11/04/2022 00:17:33 16 (9136) ID точки восстановления: 3147eb18-d76a-47f1-ab4c-ec5a67dd81f1
11/04/2022 00:17:33 16 (9136) SQL сервер: localhost\SQL2019
11/04/2022 00:17:33 16 (9136) Имя базы данных: bigsoft_33o_vide
11/04/2022 00:17:33 16 (9136) Подключение к SQL Server localhost\SQL2019 с использованием аутентификации Windows (имя пользователя: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:34 17 (11180) Получение сессий мгновенного восстановления...
11/04/2022 00:17:34 17 (11180) Новое значение USN: 5113
11/04/2022 00:17:34 17 (11180) Загружено 0 сессий мгновенного восстановления
11/04/2022 00:17:34 17 (11180) Загрузка баз данных завершена
11/04/2022 00:17:37 19 (9280) Получение сессий мгновенного восстановления...
11/04/2022 00:17:37 19 (9280) Новое значение USN: 5114
...
11/04/2022 00:18:05 16 (9136) Публикация базы данных не удалась
11/04/2022 00:18:05 16 (9136) Ошибка: Метод завершился неудачей с неожиданным кодом ошибки 3.
11/04/2022 00:18:05 16 (9136) Тип: System.InvalidOperationException
11/04/2022 00:18:05 16 (9136) Стек:
11/04/2022 00:18:05 16 (9136) at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
at System.Security.AccessControl.FileSecurity..ctor(String fileName, AccessControlSections includeSections)
at System.IO.FileInfo.GetAccessControl(AccessControlSections includeSections)
at Veeam.Engine.Security.FileAccess.GetAccessControl(String path, AccessControlSections sections)
at Veeam.Engine.Security.FileSystemSecurity.HasFileAccess(String accountName, String path)
at Veeam.Engine.FileSystem.LocalAccessChecker.GrantFileAccess(String filePath)
at Veeam.SQL.Core.Extensions.AccessCheckerExtension.CheckDatabaseFilesAccess(IAccessChecker accessChecker, IDatabaseFiles databaseFiles, String permissionSourceFolder)
at Veeam.SQL.Restore.Publish.RestorePointDatabasePublisher.Publish(ISqlBroker broker, ISqlConnectProvider sqlConnectProvider, IPublishConfig config, Boolean isClustered, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(ISqlBroker sqlBroker, ISqlConnectProvider sqlConnectProvider, IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(ISqlConnectProvider sqlConnectProvider, IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.LoggedDatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
11/04/2022 00:18:06 1 (6504) Публикация базы данных не удалась
11/04/2022 00:18:06 1 (6504) Ошибка: Метод завершился неудачей с неожиданным кодом ошибки 3.
11/04/2022 00:18:06 1 (6504) Тип: System.InvalidOperationException
11/04/2022 00:18:06 1 (6504) Стек:
11/04/2022 00:18:06 1 (6504) at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
at System.Security.AccessControl.FileSecurity..ctor(String fileName, AccessControlSections includeSections)
at System.IO.FileInfo.GetAccessControl(AccessControlSections includeSections)
at Veeam.Engine.Security.FileAccess.GetAccessControl(String path, AccessControlSections sections)
at Veeam.Engine.Security.FileSystemSecurity.HasFileAccess(String accountName, String path)
at Veeam.Engine.FileSystem.LocalAccessChecker.GrantFileAccess(String filePath)
at Veeam.SQL.Core.Extensions.AccessCheckerExtension.CheckDatabaseFilesAccess(IAccessChecker accessChecker, IDatabaseFiles databaseFiles, String permissionSourceFolder)
at Veeam.SQL.Restore.Publish.RestorePointDatabasePublisher.Publish(ISqlBroker broker, ISqlConnectProvider sqlConnectProvider, IPublishConfig config, Boolean isClustered, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(ISqlBroker sqlBroker, ISqlConnectProvider sqlConnectProvider, IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(ISqlConnectProvider sqlConnectProvider, IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.DatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.LoggedDatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.AuditedDatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.StoringDatabasePublisher.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Restore.Publish.PublishService.Publish(IPublishConfig config, ISqlActionsObserver observer, CancellationToken ct)
at Veeam.SQL.Explorer.Async.Publish.AsyncPublishDatabaseTask.Run(IProcessObserver observer, CancellationToken ct)
at Veeam.Presentation.Async.VisualAsyncTask.Execute(IProcessObserver observer)
Обратите внимание, что Veeam был установлен как учетная запись Local System на Veeam Backup Server, и пользователь, вошедший в систему через аутентификацию Windows, входит в группу Администраторов. Более того, на нашей локальной машине мы импортировали резервную копию и протестировали запуск всего как пользователь «Администратор» на Windows Server 2019 (службы Veeam, учетная запись пользователя Veeam и служба sql explorer), однако проблема с правами остается.
Этот вопрос адресован любому, кто хорошо знаком с Veeam или кому известна общая ошибка и как ее обойти, предоставив полные права в Windows.
После обращения в службу поддержки выяснилось, что проблема заключалась в том, что я не включал каталог DATA SQL Server в свою резервную копию. Я думал, что Veeam сделает это за меня, так как позволил мне активировать обработку приложений. Не помню, чтобы видел какие-либо детали по этому поводу в документации, или я мог это пропустить.
Это также могло быть устранено выбором всего компьютера для резервного копирования или выполнением резервного копирования тома диска C. Судя по всему, рекомендуется сохранять полные машины для мгновенного восстановления.
Все неопределенные ошибки исчезли просто из-за включения каталога DATA.
Смотрите необходимые разрешения на:
https://helpcenter.veeam.com/docs/backup/explorers/vesql_permissions.html?ver=110
Минимальные права на mssql для учетной записи службы Veeam для выполнения резервных копий:
Уровень движка: VIEW ANY DEFINITION, VIEW SERVER STATE
Уровень БД: master: db_backupoperator, db_datareader
msdb: db_backupoperator, db_datawriter, db_datareader
любая БД, которую вы хотите резервировать trn-логи: db_backupoperator,
db_denydatareader
Кроме того, ваша учетная запись службы Veeam должна быть частью группы локальных администраторов.
Чтобы иметь возможность выполнять восстановления напрямую в mssql, необходима роль уровня движка dbcreator.
Чтобы настроить это правильно, вам нужно изменить учетную запись службы Veeam на доменного пользователя.
Простой способ: Администратор домена и Sysadmin в SQL (если вы хотите резервировать и восстанавливать объекты AD, вы можете сделать это сразу)
Увидел такую же ошибку и наткнулся на этот пост. Это сэкономило мне время!
Ответ или решение
Ошибка публикации базы данных SQL Server при использовании Veeam: Код ошибки 3
Описание проблемы
При использовании Veeam Backup & Replication версии 11a для резервного копирования баз данных SQL Server пользователи могут столкнуться с проблемой при попытке восстановления баз данных. Ошибка проявляется в виде сообщения об ошибке "Method failed with unexpected error code 3". Данная ошибка часто указывает на проблемы с разрешениями или на то, что необходимые файлы базы данных не были включены в резервное копирование.
Основные шаги для устранения проблемы
-
Проверка резервного копирования директории DATA SQL Server:
- Одна из наиболее распространенных причин появления данной ошибки заключается в том, что при резервном копировании не была выбрана директория данных SQL Server (DATA). Veeam может не включать эту директорию автоматически, даже если вы активировали опцию обработки приложений.
- Рекомендуется либо выбрать компьютер целиком для резервного копирования, либо выполнить резервное копирование конкретного тома, на котором размещены файлы SQL Server.
-
Настройка разрешений:
- Убедитесь, что учетная запись Veeam Backup Service имеет достаточные разрешения для доступа к SQL Server. Ниже приведен список минимально необходимых разрешений:
- Engine Level: VIEW ANY DEFINITION, VIEW SERVER STATE
- DB Level:
- Для базы master:
db_backupoperator
,db_datareader
- Для базы msdb:
db_backupoperator
,db_datawriter
,db_datareader
- Для любых других баз, которые вы хотите резервировать, необходимо иметь
db_backupoperator
и избегатьdb_denydatareader
.
- Важно, чтобы учетная запись Veeam была добавлена в локальную группу администраторов на сервере.
- Убедитесь, что учетная запись Veeam Backup Service имеет достаточные разрешения для доступа к SQL Server. Ниже приведен список минимально необходимых разрешений:
-
Роль dbcreator:
- Если вам требуется выполнять восстановление напрямую в SQL Server, учётная запись Veeam также должна быть частью роли
dbcreator
на уровне сервера. - Для простоты можно предоставить учетной записи доменные права администратора и права Sysadmin на SQL Server.
- Если вам требуется выполнять восстановление напрямую в SQL Server, учётная запись Veeam также должна быть частью роли
-
Проверка логов Veeam SQL Explorer:
- Внимательно изучите логи Veeam SQL Explorer, чтобы выявить точки отказа и конкретные вызовы, которые завершились неуспешно. Это может дать более четкое представление о том, что именно пошло не так.
Заключение
Ошибка с кодом 3 при восстановлении базы данных SQL Server в Veeam Backup & Replication может быть вызвана различными факторами, связанными с разрешениями или отсутствующими файлами. Следуя вышеуказанным шагам и обнаружив конкретные проблемы с доступом, пользователи смогут успешно выполнить восстановление. Важно обеспечить правильное конфигурирование и проверку всех необходимых разрешений, а также корректное включение всех необходимых файлов и директорий в процесс резервного копирования.
Для получения более детальной информации о необходимых разрешениях, ознакомьтесь с официальной документацией Veeam по ссылке: Required Permissions.