【发布时间】:2016-02-11 04:54:46
【问题描述】:
此代码在本地 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 找不到写入文件的位置,但它就在那里,我将文件夹的安全性设置为“所有人”并使用“完全控制”。但是,错误似乎并不总是准确地表达他们所说的意思。我想知道是否需要设置一些其他参数才能使此操作成功,或者其他地方可以查看。
【问题讨论】:
-
我想我明白了。这是否意味着当我的本地应用程序访问 SMO 时,SMO 实际上是在远程 SQL 服务器上运行,而不是在我的本地计算机上?我只是连接到那个服务器,它在那里工作?假设是这样,似乎没有办法在本地发送 SMO 备份,但无论如何我都会问,以防我遗漏了一些明显的东西;有什么技术可以用来将备份推送到我的机器上吗?托管服务确实具有一些备份功能,但它们是手动的,我试图在本地代码中执行此操作。
-
不,没那么多...和其他人一样,我竭尽全力让人们远离我的机器!但由于我只是一个中等水平的编码员,我发现通常有一些已知或经过验证的技术可以解决我从未接触过的此类问题;但显然不是这个问题。我将花一些时间尝试查看是否可以使用托管服务提供商的 ftp 服务,以防可能以我希望的方式解决问题。不过,重点很好的帮助。谢谢!
标签: sql-server sql-server-2012 asp.net-mvc-5 shared-hosting smo