2010-07-26 2 views
5

Ma question est simple, comment puis-je programmer SQL SMO pour effectuer une sauvegarde locale, en se connectant à un serveur distant. Je veux enregistrer le fichier bak sur une machine locale qui se connecte au serveur distant. De plus, je souhaite que les utilisateurs disposant de certains privilèges puissent sauvegarder les sauvegardes localement.SQL Server SMO reprendre localement à partir du serveur distant

Répondre

6

Vous ne pouvez pas - période. Sauvegardes de SQL Server peuvent seulement être enregistrées sur un disque local - local pour le serveur SQL lui-même.

Vous ne pouvez pas avec des astuces ou des outils de sauvegarde d'un serveur SQL distant sur votre disque dur local. Je ne peux pas le faire. Relecture de votre question et réponse de marc_s ma réponse ne fonctionnera que si par serveur distant vous parlez d'un serveur sur votre réseau quelque part.

4

EDIT: Si vous parlez d'un serveur SQL hébergé sur un autre domaine quelque part marc_s a raison et ma réponse est inutile. Je vais le laisser ici de toute façon au cas où vous parlez d'un serveur dans votre domaine. Modifier les extrémités

Après avoir défini un partage sur mon répertoire local C: \ tmp, ce bit de Powershell effectue la sauvegarde.


[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 

Je sais que vous n'avez pas parlé Powershell, mais depuis que j'ai vu la balise .net je pensais que ce pourrait être encore un peu d'aide. Ne devrait pas être trop d'effort pour réécrire à votre saveur .net de choix.

Questions connexes