使用备份文件恢复数据库
在Debian上恢复SQL Server数据库的核心方法是通过备份文件(.bak)实现。若需覆盖现有数据库,可使用RESTORE DATABASE [数据库名] FROM DISK '备份文件路径' WITH REPLACE, NORECOVERY;命令(REPLACE参数强制覆盖,NORECOVERY保留数据库在恢复状态,用于后续事务日志还原);若需逐步还原事务日志(需数据库处于完整恢复模式),则先执行完全备份还原,再通过RESTORE LOG [数据库名] FROM DISK '事务日志路径' WITH RECOVERY;命令应用日志(RECOVERY参数使数据库可读写)。此方法适用于常规的完全恢复或时间点恢复场景。
事务日志恢复(完整恢复模式下)
若数据库启用了完整恢复模式,可通过事务日志备份实现更细粒度的数据恢复(如误删除数据恢复至特定时间点)。操作流程为:先还原最近的完全备份(WITH NORECOVERY),再按顺序还原所有后续事务日志备份(最后一个日志备份使用WITH RECOVERY)。例如:RESTORE DATABASE [数据库名] FROM DISK '完全备份.bak' WITH NORECOVERY; → RESTORE LOG [数据库名] FROM DISK '日志1.trn' WITH NORECOVERY; → RESTORE LOG [数据库名] FROM DISK '日志2.trn' WITH RECOVERY;。此方法能有效减少数据丢失范围。
应急模式与日志修复(严重损坏场景)
当数据库处于“恢复挂起”状态(如备份文件损坏、数据库无法正常启动)时,需通过应急模式修复:首先用ALTER DATABASE [数据库名] SET EMERGENCY;将数据库设为紧急模式(允许管理员访问),再用DBCC CHECKDB([数据库名], REPAIR_ALLOW_DATA_LOSS);修复日志和数据一致性(REPAIR_ALLOW_DATA_LOSS可能丢失部分数据,需谨慎使用),最后通过ALTER DATABASE [数据库名] SET MULTI_USER;恢复多用户访问。此方法为最后手段,建议在测试环境验证后再应用于生产环境。
使用SQL Server Management Studio (SSMS)图形化恢复
SSMS提供了直观的图形界面简化恢复流程:打开SSMS并连接到Debian上的SQL Server实例,右键点击“数据库”→选择“还原数据库”,在“还原的数据库”选项卡中输入目标数据库名称,在“源设备”中添加备份文件(.bak),切换至“选项”页签可设置恢复选项(如“覆盖现有数据库”“恢复时间点”),确认后点击“确定”即可执行恢复。此方法适合不熟悉T-SQL的用户,操作便捷。
命令行工具(sqlcmd)恢复
通过sqlcmd命令行工具可实现自动化恢复(如定时任务、脚本批量恢复)。基本语法为:sqlcmd -S localhost -U SA -P [密码] -Q "RESTORE DATABASE [数据库名] FROM DISK='备份文件路径' WITH REPLACE, NORECOVERY, STATS=5;"(STATS=5显示恢复进度,每完成5%输出一次状态)。对于复杂场景(如恢复多个数据库),可编写T-SQL脚本并通过sqlcmd执行,例如启用xp_cmdshell后循环遍历备份文件执行恢复。
第三方工具辅助恢复
若常规方法无法解决数据丢失问题(如误删除表、备份文件损坏),可使用第三方工具(如SysTools SQL Recovery、Recovery for SQL Server)。这些工具支持从损坏的.bak文件或在线数据库中恢复数据,部分工具还能恢复特定表或记录。使用时需注意:选择可靠工具(避免恶意软件),并在恢复前备份当前数据库(防止二次损坏)。
Docker容器中的恢复注意事项
若Debian上的SQL Server通过Docker容器运行,恢复流程需适配容器环境:备份文件需挂载到容器内的SQL Server数据目录(如/var/opt/mssql/data),或通过docker cp命令将备份文件复制到容器内;恢复命令与物理机一致,但需在容器内执行(如docker exec -it [容器ID] /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P [密码] -Q "RESTORE DATABASE [数据库名] FROM DISK='/var/opt/mssql/data/备份文件.bak' WITH REPLACE;")。此外,建议使用Docker卷管理备份文件,确保数据持久化。