我的问题很简单,如何编写SQL SMO程序来连接到远程服务器并进行本地备份。我想将备份文件保存在连接到远程服务器的本地计算机上。此外,我希望只有特定权限的用户能够将备份保存在本地。
我的问题很简单,如何编写SQL SMO程序来连接到远程服务器并进行本地备份。我想将备份文件保存在连接到远程服务器的本地计算机上。此外,我希望只有特定权限的用户能够将备份保存在本地。
你无法 - 没有任何例外。SQL Server的备份只能保存在本地磁盘上 - 与SQL Server本身相邻的本地磁盘。
你不能使用任何技巧或工具将远程SQL Server备份到本地硬盘。就是做不到。
[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版本应该不需要太多的工作。