Veeam SQL Server-Datenbankveröffentlichung schlägt mit unerwartetem Fehlercode 3 fehl

Veeam SQL Server-Datenbankveröffentlichung schlägt mit unerwartetem Fehlercode 3 fehl

Wir experimentieren nun schon seit einiger Zeit mit Veeam Backup & Replication. Wir haben eine dedizierte VM für Veeam Backup Server eingerichtet, die täglich Backups aller unserer Infrastrukturkomponenten durchführt. Wir haben noch keine Lizenz erworben, daher testen wir die Community Edition (Version11a Baujahr 11.0.1.1261 P20220302)

Wir haben einige VMs mit SQL Server-Instanzen, die Datenbanken enthalten. Wir verwenden die Anwendungsverarbeitungsoption von Veeam, um die Datenbanken zu sichern und sie in die Sicherungsdatei aufzunehmen.

Wir haben jedoch ein Problem, wenn wir versuchen, eine Wiederherstellung der Datenbanken aus der Sicherungsdatei durchzuführen, sei es auf dem Veeam Backup Server-Computer oder einem anderen lokalen Computer. Wir führen die Wiederherstellung von Anwendungselementen wie in beschrieben durchVeeam B&R-DokumentationGehen Sie dann die Schritte durch, umDatenveröffentlichungzum lokalen (Staging-)SQL-Server mithilfe von Veeam SQL Explorer. Wir haben versucht, die Datenbank zu veröffentlichen, die .BAK-Datei wiederherzustellen oder sogar die MDF- und LDF-Dateien direkt zu speichern. Alle Vorgänge schlagen aufgrund fehlender Berechtigungen fehl (siehe Veeam SQL Explorer-Protokolle unten).

Screenshot des Fehlers

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)

Beachten Sie, dass Veeam als lokales Systemkonto auf dem Veeam-Backup-Server installiert wurde und der mit Windows-Authentifizierung angemeldete Benutzer zur Administratorgruppe gehört. Darüber hinaus haben wir auf unserem lokalen Computer das Backup importiert und alles als Benutzer „Administrator“ auf Windows Server 2019 getestet (Veeam-Dienste, Veeam-Benutzerkonto und SQL Explorer-Dienst), das Berechtigungsproblem besteht jedoch weiterhin.

Diese Frage richtet sich an alle, die sich speziell mit Veeam auskennen oder eine Vorstellung von der allgemeinen Fehlermeldung haben und wissen möchten, wie man sie umgehen kann, indem man in Windows alle Berechtigungen erteilt.

Antwort1

Nachdem ich den Support kontaktiert hatte, stellte sich heraus, dass das Problem darin bestand, dass ich das SQL Server DATA-Verzeichnis nicht in mein Backup aufgenommen hatte. Ich dachte, Veeam würde das für mich erledigen, da ich damit die Anwendungsverarbeitung aktivieren konnte. Ich kann mich nicht erinnern, in den Dokumenten irgendwelche Einzelheiten dazu gesehen zu haben, oder ich habe es vielleicht übersehen.

Dies hätte auch dadurch abgemildert werden können, dass der gesamte Computer für die Sicherung ausgewählt oder eine Volume-Sicherung des Laufwerks C durchgeführt wurde. Anscheinend wird ohnehin empfohlen, die gesamten Maschinen für eine sofortige Wiederherstellung zu speichern.

Durch die einfache Einbindung des DATA-Verzeichnisses wurden alle mehrdeutigen Fehler behoben.

Antwort2

Erforderliche Berechtigungen finden Sie unter:

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

Minimale Berechtigungen für mssql für das Veeam-Dienstkonto zum Durchführen von Sicherungen:

Engine-Ebene: JEDE DEFINITION ANZEIGEN, SERVERSTATUS ANZEIGEN

DB-Ebene: Master: db_backupoperator, db_datareader

msdb: db_backupoperator, db_datawriter, db_datareader

jede Datenbank, für die Sie trn-logs sichern möchten: db_backupoperator, db_denydatareader

Außerdem muss Ihr Veeam-Dienstkonto Teil der lokalen Administratorgruppe sein.

Um Wiederherstellungen direkt in mssql durchführen zu können, ist die Rolle auf Engine-Ebene „dbcreator“ erforderlich.

Um dies richtig einzurichten, müssen Sie Ihr Veeam-Dienstkonto in einen Domänenbenutzer ändern.

Einfacher Modus: Domänenadministrator und Sysadmin auf SQL (wenn Sie auch AD-Objekte sichern und wiederherstellen möchten, können Sie gleich diesen Weg wählen)

verwandte Informationen