2010-07-26 87 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风格的选择。

相关问题