SMO备份报告无法打开备份设备(即文件),消息3201

时间:2016-02-11 04:54:46

标签: sql-server sql-server-2012 asp.net-mvc-5 shared-hosting smo

此代码在本地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 Server时,它会产生以下内部异常错误消息:

  

无法打开备份设备' D:\ aFolderName \ aBackupName \ theDatabaseName.bak'。操作系统错误3(系统找不到指定的路径。)。 BACKUP DATABASE异常终止。
  消息#:3201

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

我已经读过共享SQL托管服务器可能有难以通过的限制,但在我放弃之前我想要求输入。

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

1 个答案:

答案 0 :(得分:1)

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

最有可能的是,远程运行SQL Server的用户帐户无权写入该目录。

另外:这是好事!毕竟,您不希望您不知道且无法控制的远程服务器计算机能够直接写入您自己的本地计算机 - 现在就可以了吗?

可以做什么(特别是在企业环境中)是将备份写入 UNC路径\\server\share\path),其中远程SQL Server都是计算机具有写入权限,并且您至少具有读访问权限,因此您可以根据需要将.bak文件复制到本地计算机。对于商业托管公司,这种选择很少存在,但是....