Ошибка публикации базы данных Veeam SQL Server с неожиданным кодом ошибки 3

Ошибка публикации базы данных Veeam SQL Server с неожиданным кодом ошибки 3

Итак, мы уже некоторое время экспериментируем с Veeam Backup & Replication. Мы настраиваем выделенную виртуальную машину для Veeam Backup Server, которая ежедневно выполняет резервное копирование всех компонентов нашей инфраструктуры. Мы пока не приобрели лицензию, поэтому мы тестируем Community edition (версия11a сборка 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) Connecting to SQL Server localhost\SQL2019 using Windows authentication (username: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32   21 (8876) Connection completed successfully.
11/04/2022 00:17:32   21 (8876) Checking database version compatibility (server: Microsoft SQL Server 2014, database version: 782)...
11/04/2022 00:17:32   21 (8876)  Target server (localhost\SQL2019) is identified as Microsoft SQL Server 2019 (version: 904).
11/04/2022 00:17:32   21 (8876) Connecting to SQL Server localhost\SQL2019 using Windows authentication (username: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32   21 (8876) Connecting to SQL Server localhost\SQL2019 using Windows authentication (username: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:32   21 (8876) Validating account permissions for server 'localhost'...
11/04/2022 00:17:32   21 (8876) Validation completed successfully.
11/04/2022 00:17:33   16 (9136) Publishing database...
11/04/2022 00:17:33   16 (9136)  Restore point ID: 3147eb18-d76a-47f1-ab4c-ec5a67dd81f1
11/04/2022 00:17:33   16 (9136)  SQL server: localhost\SQL2019
11/04/2022 00:17:33   16 (9136)  Database name: bigsoft_33o_vide
11/04/2022 00:17:33   16 (9136) Connecting to SQL Server localhost\SQL2019 using Windows authentication (username: WIN-KB0LJQ6QU6L\Administrator)...
11/04/2022 00:17:34   17 (11180) Getting Instant Recovery sessions...
11/04/2022 00:17:34   17 (11180) New USN value: 5113
11/04/2022 00:17:34   17 (11180) Loaded 0 Instant Recovery sessions
11/04/2022 00:17:34   17 (11180) Loading databases completed
11/04/2022 00:17:37   19 (9280) Getting Instant Recovery sessions...
11/04/2022 00:17:37   19 (9280) New USN value: 5114
...
11/04/2022 00:18:05   16 (9136) Database publish failed
11/04/2022 00:18:05   16 (9136) Error: Method failed with unexpected error code 3.
11/04/2022 00:18:05   16 (9136) Type: System.InvalidOperationException
11/04/2022 00:18:05   16 (9136) Stack:
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) Database publish failed
11/04/2022 00:18:06    1 (6504) Error: Method failed with unexpected error code 3.
11/04/2022 00:18:06    1 (6504) Type: System.InvalidOperationException
11/04/2022 00:18:06    1 (6504) Stack:
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 был установлен как учетная запись локальной системы на Veeam Backup Server, а пользователь, вошедший в систему с использованием аутентификации Windows, находится в группе администраторов. Более того, на нашей локальной машине мы импортировали резервную копию и протестировали запуск всего как пользователя «Администратор» на Windows Server 2019 (службы Veeam, учетная запись пользователя Veeam и служба SQL Explorer), но проблема с правами доступа осталась.

Этот вопрос адресован всем, кто хорошо знаком с Veeam или имеет представление об общем сообщении об ошибке и о том, как его обойти, предоставив полные разрешения в Windows.

решение1

После обращения в службу поддержки выяснилось, что проблема была в том, что я не включил каталог SQL Server DATA в резервную копию. Я думал, Veeam сделает это за меня, поскольку он позволяет мне активировать обработку приложений. Я не помню, чтобы видел какие-либо подробности об этом в документации, или я мог это пропустить.

Это также можно было бы смягчить, выбрав для резервного копирования весь компьютер или выполнив резервное копирование тома диска C. По-видимому, рекомендуется в любом случае сохранять полные машины для мгновенного восстановления.

Все неоднозначные ошибки исчезли после простого включения каталога DATA.

решение2

См. необходимые разрешения по адресу:

https://helpcenter.veeam.com/docs/backup/explorers/vesql_permissions.html?ver=110

Минимальные права доступа к mssql для учетной записи Veeam Service Account для выполнения резервного копирования:

Уровень движка: ПРОСМОТР ЛЮБОГО ОПРЕДЕЛЕНИЯ, ПРОСМОТР СОСТОЯНИЯ СЕРВЕРА

Уровень БД: главный: db_backupoperator, db_datareader

msdb: db_backupoperator, db_datawriter, db_datareader

любая база данных, для которой вы хотите создать резервную копию trn-logs: db_backupoperator, db_denydatareader

Кроме того, ваша учетная запись Veeam должна входить в локальную группу администраторов.

Чтобы иметь возможность выполнять восстановление непосредственно в MSSQL, требуется роль уровня движка dbcreator.

Чтобы правильно настроить все это, вам необходимо изменить свою учетную запись Veeam на учетную запись пользователя домена.

Простой режим: администратор домена и системный администратор на SQL (если вы также хотите выполнять резервное копирование и восстановление объектов AD, вы можете сразу же перейти по этому пути)

Связанный контент