如何通过PowerShell将跨域SQL Server数据库备份存储到本地域
方案可行性结论
可以实现,无需在OtherDomain域内存储中间备份文件,全程仅通过已开放的1433端口完成备份数据传输,直接将备份文件存储在MyDomain域内。
实现原理
利用SQL Server的流式备份能力,通过PowerShell的SqlServer模块直接从源实例拉取备份数据流,写入本地(MyDomain域内)存储路径,备份数据不会在源实例所属的OtherDomain域落地。
前置要求
- 运行PowerShell脚本的设备需同时连通TheOtherSide实例的1433端口,且对MyDomain域内的目标备份存储路径有写入权限
- 连接TheOtherSide的账号需具备源库
BACKUP DATABASE权限,支持SQL认证或域账号认证
操作步骤
首先安装依赖的PowerShell模块,执行命令:
Install-Module -Name SqlServer -Scope CurrentUser -Force参考以下脚本编写自动化逻辑,可根据实际需求调整参数:
# 源实例配置 $sourceInstance = "TheOtherSide" $sourceDb = "CoolDatabase" # 源实例认证信息,如使用SQL认证只需替换账号格式即可 $sourceUser = "你的源实例账号" $sourcePwd = ConvertTo-SecureString "你的源实例密码" -AsPlainText -Force $sourceCred = New-Object System.Management.Automation.PSCredential($sourceUser, $sourcePwd) # 本地备份路径(MyDomain域内存储位置) $backupSavePath = "D:\SQLBackups\CoolDatabase_$(Get-Date -Format 'yyyyMMddHHmmss').bak" # 执行流式备份,直接写入本地路径 Backup-SqlDatabase -ServerInstance $sourceInstance ` -Credential $sourceCred ` -Database $sourceDb ` -BackupFile $backupSavePath ` -CompressionOption On ` -CopyOnly
扩展自动化(可选)
如果需要后续自动恢复到MySide实例,可在备份完成后追加恢复脚本:
# 目标实例配置 $destInstance = "MySide" $destDb = "CoolDatabase" Restore-SqlDatabase -ServerInstance $destInstance ` -Database $destDb ` -BackupFile $backupSavePath ` -ReplaceDatabase
注意事项
- 开启
-CompressionOption On参数可启用SQL Server内置备份压缩,大幅减少传输数据量,压缩运算在源实例侧执行,不会额外占用带宽 - 加
-CopyOnly参数可避免本次备份干扰源实例现有的备份链,生产环境建议保留该参数 - 全程仅使用1433端口通信,无需开通其他端口权限,符合现有网络规则
- 可将脚本加入Windows任务计划,按指定周期自动执行即可实现全流程自动化
内容的提问来源于stack exchange,提问作者Henrov
相关产品推荐
相关产品推荐

