2010-07-26 1 views
5

La mia domanda è semplice, come posso programmare SQL SMO per eseguire il backup locale, collegandolo a un server remoto. Voglio salvare il file bak su un computer locale che si connette al server remoto. Inoltre, voglio che gli utenti con un determinato privilegio siano in grado di salvare i backup localmente.SQL Server SMO riprende localmente dal server remoto

risposta

6

Non è possibile - punto. I backup di SQL Server possono solo essere salvati su un disco locale, locale allo stesso SQL Server.

È non è possibile con qualsiasi trucco o strumenti eseguire il backup di un server SQL remoto sul disco rigido locale. Non posso farlo

4

MODIFICA: rilettura della domanda e risposta di marc_s la mia risposta funzionerà solo se per server remoto si sta parlando di un server sulla rete da qualche parte. Se stai parlando di un server SQL ospitato su un altro dominio da qualche parte marc_s è giusto e la mia risposta è inutile. Lo lascerò qui comunque se parli di un server nel tuo dominio. Edit Ends

Dopo aver impostato una condivisione sulla mia directory C: \ tmp locale su cui è in esecuzione questo bit di PowerShell fa il backup.


[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 

Lo so che non ha citato Powershell, ma da quando ho visto il tag .net ho pensato che potrebbe essere ancora un po 'di aiuto. Non dovrebbe essere troppo sforzo per riscrivere il tuo gusto .net di scelta.