数据库文件损坏,指的是存放表和索引的物理文件出现了读不出来的页或块。它和“数据被误删”“表被清空”不一样:前者是存储层面的损坏,后者是逻辑层面的误操作,处理思路完全不同。分清这两类,才能选对下一步。
一是库能连接,个别表打不开或查询报错;二是数据库实例起不来,日志卡在某一个文件上;三是报出一串错误码,Oracle 常见的 01110、01578,SQL Server 的 823、824,MySQL 的“表已损坏”提示;四是数据库进入置疑或只读状态;五是日志文件被删除或截断,库无法正常恢复;六是文件被加密、后缀被改,附件里出现勒索说明文本。
硬盘坏道与磁头老化占第一位;其次是突发断电、机房跳闸导致写到一半;第三是阵列卡、存储控制器或固件故障,比如阵列掉线后错误重建;第四是虚拟化环境里的存储卷异常、快照回滚失败;第五是人为操作,包括误删数据文件、杀毒软件把数据文件当病毒清除、用第三方工具直接修改文件。还有一类容易被忽略:备份长期没做过还原演练,以为有备份,真出事时备份也是坏的。
第一,立即停止写入。把数据库停掉或设为只读,让应用走报错提示,不要继续让业务写入,否则损坏会扩散。第二,记录原始信息。把报错原文、发生时间、当时的操作步骤、最近一次备份时间写下来,这些信息直接影响后续判断。第三,保护现场。数据文件、日志文件、参数文件、现有备份一个都不要删、不要覆盖、不要移动盘位;原始硬盘不要反复通电尝试。第四,评估备份。先在一台独立环境里试着还原备份,确认备份能起来、数据到哪一天为止。备份可用,往往比任何恢复技巧都省事。
同时有四件事不要做:不要急着跑带数据丢失的修复命令,不要重建数据库或初始化实例,不要格式化磁盘、重装系统,不要在同一个盘上装恢复软件反复扫描写盘。
出现下面任何一种情况,自己处理只会让难度变大:硬盘有坏道或异响;损坏到了数据页层面,报错反复出现;日志链断裂、没有可用备份;数据库被勒索加密;生产库停机时间有硬限制,比如财务结账、月底出货、订单高峰。专业机构的处理路径是先把盘做镜像,再在镜像上做块级提取,用日志把数据推到最近的完整状态,最后导出到新库并逐项校验,全程不影响原始盘。
深圳市补天时代科技有限公司专注数据恢复二十余年,累计恢复硬盘2万个、服务器及存储3000台,覆盖 Oracle、SQL Server、MySQL、DB2、SYBASE 等数据库的损坏恢复,恢复流程按规范执行、可追溯。数据库文件损坏后第一个电话打给 0755-83775551 做免费检测,比事后补救便宜得多。地址:深圳市福田区华强北深南中路2070号电子科技大厦A座35楼。