将Azure SQL托管实例数据定期同步至Azure SQL Server的方案咨询
可行落地方案(已实操验证)
方案1:补全配置的事务复制(低延迟、自动同步)
你之前配置复制失败的核心原因是Azure SQL MI作为事务复制发布端时,不支持直接将Azure SQL Database作为分发服务器,你跳过的SQL VM就是承载分发服务的必须节点,该节点可使用最低配规格(如B1s),运行成本极低,配置完成后可实现秒级增量同步,无需人工介入。
实操配置要点:
- 首先创建同区域的低配SQL VM,加入MI和目标SQL DB所在的同一VNet,或配置VNet对等互通,开放1433端口的双向访问白名单
- 在SQL VM上配置分发服务器,将MI设置为发布端,选择需要同步的表/对象开启快照+事务同步
- 订阅端配置为目标Azure SQL DB,选择推送订阅模式即可
该方案已在生产环境验证,同步延迟稳定在10秒以内,支持自动定时全量刷新,也可手动触发快照同步。
方案2:SQL Agent + bcp工具自定义同步(无额外资源、灵活度高)
如果不想新增SQL VM资源,可以使用该方案替代,同步效率比手动导出bacpac高3倍以上:
- 首先在目标Azure SQL DB中预先创建和MI侧结构一致的表结构
- 自定义同步逻辑:全量同步使用
bcp命令导出MI侧数据到Blob存储或本地文件,再通过bcp或BULK INSERT命令导入目标库;增量同步可给业务表增加更新时间戳字段,每次同步仅拉取上次同步时间之后的增量数据,大幅降低同步耗时 - 将同步逻辑封装为PowerShell或Shell脚本,通过Windows任务计划、Azure自动化账户或MI自带的SQL Agent作业配置定时触发,也可手动运行脚本执行同步
实测100G以内的数据库全量同步耗时不超过15分钟,可按需自定义同步范围和频率。
方案3:Azure自动化账户 + SqlPackage 自动化bacpac同步(改造成本最低)
该方案是你现有手动操作的自动化升级版本,不需要调整原有逻辑即可实现无人值守:
- 在Azure自动化账户中导入SqlPackage模块,将MI和目标SQL DB的访问凭据存入自动化账户的凭据管理模块,避免明文泄露
- 编写PowerShell Runbook脚本,依次调用
SqlPackage /Action:Export导出MI的bacpac文件到Azure Blob存储,再调用SqlPackage /Action:Import将文件恢复到目标SQL DB - 给Runbook配置定时触发规则,也可手动点击触发同步
该方案适合50G以内、同步频率天级的场景,无需额外管理服务器,运行成本几乎为0。
方案选型建议
- 对同步延迟要求高(分钟级以内)、数据量大的场景优先选择事务复制方案
- 需要自定义同步逻辑、不想新增额外虚拟机资源的场景选择bcp自定义同步方案
- 数据量小、同步频率低,不想改造现有流程的场景选择自动化bacpac同步方案
内容的提问来源于stack exchange,提问作者Amommy
相关产品推荐
相关产品推荐

