Ubuntu环境下SQL Server数据恢复的常见方法及操作步骤
sqlcmd是SQL Server自带的命令行工具,适用于Ubuntu服务器环境,支持通过T-SQL命令完成数据库恢复。
systemctl status mssql-server验证);sudo apt-get update && sudo apt-get install mssql-tools);/var/opt/mssql/backups/目录),并确认目录权限正确(sudo chown mssql:mssql /var/opt/mssql/backups/)。sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_full.bak' WITH REPLACE, RECOVERY"
REPLACE:覆盖现有同名数据库;RECOVERY:将数据库恢复至可用状态(若需应用后续增量/日志,改为NORECOVERY)。需先恢复最近的完整备份,再依次恢复增量备份:
# 恢复完整备份(NORECOVERY表示未完成恢复)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_full.bak' WITH NORECOVERY"
# 恢复增量备份(如2025-09-23的增量备份)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_diff_20250923.bak' WITH RECOVERY"
需先恢复完整备份和所有增量备份,最后恢复事务日志:
# 恢复完整备份(NORECOVERY)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_full.bak' WITH NORECOVERY"
# 恢复事务日志(如2025-09-23的日志备份)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_log_20250923.bak' WITH STOPAT='2025-09-23 18:00:00', RECOVERY"
STOPAT:指定恢复到的具体时间点(如误删除数据的时间),需开启SQL Server的完整恢复模式(ALTER DATABASE [YourDatabaseName] SET RECOVERY FULL)。恢复完成后,检查数据库完整性并测试数据:
# 检查数据库物理结构完整性
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS"
# 查询表数据(示例:查询dbo.Users表的前10条记录)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "USE [YourDatabaseName]; SELECT TOP 10 * FROM dbo.Users;"
若习惯图形操作,可通过SSMS连接Ubuntu上的SQL Server实例进行恢复:
在Windows电脑上下载并安装SSMS(Microsoft官方提供),通过SSH隧道或直接连接Ubuntu服务器的SQL Server实例(默认端口1433)。
localhost或Ubuntu服务器IP;身份验证:SQL Server身份验证;用户名:sa;密码:设置的密码),点击“连接”;若未备份或备份损坏,可尝试使用第三方数据恢复工具(如SysTools SQL Recovery、Recovery for SQL Server),但恢复效果取决于数据覆盖情况。
BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_current.bak' WITH INIT),防止恢复过程中出现意外;sysadmin或dbcreator角色权限;通过以上方法,可根据数据丢失场景选择合适的恢复方式。若恢复失败,建议检查备份文件的完整性(如使用RESTORE VERIFYONLY命令),或联系Microsoft技术支持获取帮助。