Ubuntu下SQL Server数据库恢复方法
在恢复前需完成以下基础配置:
msodbcsql17(用于sqlcmd工具连接),可通过sudo apt-get update && sudo apt-get install msodbcsql17命令安装。.bak备份文件(如完整备份、差异备份、事务日志备份),确保文件存储在Ubuntu服务器可访问的路径(如/var/opt/mssql/backup/)。ALTER DATABASE [数据库名] SET RECOVERY FULL;命令设置。sqlcmd是Ubuntu下最常用的SQL Server命令行工具,适用于手动或脚本化恢复。
WITH REPLACE参数用于覆盖现有数据库,WITH RECOVERY表示恢复后可立即使用:sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH REPLACE, RECOVERY, STATS=10"
STATS=10表示每完成10%显示一次进度。WITH NORECOVERY表示不恢复数据库,等待后续差异备份),再恢复差异备份(WITH RECOVERY):# 恢复完整备份(不恢复)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH REPLACE, NORECOVERY, STATS=10"
# 恢复差异备份(恢复)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_diff.bak' WITH RECOVERY, STATS=10"
# 恢复完整备份(不恢复)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH REPLACE, NORECOVERY, STATS=10"
# 恢复差异备份(不恢复,若有)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_diff.bak' WITH NORECOVERY, STATS=10"
# 恢复事务日志备份(恢复到指定时间,如2025-10-30 10:00:00)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_log.bak' WITH STOPAT='2025-10-30 10:00:00', RECOVERY, STATS=10"
STOPAT参数指定恢复到的具体时间点。若习惯图形界面,可通过SSMS(SQL Server Management Studio)进行恢复:
.bak备份文件(如完整备份、差异备份、事务日志备份)。若备份文件损坏或需从日志文件中恢复误删除数据,可使用第三方工具(如SysTools SQL Recovery、Recovery for SQL Server):
恢复完成后,需验证数据库完整性和可用性:
DBCC CHECKDB命令检测数据库是否有损坏:sqlcmd -S localhost -U SA -P 'YourPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS, ALL_ERRORMSGS"
若输出无错误,则数据库完整。