我正在使用SQL-DMO将位于网络共享上的数据库备份还原到本地计算机上运行的SQL Server实例。
代码在我的机器上运行正常。但是在测试VM上,只有将备份放在本地路径中才有效。如果我在网络上试用它,就会失败。
我发现VM上的SQL服务器在 System 用户下运行,并将其更改为 Network Service 运行,认为这是网络访问的问题。但它没有解决问题。
此代码失败,因为对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 :(得分:1)
查看服务(Start-> run-> services.msc)并向下滚动到SQL Server。登录选项卡下的用户很可能没有共享权限。
如果Sql Server需要访问域资源,我建议将服务更改为以低权限域用户身份登录,以便为其分配对这些资源的权限。