Этот код отлично работает на локальном экземпляре 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 не может найти место для записи файла, но он там, и я установил для папки безопасность «Все» с «Полным доступом». Но тогда кажется, что ошибки не всегда означают именно то, что они говорят. Мне было интересно, есть ли какие-то другие параметры, которые мне нужно настроить, чтобы эта операция прошла успешно, или другие места для поиска.