Ubuntu上SQL Server的数据恢复方法
一、常用恢复方法概览
二、方法对照与适用场景
| 方法 | 适用场景 | 关键要点 |
|---|---|---|
| sqlcmd 命令行 | 日常恢复、自动化脚本、CI/CD | 使用 RESTORE 命令;必要时配合 MOVE、NORECOVERY/RECOVERY |
| SSMS 图形界面 | 临时操作、复杂还原、需要可视化校验 | 远程连接 Ubuntu 实例;向导化选择备份集与文件映射 |
| 时间点恢复 | 误删数据、需回滚到某一时刻 | 需 FULL 模式;按顺序还原完整→差异→日志,日志用 STOPAT |
| 迁移式恢复 | 跨环境迁移、重建实例 | 先拷贝 .bak;还原时用 MOVE 指定新路径;注意文件权限 |
| 第三方工具 | 无备份或文件损坏 | 仅作补救;优先尝试官方支持渠道与备份 |
三、关键操作要点与命令示例
使用 sqlcmd 还原全库(示例)
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "RESTORE DATABASE [YourDB] \
FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
WITH RECOVERY"
如目标实例上已有同名数据库或需覆盖,可加 WITH REPLACE;若需链式还原(配合差异/日志),首步用 WITH NORECOVERY。
时间点恢复步骤(FULL 模式)
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "BACKUP LOG [YourDB] TO DISK='/var/opt/mssql/backups/YourDB_tail.trn' WITH NORECOVERY"
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "RESTORE DATABASE [YourDB] \
FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
WITH NORECOVERY, REPLACE"
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "RESTORE LOG [YourDB] \
FROM DISK='/var/opt/mssql/backups/YourDB_log.trn' \
WITH STOPAT='2025-12-24T10:00:00', RECOVERY"
要点:确保数据库恢复模式为 FULL,并按 完整 → 差异(可选) → 日志 的顺序还原。
迁移式恢复与文件映射
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "RESTORE DATABASE [YourDB] \
FROM DISK='/var/opt/mssql/backups/YourDB_full.bak' \
WITH MOVE 'YourDB_Data' TO '/var/opt/mssql/data/YourDB.mdf', \
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_log.ldf', \
REPLACE"
逻辑文件名(如 YourDB_Data/YourDB_Log)可用以下查询获取:
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "RESTORE FILELISTONLY FROM DISK='/var/opt/mssql/backups/YourDB_full.bak'"
目标目录需存在且 mssql 用户可写(如 /var/opt/mssql/data)。
四、实用建议与注意事项