将Azure SQL数据库备份恢复到另一资源组现有Azure SQL数据库的方法
Azure SQL 生产库到已有Staging库跨资源组迁移方案
以下是3种可直接导入已有目标库的可行方案,无需新建数据库:
1. Azure Data Factory(ADF)全量同步(Azure原生无本地工具依赖)
- 前置操作:提前核对生产库与Staging库表结构完全一致(列名、数据类型、约束匹配),根据外键依赖顺序清空Staging库现有表数据,或提前禁用外键约束
- 在Azure门户创建与两个SQL库同区域的ADF实例,分别添加生产库、Staging库的链接服务,两个库的防火墙需开放ADF服务IP,或开启「允许Azure服务访问」开关
- 新建复制活动管道,源端选择生产库所有需要迁移的表,Sink端选择Staging库对应表,勾选按表名自动映射字段,如果存在自增列需在Sink配置中开启「允许标识插入」
- 触发管道全量运行,运行完成后可通过
COUNT(*)语句核对两边表行数一致性
2. SQL Server 快照复制(支持后续增量同步需求)
如果迁移后还需要定期同步生产数据到Staging环境,可使用SQL原生复制功能:
- 在生产库端配置分发服务器,选择快照复制类型(全量迁移无需开启事务复制的实时同步能力)
- 发布项选择生产库所有需要迁移的对象,包括表、视图、存储过程、自定义函数等
- 订阅端配置为目标Staging库,确保操作账号在两个库都有
db_owner权限,且两个库都已开启SQL Server身份验证 - 触发快照代理生成全量快照,快照生成完成后分发代理会自动将全量数据同步到已有Staging库
3. 本地工具迁移(无需开通额外Azure服务)
如果仅做一次性迁移不想占用Azure资源,可使用本地SQL工具操作:
- SSMS图形化操作:用SSMS同时连接两个库,右键生产库选择「任务→导出数据」,源选生产库,目标选Staging库,按向导步骤选择所有表、配置字段映射后直接运行即可
sqlpackage命令行操作:先导出生产库的dacpac文件(注意是dacpac不是bacpac,dacpac支持导入已有库),再执行发布命令即可同步到已有Staging库,参考命令:
# 导出生产库dacpac sqlpackage /Action:Extract /SourceConnectionString:"生产库连接串" /TargetFile:"prod.dacpac" # 发布到已有Staging库 sqlpackage /Action:Publish /TargetConnectionString:"Staging库连接串" /SourceFile:"prod.dacpac" /p:AllowIncompatiblePlatform=true /p:BlockOnPossibleDataLoss=false
通用注意事项
所有方案迁移前都需要完成三个前置校验:
- 提前对Staging库做全量备份,避免迁移操作导致数据丢失无法回滚
- 尽量选择生产业务低峰期操作,或从生产库只读副本读取数据做迁移,避免迁移锁表影响生产业务
- 涉及外键、触发器、唯一约束的场景,建议迁移前先在Staging库禁用,迁移完成后再重新启用,避免同步报错
内容的提问来源于stack exchange,提问作者ddfra
相关产品推荐
相关产品推荐

