18620311365
数据库

SQL Server 误删恢复:8KB 页、页头与事务日志

2026-09-28 · 约 7 分钟

误删之后数据去了哪

DELETE 删除的行、DROP 的表,数据页通常不会立刻被物理清除,只是被标记为"可复用"。在新写入覆盖这些页之前,残留数据有机会被找回。这就是为什么误删后第一要务是"停止写入"。

误删后绝对不要做的事

①不要重启数据库实例(可能触发清理);②不要收缩数据库/文件(Shrink 会移动并清除空闲页,把可恢复数据抹掉);③不要大量写入新数据;④不要盲目分离/附加 MDF。每一个动作都可能缩小恢复窗口。

恢复的三条路径

①有备份 + 日志:还原到误删前时间点(point-in-time)最干净;②事务日志(LDF)完整:可解析日志闪回误删操作;③无备份无日志:直接对 MDF 底层扫描,解析残留数据页重建表记录。我们的顺序是先固证(只读副本),再选性价比最高的路径。

企业如何预防

关键操作前备份;开启完整恢复模式并定期备份日志;生产库权限分级、危险操作二次确认;重要表加触发器或审计。恢复是兜底,备份才是根本。

常见问题

DELETE 没加 WHERE 删了全表还能恢复吗?

有机会。立即停止写入,残留数据页未被覆盖前可解析找回;有备份 + 日志可精确闪回。

DROP TABLE 和 DELETE 哪个好恢复?

取决于后续写入与日志。DROP 的表元数据被移除,但数据页残留仍可扫描重建;DELETE 闪回更依赖日志。两者都先停写固证。

没有备份能恢复吗?

可以。对 MDF 底层扫描解析残留页,恢复率取决于覆盖程度。先只读镜像,别在原库上操作。

怎么收费?

数据库修复 600 元起,按库大小与故障评估。免费检测,可签保密协议。

结构参数速查(可自行核对)

SQL Server 的页结构固定,DELETE 只改行头的删除位,数据行往往还在页里。 能不能找回,取决于页有没有被复用、以及事务日志是否完整。

项目取值 / 位置说明
页大小8KB所有偏移按页号 × 8192 换算
页头页内前 96 字节含页类型、LSN、槽位信息
启动页文件 1 的第 9 页(页号 9)记录数据库引导信息与文件组
空间管理页PFS / GAM / SGAM / IAM判断页是否已被重新分配
事务日志ldf,记录 insert/delete 与补偿fn_dblog 可读出删除操作
恢复模式FULL / BULK_LOGGED / SIMPLESIMPLE 下日志截断,回溯能力受限

处置顺序

-- 1) 先查日志里是否有删除记录(只读查询)
SELECT [Current LSN], Operation, [Transaction ID], AllocUnitName
FROM fn_dblog(NULL, NULL)
WHERE Operation IN ('LOP_DELETE_ROWS','LOP_INSERT_ROWS');

-- 2) 直接看页内容(需要 DBCC 权限,先在生产库副本上做)
DBCC PAGE ('YourDB', 1, 12345, 3);   -- 3 = 详细模式

-- 3) 有完整备份时,优先还原到新库再比对,不要在故障库上做修复

第一步永远是备份 mdf/ldf(含正在写入的日志),再做分析。直接在故障库上跑修复命令 (如 DBCC CHECKDB 带 REPAIR)会改写页,把还能从页里抠出来的行彻底覆盖掉。

技术问题直接问,要报价走服务页

参数判定、镜像方案、固件损坏这类问题,聊清楚不收钱;需要现场检测、书面报价或上门,统一走 项目1 服务页(到店免费检测,出报告后报价,不出结果不收费)。

18620311365

深圳市福田区深南中路2070号电子科技大厦A座35楼D22(华强北地铁站D1口步行320米)

相关阅读

立即咨询 免费检测