Error de publicación de la base de datos de Veeam SQL Server con el código de error inesperado 3

Error de publicación de la base de datos de Veeam SQL Server con el código de error inesperado 3

Hemos estado experimentando con Veeam Backup & Replication desde hace un tiempo. Configuramos una máquina virtual dedicada para Veeam Backup Server que realiza copias de seguridad diarias de todos nuestros componentes de infraestructura. Aún no hemos adquirido una licencia, por lo que esta es la edición comunitaria que estamos probando (versión11a compilación 11.0.1.1261 P20220302)

Tenemos algunas máquinas virtuales con instancias de SQL Server que contienen bases de datos. Utilizamos la opción de procesamiento de aplicaciones de Veeam para realizar copias de seguridad de las bases de datos e incluirlas en el archivo de copia de seguridad.

Sin embargo, nos enfrentamos a un problema cuando intentamos realizar una restauración de las bases de datos desde el archivo de copia de seguridad, ya sea en la máquina Veeam Backup Server u otra máquina local. Realizamos la restauración de elementos de la aplicación como se describe enDocumentación de Veeam B&Rluego siga los pasos parapublicación de datosal servidor SQL local (de prueba) utilizando Veeam SQL Explorer. Hemos intentado publicar la base de datos, restaurar el archivo .BAK o incluso guardar los archivos MDF y LDF directamente. Todas las operaciones fallan por falta de permisos (consulte los registros de Veeam SQL Explorer a continuación).

Captura de pantalla del error

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)

Tenga en cuenta que Veeam se instaló como una cuenta de sistema local en Veeam Backup Server y el usuario que inició sesión mediante la autenticación de Windows está en el grupo de administradores. Además, en nuestra máquina local importamos la copia de seguridad y probamos ejecutar todo como usuario "Administrador" en Windows Server 2019 (servicios Veeam, cuenta de usuario Veeam y servicio de explorador SQL), pero el problema de permisos persiste.

Esta pregunta está dirigida a cualquiera que esté específicamente familiarizado con Veeam o a cualquiera que tenga una idea sobre el mensaje de error genérico y cómo evitarlo proporcionando permisos completos en Windows.

Respuesta1

Después de comunicarme con el soporte, resultó que el problema era que no estaba incluyendo el directorio DATOS de SQL Server en mi copia de seguridad. Pensé que Veeam haría eso por mí ya que me permitía activar el procesamiento de solicitudes. No recuerdo haber visto ningún detalle sobre esto en los documentos, o podría haberlo pasado por alto.

Esto también podría haberse mitigado seleccionando toda la computadora para realizar la copia de seguridad o realizando una copia de seguridad del volumen de la unidad C. Aparentemente, se recomienda guardar las máquinas completas de todos modos para una recuperación instantánea.

Todos los errores ambiguos desaparecieron simplemente incluyendo el directorio DATOS.

Respuesta2

Consulte los permisos necesarios en:

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

Permisos mínimos en mssql para que Veeam Service Account realice copias de seguridad:

Nivel del motor: VER CUALQUIER DEFINICIÓN, VER EL ESTADO DEL SERVIDOR

Nivel de base de datos: maestro: db_backupoperator, db_datareader

msdb: db_backupoperator, db_datawriter, db_datareader

cualquier base de datos de la que desee realizar una copia de seguridad de trn-logs: db_backupoperator, db_denydatareader

Además, su cuenta de servicio de Veeam debe formar parte del grupo de administración local.

Para poder realizar restauraciones directamente en mssql, se requiere la función de nivel de motor dbcreator.

Para configurar esto correctamente, deberá cambiar su cuenta de servicio Veeam a un usuario de dominio.

Modo fácil: administrador de dominio y administrador de sistemas en SQL (si también desea realizar una copia de seguridad y restaurar objetos AD, puede seguir este camino de inmediato)

información relacionada