Ubuntu上SQL Server数据恢复方法
确保已获取数据库的完整备份文件(.bak格式),并存储在Ubuntu服务器可访问的路径(如/var/opt/mssql/backup/)。若未提前备份,此方法不可用。
完全恢复(无差异/日志备份):
执行以下命令将备份文件还原到指定数据库(替换路径和数据库名):
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH REPLACE, RECOVERY"
REPLACE:覆盖现有数据库(若存在);RECOVERY:将数据库恢复至可用状态。差异备份恢复(需先恢复完全备份):
先恢复最新的完全备份,再恢复差异备份:
# 恢复完全备份(WITH NORECOVERY表示未完成恢复)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH NORECOVERY, REPLACE"
# 恢复差异备份(WITH RECOVERY表示完成恢复)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_diff.bak' WITH RECOVERY"
事务日志恢复(需完整恢复模式+日志备份):
若数据库处于完整恢复模式且有事务日志备份,可恢复至特定时间点(如误删除时间):
# 恢复完全备份(WITH NORECOVERY)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_full.bak' WITH NORECOVERY, REPLACE"
# 恢复所有后续事务日志(WITH NORECOVERY)
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_log1.bak' WITH NORECOVERY"
# 恢复至误删除时间点(STOPAT指定时间,如'2025-11-08 10:00:00')
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_log2.bak' WITH STOPAT='2025-11-08 10:00:00', RECOVERY"
恢复完成后,执行以下命令检查数据库完整性:
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS"
若输出无错误,则恢复成功。
若习惯图形界面,可通过SSMS恢复(需在Ubuntu上安装SSMS或使用Windows远程连接):
YourDatabaseName);在“选项”页签中,勾选“覆盖现有数据库”。若未备份且事务日志不可用,可尝试第三方数据恢复工具(如SysTools SQL Recovery、Recovery for SQL Server、ApexSQL Log):
db_owner角色的用户权限;