예상치 못한 오류 코드 3으로 인해 Veeam SQL Server 데이터베이스 게시 실패

예상치 못한 오류 코드 3으로 인해 Veeam SQL Server 데이터베이스 게시 실패

그래서 우리는 한동안 Veeam Backup & Replication을 실험해 왔습니다. 우리는 모든 인프라 구성 요소를 매일 백업하는 Veeam Backup Server용 전용 VM을 설정했습니다. 아직 라이선스를 취득하지 않았기 때문에 테스트 중인 Community 에디션입니다(버전11a 빌드 11.0.1.1261 P20220302)

데이터베이스가 포함된 SQL Server 인스턴스가 있는 VM이 ​​몇 개 있습니다. 우리는 Veeam의 애플리케이션 처리 옵션을 사용하여 데이터베이스를 백업하고 이를 백업 파일에 포함합니다.

그러나 백업 파일(Veeam Backup Server 시스템 또는 다른 로컬 시스템)에서 데이터베이스 복원을 수행하려고 하면 문제가 발생합니다. 우리는 다음에 설명된 대로 애플리케이션 항목 복원을 수행합니다.Veeam B&R 문서그런 다음 다음 단계를 수행하세요.데이터 게시Veeam SQL Explorer를 사용하여 로컬(스테이징) SQL Server에 연결합니다. 데이터베이스 게시, .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 탐색기 서비스)에서 "관리자" 사용자로 모든 실행을 테스트했지만 권한 문제는 여전히 남아 있습니다.

이 질문은 Veeam에 대해 특히 잘 알고 있는 사람이나 일반적인 오류 메시지에 대한 아이디어와 Windows에서 전체 권한을 제공하여 이를 우회하는 방법에 대해 알고 있는 사람을 위한 것입니다.

답변1

지원팀에 문의한 후 문제는 백업에 SQL Server DATA 디렉터리를 포함하지 않았다는 것이었습니다. Veeam을 통해 지원 처리를 활성화할 수 있었기 때문에 Veeam이 이를 해 줄 것이라고 생각했습니다. 문서에서 이에 대한 자세한 내용을 본 기억이 없거나 놓쳤을 수도 있습니다.

전체 컴퓨터를 백업하도록 선택하거나 C 드라이브의 볼륨 백업을 수행하여 이 문제를 완화할 수도 있습니다. 즉각적인 복구를 위해 어쨌든 전체 머신을 저장하는 것이 좋습니다.

단순히 DATA 디렉토리를 포함함으로써 모든 모호한 오류가 사라졌습니다.

답변2

다음에서 필수 권한을 참조하세요.

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

백업을 수행하기 위한 Veeam 서비스 계정의 mssql에 대한 최소 권한:

엔진 수준: 모든 정의 보기, 서버 상태 보기

DB 수준: 마스터: db_backupoperator, db_datareader

msdb: db_backupoperator, db_datawriter, db_datareader

백업하려는 모든 DB trn-logs: db_backupoperator, db_denydatareader

또한 Veeam 서비스 계정은 로컬 관리자 그룹의 일부여야 합니다.

mssql로 직접 복원을 수행하려면 dbcreator 엔진 수준 역할이 필요합니다.

이를 올바르게 설정하려면 Veeam 서비스 계정을 도메인 사용자로 변경해야 합니다.

간편 모드: SQL의 도메인 관리자 및 시스템 관리자(AD 개체도 백업 및 복원하려는 경우 바로 이 방법으로 갈 수 있음)

관련 정보