2010-07-26 104 views
5

我的問題很簡單,我如何通過連接到遠程服務器來編程SQL SMO以進行本地備份。我想將bak文件保存到連接到遠程服務器的本地計算機上。另外,我希望只有特定權限的用戶才能在本地保存備份。SQL Server SMO從遠程服務器本地備份

回答

6

你不能 - 期。 SQL Server的備份可以將只有保存到本地磁盤 - 本地到SQL Server本身。

不能用用任何技巧或工具將遠程SQL Server備份到本地硬盤。只是不能這樣做。

4

編輯:重新閱讀你的問題和marc_s答案我的答案只有在遠程服務器你正在談論網絡上的服務器的地方。如果你正在討論另一個域上託管的SQL Server marc_s是對的,我的答案是沒用的。無論如何,如果您正在討論域中的服務器,我會將其留在這裏。 編輯終止

在我的本地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風格的選擇。