用途:把现有数据库导入本地运行的 Azure SQL Database 容器,适用于本地还原后再开发、联调或验证数据库对象的场景。
主要能力与限制:该容器是本地运行的 Azure SQL Database 引擎(Private Preview),SERVERPROPERTY('EngineEdition') 返回 5,Edition 为 SQL Azure,并非 SQL Server 镜像 mcr.microsoft.com/mssql/server。镜像为 sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest,非 x64 主机需加 --platform linux/amd64。引擎不会自动建库,须先在 master 上执行 CREATE DATABASE appdb;不支持还原路径,BACKUP/RESTORE 在各会话中被拒绝(Msg 40510),故不能用 .bak,导入只能走 SqlPackage。用户库会话中的 USE 会返回 Msg 40508,应在连接串中指定 Database=appdb(sqlcmd 用 -d appdb)。
用法:先用 sqlcmd 在 master 上创建并确认目标库存在且为空;再对已建用户库执行导入。架构+数据用 /Action:Import 指向 .bacpac,仅架构用 /Action:Publish 指向 .dacpac,/TargetConnectionString 形如 Server=localhost,$HOST_PORT;Database=appdb;User Id=sa;Password=...;TrustServerCertificate=true。可借助响应文件语法避免密码出现在进程参数中。导入后校验 EngineEdition 是否为 5,并对关键表做行数抽查。最低版本参考:sqlpackage 170.4.83.3、go-sqlcmd 1.10.0,可用 sqlpackage /Version、sqlcmd --version 核对。
适用场景:本地复现 Azure SQL 数据库行为、导入 bacpac/dacpac 后开发与联调。
注意:PaaS 限制可能导致跨库三部分名称、USE 语句、SQL Agent 作业、服务器级登录/链接服务器、filestream、部分 CLR 与文件组设置无法迁移,须阅读 SqlPackage 输出处理跳过或阻塞项。不要使用 SQL Server 镜像,不要导入 master,不要依赖 /docker-entrypoint-initdb.d 自动初始化,也不要仅凭 docker run 成功判定就绪。安装细节、常见错误修复及容器回退方案暂未在资料中展开,需查阅其参考文档。