【发布时间】:2010-07-26 11:06:26
【问题描述】:
我的问题是直截了当的,如何通过连接到远程服务器对 SQL SMO 进行编程以进行本地备份。我想将 bak 文件保存到连接到远程服务器的本地机器上。此外,我希望只有特定权限的用户能够在本地保存备份。
【问题讨论】:
标签: .net sql-server backup smo
我的问题是直截了当的,如何通过连接到远程服务器对 SQL SMO 进行编程以进行本地备份。我想将 bak 文件保存到连接到远程服务器的本地机器上。此外,我希望只有特定权限的用户能够在本地保存备份。
【问题讨论】:
标签: .net sql-server backup smo
你不能 - 句号。 SQL Server 的备份只能保存到本地磁盘 - SQL Server 本身的本地磁盘。
您不能使用任何技巧或工具将远程 SQL Server 备份到本地硬盘。就是做不到。
【讨论】:
编辑: 重新阅读您的问题并 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 风格不应该花费太多精力。
【讨论】: