数据库恢复的关键不是"把文件扫出来",而是把数据页按表结构重新拼回去。DELETE 只打删除标记、TRUNCATE 直接释放数据页、DROP 连表定义一起删掉,这三种误操作能拿回的东西差别很大,处理思路也不一样。

常见送修情形

  • 误 DELETE、误 UPDATE,事务已经提交
  • 误执行 TRUNCATE TABLE
  • 误 DROP TABLE 或 DROP DATABASE
  • MDF / NDF / LDF 文件损坏,附加数据库报错
  • 日志文件丢失,数据库显示"可疑"或无法恢复
  • 备份文件(.bak)损坏或不完整
  • 服务器磁盘故障,数据文件部分扇区不可读

处理路径

  1. 立即停止对该磁盘的一切写入。数据库的页分配一直在变,新数据会占用被释放的页,写得越多,能拿回的越少。
  2. 对数据文件所在分区做只读镜像。后续所有解析在镜像上进行。
  3. 解析页结构。读取分配页与空闲空间管理页,找到已标记未分配、但仍留有旧数据的区域。
  4. 按表结构重组行数据。依赖系统表中的列定义还原字段,导出为 INSERT 脚本或 CSV,可直接导入新库。
  5. 标注完整度。对照覆盖程度,说明哪些表完整、哪些只有部分行,便于业务侧核对。

需要你提供的信息

  • MDF / NDF / LDF 文件,或整个数据目录
  • 数据库类型与版本
  • 误操作类型与发生时间
  • 误操作之后是否还在继续写入
  • 是否有可用备份,备份的时间点

时间与交付

文件级恢复一般在收到文件后 1 至 3 个工作日给出可提取表清单。交付形式为 SQL 脚本、CSV 或直接还原到指定测试库,按表分批交付,业务核心表优先。

说明

  • DROP 之后如果继续有大量写入,被释放的页会被新数据占用,那时通常无法完整恢复。
  • TRUNCATE 比 DELETE 更彻底,因为它直接释放数据页,恢复难度更高。
  • 日志文件丢失会影响已提交事务的重放,能恢复到的时点以现有数据文件中的实际内容为准。
  • 不承诺行数恢复比例,以实际检测结果为准。

对应的恢复程序