SQL Server SMO выполняет резервное копирование локально с удаленного сервера - PullRequest
5 голосов
/ 26 июля 2010

Мой вопрос прост: как я могу запрограммировать SQL SMO на локальное резервное копирование, подключившись к удаленному серверу.Я хочу сохранить файл bak на локальном компьютере, который подключается к удаленному серверу.Также я хочу, чтобы пользователи с определенными привилегиями могли сохранять резервные копии локально.

Ответы [ 2 ]

6 голосов
/ 26 июля 2010

Вы не можете - точка.Резервные копии SQL Server можно только сохранять на локальном диске - локальном для самого SQL Server.

Вы не можете с помощью каких-либо хитростей или утилит резервного копирования удаленного SQL Server на локальный жесткий диск.Просто не могу этого сделать.

4 голосов
/ 26 июля 2010

РЕДАКТИРОВАТЬ: перечитать ваш вопрос и marc_s ответ мой ответ будет работать только в том случае, если на удаленном сервере вы говорите о сервере в вашей сети где-то. Если вы говорите о размещенном SQL Server в другом домене где-то, то marc_s прав, и мой ответ бесполезен . В любом случае, я оставлю это здесь, если вы говорите о сервере в вашем домене. Edit Ends

После установки общего ресурса в моем локальном каталоге C: \ tmp этот бит Powershell выполняет резервное копирование.


[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')  | out-null
# may need this instead [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoExtended') | out-null

$datePart = Get-Date -Format "yyyyMMdd_hhmm" 
$targetDir = '\\LocalMachineName\tmp\'  # change to fit your specs
$dbname = "DatabaseNameToBackUp"

$s = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'remoteSqlServer'
$bckfile = $targetDir + $dbname + "_" + $datePart + ".bak"
$dbbk = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
$bdi = new-object ('Microsoft.SqlServer.Management.Smo.BackupDeviceItem') ($bckfile, 'File')
$dbbk.Action = 'Database'
$dbbk.BackupSetDescription = "Full backup of " + $dbname
$dbbk.BackupSetName = $dbname + " Backup"
$dbbk.Database = $dbname
$dbbk.MediaDescription = "Disk"
$dbbk.Devices.Add($bdi)
$dbbk.SqlBackup($s)
$dbbk.Devices.Remove($bdi) |out-null
$bckfile = $null

Я знаю, что вы не упомянули Powershell, но, увидев тег .net, я подумал, что это может помочь. Не должно быть слишком много усилий, чтобы переписать на ваш вкус .net по выбору.

...