数据库恢复的关键不是"把文件扫出来",而是把数据页按表结构重新拼回去。DELETE 只打删除标记、TRUNCATE 直接释放数据页、DROP 连表定义一起删掉,这三种误操作能拿回的东西差别很大,处理思路也不一样。
常见送修情形
- 误 DELETE、误 UPDATE,事务已经提交
- 误执行 TRUNCATE TABLE
- 误 DROP TABLE 或 DROP DATABASE
- MDF / NDF / LDF 文件损坏,附加数据库报错
- 日志文件丢失,数据库显示"可疑"或无法恢复
- 备份文件(.bak)损坏或不完整
- 服务器磁盘故障,数据文件部分扇区不可读
处理路径
- 立即停止对该磁盘的一切写入。数据库的页分配一直在变,新数据会占用被释放的页,写得越多,能拿回的越少。
- 对数据文件所在分区做只读镜像。后续所有解析在镜像上进行。
- 解析页结构。读取分配页与空闲空间管理页,找到已标记未分配、但仍留有旧数据的区域。
- 按表结构重组行数据。依赖系统表中的列定义还原字段,导出为 INSERT 脚本或 CSV,可直接导入新库。
- 标注完整度。对照覆盖程度,说明哪些表完整、哪些只有部分行,便于业务侧核对。
需要你提供的信息
- MDF / NDF / LDF 文件,或整个数据目录
- 数据库类型与版本
- 误操作类型与发生时间
- 误操作之后是否还在继续写入
- 是否有可用备份,备份的时间点
时间与交付
文件级恢复一般在收到文件后 1 至 3 个工作日给出可提取表清单。交付形式为 SQL 脚本、CSV 或直接还原到指定测试库,按表分批交付,业务核心表优先。
说明
- DROP 之后如果继续有大量写入,被释放的页会被新数据占用,那时通常无法完整恢复。
- TRUNCATE 比 DELETE 更彻底,因为它直接释放数据页,恢复难度更高。
- 日志文件丢失会影响已提交事务的重放,能恢复到的时点以现有数据文件中的实际内容为准。
- 不承诺行数恢复比例,以实际检测结果为准。