使用备份文件恢复(最常用方法)
在Ubuntu上恢复SQL Server数据的核心手段是通过备份文件(.bak)。若拥有最近的完全备份,可使用RESTORE DATABASE命令并指定物理路径还原:
sqlcmd -S localhost -U SA -P 'YourPassword' -Q "RESTORE DATABASE [YourDatabaseName]
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_full.bak'
WITH REPLACE, MOVE 'LogicalDataName' TO '/var/opt/mssql/data/YourDatabaseName.mdf',
MOVE 'LogicalLogName' TO '/var/opt/mssql/data/YourDatabaseName_Log.ldf', RECOVERY, STATS = 5"
其中,LogicalDataName和LogicalLogName需替换为备份文件中的逻辑名称(可通过RESTORE FILELISTONLY FROM DISK = '备份路径'查询);REPLACE参数用于覆盖现有数据库;STATS = 5显示恢复进度。
若存在增量备份,需先还原最近的完全备份,再依次还原增量备份(使用WITH NORECOVERY标记未完成恢复,最后一个增量备份用WITH RECOVERY完成):
-- 还原完全备份
RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_full.bak'
WITH REPLACE, NORECOVERY, STATS = 5;
-- 还原第一个增量备份
RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_diff1.bak'
WITH NORECOVERY, STATS = 5;
-- 还原第二个增量备份并完成恢复
RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_diff2.bak'
WITH RECOVERY, STATS = 5;
事务日志恢复(完整恢复模式下细化恢复)
若数据库处于完整恢复模式且有事务日志备份,可实现“时间点恢复”(如恢复到误删除数据前的某一时刻)。步骤如下:
WITH NORECOVERY);WITH NORECOVERY);WITH STOPAT = 'YYYY-MM-DD HH:MI:SS'):-- 还原完全备份
RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_full.bak'
WITH REPLACE, NORECOVERY, STATS = 5;
-- 还原事务日志至特定时间点
RESTORE LOG [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_log.bak'
WITH STOPAT = '2025-10-17 18:00:00', RECOVERY, STATS = 5;
第三方工具恢复(无备份时的补救措施)
若未备份或备份损坏,可使用第三方工具扫描数据库文件(.mdf/.ldf)或日志文件恢复数据。常见工具如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"
若存在错误,可使用ALTER DATABASE [YourDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE将数据库设为单用户模式,再用DBCC CHECKDB ([YourDatabaseName], REPAIR_ALLOW_DATA_LOSS)修复(谨慎使用,可能导致数据丢失)。
2. 重建索引:若索引损坏,可通过ALTER INDEX ALL ON [TableName] REBUILD重建索引,提升查询性能。
3. 更新统计信息:使用UPDATE STATISTICS [TableName]更新表统计信息,帮助SQL Server优化查询计划。
关键注意事项
ALTER DATABASE [YourDatabaseName] SET RECOVERY FULL设置。