Falha na publicação do banco de dados SQL Server da Veeam com código de erro inesperado 3

Falha na publicação do banco de dados SQL Server da Veeam com código de erro inesperado 3

Já faz algum tempo que estamos experimentando o Veeam Backup & Replication. Configuramos uma VM dedicada para o Veeam Backup Server que realiza backups diários de todos os nossos componentes de infraestrutura. Ainda não adquirimos licença, então esta é a edição Community que estamos testando (versão11a compilação 11.0.1.1261 P20220302)

Temos algumas VMs com instâncias do SQL Server contendo bancos de dados. Usamos a opção de processamento de aplicativos da Veeam para fazer backup dos bancos de dados e incluí-los no arquivo de backup.

Porém, enfrentamos um problema quando tentamos realizar uma restauração dos bancos de dados a partir do arquivo de backup, seja na máquina do Veeam Backup Server ou em outra máquina local. Realizamos a restauração de itens do aplicativo conforme descrito emDocumentação de B&R da Veeamem seguida, siga as etapas parapublicação de dadospara o SQL Server local (de teste) usando o Veeam SQL Explorer. Tentamos publicar o banco de dados, restaurar o arquivo .BAK ou até mesmo salvar os arquivos MDF e LDF diretamente. Todas as operações falham por falta de permissões (veja os logs do Veeam SQL Explorer abaixo).

Captura de tela do erro

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)

Observe que a Veeam foi instalada como uma conta de Sistema Local no Veeam Backup Server e o usuário logado usando a Autenticação do Windows está no grupo de Administradores. Além disso, em nossa máquina local importamos o backup e testamos a execução de tudo como usuário "Administrador" no Windows Server 2019 (serviços Veeam, conta de usuário Veeam e serviço sql explorer), mas o problema de permissões permanece.

Esta pergunta é para qualquer pessoa que esteja especificamente familiarizada com a Veeam ou que tenha uma ideia sobre a mensagem de erro genérica e como contorná-la fornecendo permissões completas no Windows.

Responder1

Depois de entrar em contato com o suporte, descobri que o problema era que eu não estava incluindo o diretório DATA do SQL Server em meu backup. Achei que a Veeam faria isso por mim, pois me permitiu ativar o processamento de aplicativos. Não me lembro de ter visto nenhum detalhe sobre isso nos documentos, ou poderia ter perdido.

Isso também poderia ter sido atenuado selecionando todo o computador para backup ou fazendo um backup de volume da unidade C. Aparentemente, é recomendado salvar as máquinas completas de qualquer maneira para recuperação instantânea.

Todos os erros ambíguos desapareceram simplesmente incluindo o diretório DATA.

Responder2

Consulte Permissões necessárias em:

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

Permissões mínimas no mssql para a Veeam Service Account realizar backups:

Nível do mecanismo: VER QUALQUER DEFINIÇÃO, VER ESTADO DO SERVIDOR

Nível do banco de dados: mestre: db_backupoperator, db_datareader

msdb: db_backupoperator, db_datawriter, db_datareader

qualquer banco de dados que você deseja fazer backup de trn-logs: db_backupoperator, db_denydatareader

Além disso, sua conta de serviço Veeam precisa fazer parte do grupo de administradores locais.

Para poder executar restaurações diretamente no mssql, é necessária a função de nível de mecanismo dbcreator.

Para configurar isso corretamente, você precisará alterar sua conta de serviço Veeam para um usuário de domínio.

Modo Fácil: Administrador de Domínio e Sysadmin em SQL (se você também deseja fazer backup e restaurar objetos AD, você pode seguir este caminho imediatamente)

informação relacionada