SQL-DMOを使用して、ネットワーク共有にあるデータベースバックアップを、ローカルマシンで実行されているSQLServerのインスタンスに復元しています。
コードは私のマシンで正常に動作します。ただし、テストVMでは、バックアップをローカルパスに配置した場合にのみ機能します。ネットワークで試してみると失敗します。
VM上のSQLサーバーがシステムユーザーの下で実行されていることを知り、これがネットワークアクセスの問題であると考えて、ネットワークサービスとして実行するように変更しました。しかし、それは問題を解決しませんでした。
ReadFileListを呼び出すと空の結果セットが返されるため、このコードは失敗します。
Dim restore As New SQLDMO.Restore With {
.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database,
.ReplaceDatabase = True,
.Database = dbName,
.Files = "[" + backupFile + "]",
.Devices = ""}
Dim fileList = restore.ReadFileList(sqlserver)
Dim dataLogicalName = fileList.GetColumnString(1, 1)
Dim dataPhysicalName = Path.GetFileName(fileList.GetColumnString(1, 2))
Dim logLogicalName = fileList.GetColumnString(2, 1)
Dim logPhysicalName = Path.GetFileName(fileList.GetColumnString(2, 2))
[SQL-DMO]このキャッシュに結果セットが含まれていないか、現在の結果セットに行が含まれていません。
このコードの前にチェックをFile.Exists(backupFile)
行い、合格します。ただし、このチェックを実行するプロセス(私のプログラム)は復元を実行するプロセス(SQL Server)と同じではないことを認識しているため、これを実行する必要はありません。
この動作の原因は何ですか?サーバーがバックアップファイルを認識できない理由を理解するにはどうすればよいですか?