在 Ubuntu 上迁移 SQL Server 数据,常见有几种方式,取决于你的场景(同机/跨机、版本、数据量、是否停机等)。下面按最常用 → 进阶给你梳理。
bcp + 脚本(跨服务器通用)适合:Ubuntu → Ubuntu / Linux / Windows
bcp DatabaseName.dbo.TableName out table.bcp \
-c -t',' -S localhost -U sa -P 'YourPassword'
scp table.bcp user@目标服务器:/data/
bcp DatabaseName.dbo.TableName in table.bcp \
-c -t',' -S localhost -U sa -P 'YourPassword'
✅ 优点:稳定、快
❌ 缺点:表结构需提前建好
sqlcmd + 脚本(结构 + 数据)sqlcmd -S localhost -U sa -P 'pwd' \
-Q "SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.TableName'))"
sqlcmd -S localhost -U sa -P 'pwd' \
-Q "SELECT * FROM dbo.TableName" -o data.sql
⚠️ 不适合大表
sqlcmd -S localhost -U sa -P 'pwd' \
-Q "BACKUP DATABASE TestDB TO DISK='/var/opt/mssql/backup/testdb.bak'"
scp /var/opt/mssql/backup/testdb.bak user@目标:/var/opt/mssql/backup/
sqlcmd -S localhost -U sa -P 'pwd' \
-Q "RESTORE DATABASE TestDB FROM DISK='/var/opt/mssql/backup/testdb.bak' WITH MOVE 'TestDB' TO '/var/opt/mssql/data/TestDB.mdf', MOVE 'TestDB_log' TO '/var/opt/mssql/data/TestDB.ldf'"
✅ 最完整(用户、权限、索引)
✅ 生产环境首选
mssql-tools + SSMS(Windows 辅助)如果你有 Windows + SSMS:
.bak 到 Ubuntusqlcmd 还原docker cp sql_container:/var/opt/mssql/backup/db.bak ./db.bak
sudo chown mssql:mssql /var/opt/mssql/backup
| 场景 | 推荐 |
|---|---|
| 整库迁移 | 备份/还原 |
| 单表 | bcp |
| 小数据 | sqlcmd |
| 生产 | 备份还原 |
如果你愿意,可以告诉我:
我可以直接给你一步步命令。