SQL Server SMO从远程服务器本地备份

5

我的问题很简单,如何编写SQL SMO程序来连接到远程服务器并进行本地备份。我想将备份文件保存在连接到远程服务器的本地计算机上。此外,我希望只有特定权限的用户能够将备份保存在本地。

2个回答

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版本应该不需要太多的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接