2011-03-28 63 views
0

我正在使用SQL-DMO將位於網絡共享位置的數據庫備份還原到在本地計算機上運行的SQL Server實例。什麼可能導致數據庫從網絡共享恢復失敗?

該代碼在我的機器上正常工作。但是在一個測試虛擬機上,它只有在我將備份放在本地路徑中時纔有效。如果我在網絡上嘗試它,它會失敗。

我發現了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)的過程並不相同,因此這不是一件容易的事。

什麼可能導致此行爲?我能做些什麼來弄清爲什麼服務器無法看到備份文件?

+0

值得一提的是,我正在運行SQL Server 2008 R2。 – 2011-03-28 11:28:38

回答

1

查看服務(開始 - >運行 - > services.msc)並向下滾動到SQL Server。登錄選項卡下的用戶很可能沒有共享權限。

如果Sql Server需要訪問域資源,我建議將服務更改爲以低權限域用戶身份登錄,以便可以爲這些資源分配權限。

+0

這似乎是。虛擬機與共享不在同一個域中,因此沒有權限訪問它的用戶。我認爲它位於同一個域中,因爲我可以使用explorer和File.Exists來訪問該文件,但那只是因爲有人在訪問共享時在資源管理器中輸入了憑據。這需要一段時間才能確認,所以我不會接受這個答案,但我幾乎可以肯定這是問題所在。 – 2011-03-28 16:04:51

相關問題