Ubuntu 与 SQL Server 数据迁移方法
一、常用迁移路径与适用场景
- 备份还原(.bak):同版本或跨版本迁移、一次性全量迁移首选,操作直观、可回滚。
- bcp 批量导入/导出:跨平台、跨实例大批量数据迁移或增量同步,灵活高效。
- SSMS 图形化导出/导入数据:适合小规模或一次性迁移,上手快。
- 数据库镜像 / AlwaysOn 可用性组:面向高可用与不停机切换,需企业版与集群组件支持。
- 第三方工具:如 Redgate SQL Compare、ApexSQL Diff,用于模式与数据比对/同步。
以上路径在 Ubuntu 上的 SQL Server 环境中均可用,选择时优先考虑数据量、停机窗口、版本差异与自动化需求。
二、方法一 备份还原(.bak)
- 步骤概览
- 在源库执行完整备份(SSMS 或 sqlcmd)。
- 将 .bak 文件传输到 Ubuntu(如 scp/rsync)。
- 在 Ubuntu 上用 sqlcmd 还原,必要时使用 WITH MOVE 指定数据/日志文件路径。
- 校验对象与数据一致性。
- 关键命令示例
- 备份(源库)
BACKUP DATABASE [YourDB] TO DISK = N'/path/YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full', SKIP, NOREWIND, NOUNLOAD, STATS = 10;
- 还原(Ubuntu 上的目标实例)
sqlcmd -S <服务器名或IP> -U sa -P '<密码>' -Q "
RESTORE DATABASE [YourDB]
FROM DISK = N'/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB_Data' TO N'/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Log' TO N'/var/opt/mssql/data/YourDB_log.ldf',
STATS = 5, REPLACE, RECOVERY;"
- 提示
- 逻辑文件名(如 YourDB_Data/YourDB_Log)可用 SSMS 或 RESTORE FILELISTONLY 查询。
- 目标路径需为 mssql 服务可写目录(常见为 /var/opt/mssql/data)。
- 跨版本还原时,目标实例版本需不低于源库;必要时考虑升级策略与兼容性检查。
三、方法二 bcp 批量导入导出
- 适用场景
- 从文件或其他数据库导出为 CSV/TSV,用 bcp 批量导入到 SQL Server(Ubuntu)。
- 跨实例、跨平台迁移大表,或做增量/分片加载。
- 关键命令示例
四、方法三 SSMS 图形化导出导入与工具选择
- SSMS 导出/导入数据
- 在 SSMS 中连接到源库,使用“任务”→“导出数据”将表/查询导出为平面文件,再在目标库执行“导入数据”。
- 适合小数据量、一次性迁移或快速验证。
- 第三方工具
- Redgate SQL Compare、ApexSQL Diff 可比对并同步对象结构/数据,适合复杂迁移与版本对齐。
- 高可用方案(可选)
- 需要不停机或快速切换时,可考虑 数据库镜像 或 AlwaysOn 可用性组(Linux 上通常结合 Pacemaker/Corosync 等集群组件)。
五、迁移前后检查与常见问题
- 迁移前
- 完整备份与回滚预案;评估数据量与停机窗口;确认 Ubuntu 上 SQL Server 已安装并可访问;准备 sqlcmd/bcp 等工具。
- 迁移后
- 校验对象数量、行数、主键/外键、约束、索引、触发器、视图;抽样查询与关键业务验证;性能基线对比与必要调优。
- 常见问题与处理
- 权限/路径:确保运行 mssql 的用户对目标目录(如 /var/opt/mssql/data)具备写权限;备份文件与还原路径一致。
- 逻辑文件名不匹配:用 RESTORE FILELISTONLY 确认并调整 MOVE 参数。
- 版本与兼容性:跨版本还原需满足版本规则;必要时先升级目标实例或使用兼容级别策略。
- 工具可用性:在 Ubuntu 上安装 mssql-tools18(含 sqlcmd/bcp)以执行脚本化迁移与批量操作。