2026-09-28 · 约 7 分钟
DELETE 删除的行、DROP 的表,数据页通常不会立刻被物理清除,只是被标记为"可复用"。在新写入覆盖这些页之前,残留数据有机会被找回。这就是为什么误删后第一要务是"停止写入"。
①不要重启数据库实例(可能触发清理);②不要收缩数据库/文件(Shrink 会移动并清除空闲页,把可恢复数据抹掉);③不要大量写入新数据;④不要盲目分离/附加 MDF。每一个动作都可能缩小恢复窗口。
①有备份 + 日志:还原到误删前时间点(point-in-time)最干净;②事务日志(LDF)完整:可解析日志闪回误删操作;③无备份无日志:直接对 MDF 底层扫描,解析残留数据页重建表记录。我们的顺序是先固证(只读副本),再选性价比最高的路径。
关键操作前备份;开启完整恢复模式并定期备份日志;生产库权限分级、危险操作二次确认;重要表加触发器或审计。恢复是兜底,备份才是根本。
有机会。立即停止写入,残留数据页未被覆盖前可解析找回;有备份 + 日志可精确闪回。
取决于后续写入与日志。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 / SIMPLE | SIMPLE 下日志截断,回溯能力受限 |
-- 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米)