Отчеты о резервном копировании SMO ​​не могут открыть устройство резервного копирования (которое является файлом), сообщение 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 Server, он выдает следующее сообщение об ошибке внутреннего исключения:

Не удается открыть устройство резервного копирования «D:\aFolderName\aBackupName\theDatabaseName.bak». Ошибка операционной системы 3 (Система не может найти указанный путь.). BACKUP DATABASE аварийно завершает работу.
Сообщение №: 3201

Кажется, есть разные способы подключения к серверам. Для экземпляра SQL Server Express я использую свойство .ServerInstance, для размещенного сервера я использую свойство .ConnectionString. Это как-то связано с тем, как работает код SMO?

Я читал, что общие серверы хостинга SQL могут иметь ограничения, которые трудно обойти, но прежде чем я сдаюсь, я хотел бы попросить вашего мнения.

Сама ошибка предполагает, что SMO не может найти место для записи файла, но он там, и я установил для папки безопасность «Все» с «Полным доступом». Но тогда кажется, что ошибки не всегда означают именно то, что они говорят. Мне было интересно, есть ли какие-то другие параметры, которые мне нужно настроить, чтобы эта операция прошла успешно, или другие места для поиска.


person Alan    schedule 11.02.2016    source источник
comment
Думаю, я понял. Означает ли это, что когда мое локальное приложение обращается к SMO, SMO фактически работает на удаленном сервере SQL, а не на моем локальном компьютере? Что я просто взаимодействую с этим сервером, а он там работает? Предполагая это, казалось бы, нет способа отправить резервные копии SMO ​​локально, но я все равно спрошу, если я пропущу что-то очевидное; Существуют ли какие-либо методы, которые я мог бы использовать для передачи резервных копий на мою машину? У службы хостинга есть некоторые возможности резервного копирования, но они выполняются вручную, и я пытался сделать это в локальном коде.   -  person Alan    schedule 11.02.2016
comment
Нет, не так сильно... Как и все остальные, я делаю все возможное, чтобы люди не лезли к моим машинам! Но, поскольку я кодер среднего уровня, я обнаружил, что часто существуют известные или проверенные методы для решать такие проблемы, с которыми я никогда не сталкивался; но видимо не в этом проблема. Я потрачу некоторое время, пытаясь понять, смогу ли я использовать ftp-сервисы хостинг-провайдера на случай, если это решит проблему так, как я надеялся. Однако хорошо сфокусированная помощь. Спасибо!   -  person Alan    schedule 11.02.2016


Ответы (1)


Когда вы пытаетесь создать резервную копию в среде общего хостинга, файл резервной копии записывается в файловую систему этого удаленного сервера (НЕ в вашу собственную, локальную D: диск!) где работает ваш SQL Server.

Скорее всего, учетная запись пользователя, которая удаленно запускает SQL Server, просто не имеет права на запись в этот каталог.

Кроме того: это хорошо! В конце концов, вы бы не хотели, чтобы удаленный сервер, который вы не знаете и над которым не имеете никакого контроля, мог иметь прямой доступ для записи к вашей собственной локальной машине — не так ли?

Что вы можете сделать (особенно в корпоративной среде), так это записывать резервные копии по пути UNC (\\server\share\path), где обе удаленные машины SQL Server имеют доступ для записи и к которому у вас есть доступ хотя бы для чтения, чтобы вы могли пойти туда и скопировать файлы .bak на свой локальный компьютер по мере необходимости. Однако с коммерческой хостинговой компанией такой вариант существует очень редко....

person marc_s    schedule 11.02.2016