web-dev-qa-db-ja.com

ローカルドライブのUNCパスへのデータベースの復元

ローカルUNCパスを指定した復元コマンドを使用してデータベースを復元しようとすると、次のようになります。

RESTORE DATABASE [dbname] 
FROM DISK = N'\\PC91\D\backup.BAK' WITH  FILE = 1,  
MOVE N'test' TO N'\\PC91\D\dbname.MDF',  
MOVE N'test_log' TO N'\\PC91\D\dbname_log.LDF',  
NOUNLOAD, STATS = 10

エラーが発生します:

メッセージ3634、レベル16、状態1、行1
'\ PC91\D\dbname.MDF'で 'CreateFileW'を試行中に、オペレーティングシステムがエラー '5(Access is denied。)'を返しました。
メッセージ3013、レベル16、状態1、行1
RESTORE DATABASEが異常終了しています。

代わりにローカルドライブ文字を使用すると、機能します。

RESTORE DATABASE [dbname] 
FROM DISK = N'D:\backup.BAK' WITH FILE = 1,  
MOVE N'test' TO N'D:\dbname.MDF',  
MOVE N'test_log' TO N'D:\dbname_log.LDF',  
NOUNLOAD, STATS = 10

このコマンドは、データベースを同じフォルダーに復元します。では、ネットワークパスを指定するとエラーが発生するのはなぜですか。

4
IT researcher

「アクセスが拒否されました」のようです-SQL Serverサービスアカウントが読み取りと書き込みの両方で共有にアクセスできることを確認してください(yoが共有にアクセスできるかどうかは関係ありません)。 D:のルートを指すDという名前の共有を作成しなかった場合、構文が間違っています-D$を使用する必要があります。ただし、ドライブのルートにない共有を作成し、SQL Serverサービスアカウントを確認することをお勧めします(この場合も、yoではありません)。 Windowsアカウント)には、読み取りおよび書き込みアクセス権があります。次にそれは:

MOVE N'test'     TO N'\\PC91\ShareName\Data\test.mdf',
MOVE N'test_log' TO N'\\PC91\ShareName\Log\test.ldf'

ただし、そもそもなぜこれにUNCパスを使用するのか疑問に思う必要があります。これは、SQL Serverの実行中に共有が削除されたり、一時的に利用できなくなったりするため、データベースファイルがより危険にさらされていることを意味します。

4
Aaron Bertrand