2011-03-28 27 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

相关问题