求助:如何将SQL .bacpac文件导入Azure SQL Edge Docker容器
解决Azure SQL Edge容器导入.bacpac文件的可行方案
针对Azure SQL Edge不支持contained database authentication的限制,以下是几种可行的导入方案:
方案1:调整sqlpackage导入参数直接导入
Azure SQL Edge不支持包含数据库,导入时需显式禁用包含数据库创建,同时修正命令中的路径和连接细节:
- 确保使用最新版sqlpackage(建议直接在主机上运行,避免容器内安装的繁琐,或使用容器内匹配版本的工具)
- 复制bacpac到容器(路径需正确):
docker cp ./bpCustomer.bacpac azuresqledge:/home/mssql/backpack/mydatabase.bacpac - 执行导入命令(注意绝对路径、端口及禁用包含数据库参数):
关键说明:sqlpackage /Action:Import /tsn:localhost,1433 /tdn:target_db_name /tu:sa /tp:mypassword /sf:/home/mssql/backpack/mydatabase.bacpac /ttsc:true /p:CreateContainedDatabase=false/tsn需指定端口(默认1433,若容器映射了其他端口则替换)/sf必须使用容器内的绝对路径/p:CreateContainedDatabase=false强制不创建包含数据库,规避Azure SQL Edge的特性限制
方案2:将bacpac转换为SQL脚本后导入
若直接导入仍有问题,可先将bacpac转为SQL脚本,移除包含数据库相关语句后执行:
- 生成导入脚本(主机执行,无需复制bacpac到容器):
sqlpackage /Action:Script /sf:./bpCustomer.bacpac /tdn:target_db_name /tu:sa /tp:mypassword /tsn:localhost,1433 /ttsc:true /p:ScriptCreateContainedDatabase=false /o:./import_script.sql - 编辑生成的
import_script.sql:- 删除所有涉及
CONTAINED DATABASE的配置语句 - 若脚本中有创建包含用户的语句,替换为普通SQL登录映射(例如将
CREATE USER [user] WITH CONTAINED改为CREATE USER [user] FOR LOGIN [login])
- 删除所有涉及
- 在Azure SQL Edge中执行修改后的脚本,完成数据库对象创建
方案3:使用Azure Data Studio图形化导入
通过图形化工具简化操作,自动处理包含数据库限制:
- 打开Azure Data Studio,连接到Azure SQL Edge容器(服务器地址为
localhost:映射端口,用户名sa,密码为容器SA密码) - 右键点击目标服务器,选择导入数据层应用程序
- 选择本地的
.bacpac文件(无需复制到容器) - 在导入向导的高级设置中,勾选不创建包含数据库,完成导入流程
内容的提问来源于stack exchange,提问作者Paramjot Singh
相关产品推荐
相关产品推荐

