如何在Azure Data Factory中读取.bak文件并迁移数据至Azure SQL数据库
ADF迁移存储账户.bak文件到Azure SQL数据库的可行方案
ADF本身确实不支持直接解析.bak格式的SQL Server备份文件,但可以通过ADF编排其他Azure服务的能力完成端到端的迁移流程,常见的可行方案如下:
方案1:搭配Azure SQL原生还原能力(最轻量化方案)
该方案无需引入额外服务,仅靠ADF的编排能力+Azure SQL的原生还原功能即可实现,适合绝大多数常规场景:
- 提前配置权限:给Azure SQL的服务主体授予存储账户的存储Blob数据读取者权限,或者提前在Azure SQL中创建指向存储账户的SAS凭据
- 在ADF中配置
存储事件触发器或定时触发器,监测存储账户中.bak文件的上传完成事件 - 在ADF管道中添加Azure SQL 执行脚本活动,执行从URL还原备份的SQL命令,参考代码如下:
RESTORE DATABASE [目标数据库名称] FROM URL = 'https://<存储账户名>.blob.core.windows.net/<容器名>/<备份文件名>.bak' WITH CREDENTIAL = 'https://<存储账户名>.blob.core.windows.net/<容器名>', MOVE '备份文件中的逻辑数据文件名' TO '目标数据文件路径', MOVE '备份文件中的逻辑日志文件名' TO '目标日志文件路径', REPLACE -- 若需要覆盖目标端已有数据库可添加该参数
提示:该方案对Azure SQL托管实例兼容性最好,Azure SQL单库/弹性池仅支持还原兼容版本的.bak文件。
方案2:搭配Azure自动化/临时虚拟机实现(适配复杂场景)
如果遇到.bak版本不兼容、需要提前做备份文件清洗、校验等预处理操作,可以选择该方案:
- 提前在Azure自动化账户中创建PowerShell Runbook,或者准备预装了sqlcmd、bcp等SQL Server工具的临时虚拟机镜像
- 编写处理脚本逻辑:从存储账户拉取.bak文件到本地磁盘,还原到临时SQL实例,校验数据后将需要迁移的表/数据同步到目标Azure SQL数据库
- 在ADF管道中添加Web活动或Azure自动化活动,触发对应的Runbook/脚本执行,同步等待执行结果后继续后续数据处理流程
- 该方案适配性极强,几乎可以覆盖所有特殊备份文件的迁移需求。
方案3:使用ADF自定义活动实现(适配自托管IR场景)
如果你已经在使用自托管集成运行时(SHIR),可以直接将迁移逻辑封装为ADF自定义活动,完全融入ADF的调度监控体系:
- 开发.NET/Python自定义脚本,实现.bak文件的拉取、还原、数据同步全逻辑
- 将脚本打包后上传到指定存储账户,在ADF管道中添加自定义活动,指定SHIR节点运行该脚本
- 该方案不需要额外管理其他服务的调度逻辑,所有流程都可以在ADF控制台统一监控、排错。
注意:如果.bak文件的SQL Server版本过低,无法直接还原到Azure SQL,建议先将备份文件升级到兼容版本,或者提前导出为bacpac格式后再执行迁移。
内容的提问来源于stack exchange,提问作者Ayush Chauhan
相关产品推荐
相关产品推荐

