Veeam SQL Server データベースの公開が予期しないエラー コード 3 で失敗する

Veeam SQL Server データベースの公開が予期しないエラー コード 3 で失敗する

そこで、私たちはしばらく前からVeeam Backup & Replicationを試してきました。Veeam Backup Server専用のVMをセットアップし、すべてのインフラストラクチャコンポーネントの毎日のバックアップを実行しています。まだライセンスを取得していないため、テストしているのはコミュニティエディションです(バージョン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 バックアップ サーバーにローカル システム アカウントとしてインストールされており、Windows 認証を使用してログインしたユーザーは管理者グループに属していることに注意してください。さらに、ローカル マシンにバックアップをインポートし、Windows Server 2019 でユーザー「管理者」としてすべて (Veeam サービス、Veeam ユーザー アカウント、SQL エクスプローラー サービス) を実行することをテストしましたが、アクセス許可の問題は残っています。

この質問は、Veeam に詳しい方、または一般的なエラー メッセージについて、また Windows で完全な権限を付与してそれを回避する方法について知っている方に向けたものです。

答え1

サポートに問い合わせたところ、問題はバックアップに SQL Server DATA ディレクトリを含めていなかったことであることが判明しました。アプリケーション処理をアクティブ化できるため、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

trn-logs をバックアップする任意の DB: db_backupoperator、db_denydatareader

また、Veeam サービス アカウントはローカル管理者グループの一部である必要があります。

mssql に直接復元を実行するには、dbcreator エンジン レベルのロールが必要です。

これを適切に設定するには、Veeam サービス アカウントをドメイン ユーザーに変更する必要があります。

簡単モード: SQL のドメイン管理者とシステム管理者 (AD オブジェクトのバックアップと復元も行いたい場合は、すぐにこの方法を使用できます)

関連情報