SMO 备份报告无法打开备份设备(这是一个文件),消息 3201

SMO backup reports can't open backup device (which is a file), Message 3201

此代码在本地 SQL Server Express 实例上运行良好:

Dim thisSMOBackup As New Backup()
With thisSMOBackup
  .Database = singleDatabase.Name 'This contains the database name
  .Action = BackupActionType.Database
  .Devices.AddDevice(DatabaseFileName, DeviceType.File)
  .Incremental = False
  .LogTruncation = BackupTruncateLogType.Truncate
End With
Try
  thisSMOBackup.SqlBackup(thisServer) 'thisServer is setup w/ valid connection string and reads back data OK from the SQL server
  System.IO.File.AppendAllText(logfileName, singleDatabase.Name & " - backed up")
Catch ex As Exception
  System.IO.File.AppendAllText(logfileName, singleDatabase.Name & " - " & ex.InnerException.Message & vbCrLf)
End Try

当我将相同的代码应用于共享主机 SQL 服务器时,它会产生以下内部异常错误消息:

Cannot open backup device 'D:\aFolderName\aBackupName\theDatabaseName.bak'. Operating system error 3(The system cannot find the path specified.). BACKUP DATABASE is terminating abnormally.
Message #: 3201

似乎有不同的方式连接到服务器。对于 SQL Server Express 实例,我使用 .ServerInstance 属性,对于托管服务器,我使用 .ConnectionString 属性。这与 SMO 代码的功能有什么关系吗?

我读到共享 SQL 托管服务器可能有难以逾越的限制,但在我放弃之前我想征求意见。

错误本身表明 SMO 找不到写入文件的位置,但它就在那里,我将文件夹的安全性设置为 "Everyone" 和 "Full Control"。但是错误似乎并不总是准确地表达他们所说的意思。我想知道是否还需要设置一些其他参数才能使此操作成功,或者需要查看其他地方。

当您尝试在共享主机环境中创建备份时,备份文件正在写入该远程服务器计算机的文件系统不是你自己的本地 D: 驱动器!)你的 SQL 服务器是 运行。

最有可能的是,远程运行 SQL 服务器的用户帐户没有写入该目录的权限。

另外:这是一件好事!毕竟,您不希望一台您不知道且无法控制的远程服务器机器能够直接写入您自己的本地机器——现在您愿意吗?

可以做的(尤其是在企业环境中)是将备份写入UNC路径\server\share\path) 其中远程 SQL 服务器计算机具有 写入权限 ,并且您至少具有读取权限,以便您可以去那里复制 .bak 文件到您的本地机器。对于商业托管公司,这种选择很少存在,但是....