CentOS 下 SQL Server 数据恢复实操指南
一 准备与前提
二 标准恢复流程
步骤 1 拷贝备份到服务器
示例:将 Windows 生成的备份通过 SFTP 上传到 /var/opt/mssql/backup。在 Linux 上确认文件存在与权限:
ls -l /var/opt/mssql/backup/*.bak
步骤 2 使用 T-SQL 还原数据库
基本完整恢复(覆盖同名库):
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB.bak’
WITH REPLACE, RECOVERY;
如备份包含多个文件/文件组,先执行 RESTORE FILELISTONLY 查看逻辑名,再用 MOVE 指定新路径:
RESTORE FILELISTONLY FROM DISK = N’/var/opt/mssql/backup/YourDB.bak’;
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB.bak’
WITH
MOVE N’YourDB_Data’ TO N’/var/opt/mssql/data/YourDB.mdf’,
MOVE N’YourDB_Log’ TO N’/var/opt/mssql/data/YourDB_log.ldf’,
RECOVERY;
步骤 3 时间点恢复(完整 + 差异 + 日志)
步骤 4 验证
连接数据库并检查可用性:
SELECT name, state_desc FROM sys.databases WHERE name = N’YourDB’;
检查完整性:
DBCC CHECKDB ([YourDB]) WITH NO_INFOMSGS, ALL_ERRORMSGS;
必要时重建索引、更新统计信息,并进行业务功能验证。
三 常见场景与命令示例
场景 A 覆盖还原到现有库
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB.bak’
WITH REPLACE, RECOVERY;
场景 B 还原到新库名(避免覆盖)
RESTORE DATABASE [YourDB_New]
FROM DISK = N’/var/opt/mssql/backup/YourDB.bak’
WITH
MOVE N’YourDB_Data’ TO N’/var/opt/mssql/data/YourDB_New.mdf’,
MOVE N’YourDB_Log’ TO N’/var/opt/mssql/data/YourDB_New_log.ldf’,
RECOVERY;
场景 C 仅还原事务日志到指定时间点
RESTORE LOG [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_LOG.trn’
WITH STOPAT = ‘2025-12-15 09:00:00’, RECOVERY;
场景 D 无日志备份时从差异备份回滚
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_FULL.bak’ WITH NORECOVERY;
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_DIFF.bak’ WITH RECOVERY;
四 无备份或备份缺失时的处理
五 系统数据库与注意事项