centos下sqlserver如何数据恢复
CentOS 下 SQL Server 数据恢复实操指南
一 准备与前提
- 确认有可用的备份文件:数据库备份通常为 .bak,事务日志备份为 .trn。如无有效备份,只能尝试日志解析或第三方修复,成功率受限。
- 准备恢复环境:安装 mssql-tools(含 sqlcmd),并确保 mssql-server 服务可正常启动。
- 规划文件路径:将备份放到 Linux 路径(如 /var/opt/mssql/backup),并确保 mssql 用户对目录有读权限。
- 权限与安全:使用具有 sysadmin 权限的账户执行还原;生产环境建议先在测试环境演练。
二 标准恢复流程
-
步骤 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 时间点恢复(完整 + 差异 + 日志)
- 完整备份(NORECOVERY 保留还原状态)
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_FULL.bak’
WITH NORECOVERY; - 差异备份(如有,NORECOVERY)
RESTORE DATABASE [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_DIFF.bak’
WITH NORECOVERY; - 事务日志备份(时间点或到某一日志)
RESTORE LOG [YourDB]
FROM DISK = N’/var/opt/mssql/backup/YourDB_LOG.trn’
WITH RECOVERY;
如需恢复到某个时间点,可在末尾加:
WITH STOPAT = ‘2025-12-15 10:30:00’, RECOVERY;
- 完整备份(NORECOVERY 保留还原状态)
-
步骤 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;
四 无备份或备份缺失时的处理
- 误删表/数据但数据库仍在:可尝试通过事务日志函数 fn_dblog 定位删除操作,再结合备份或第三方工具恢复;此方法对 DELETE 更有效,TRUNCATE 通常无法通过日志直接回滚。
- 第三方修复工具:如 SysTools SQL Recovery、Stellar Phoenix SQL Database Repair、ApexSQL Recover 等,可扫描 MDF/NDF 并尝试提取表/记录。
- 极端情况:立即停止写入,进行磁盘级文件恢复,必要时联系专业数据恢复服务。
五 系统数据库与注意事项
- 系统数据库恢复(如 master):通常需要单用户模式启动实例,使用安装介质或模板重建后再还原系统库;操作复杂且风险高,务必在测试环境演练并严格按官方流程执行。
- 一般注意事项:
- 还原前备份当前数据库与关键配置;
- 使用 MOVE 明确数据/日志文件路径,避免与现有文件冲突;
- 还原后执行 DBCC CHECKDB、重建索引与更新统计信息;
- 定期验证备份可用性与恢复演练,确保 RPO/RTO 达标。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos下sqlserver如何数据恢复
本文地址: https://pptw.com/jishu/772989.html
