2014年1月13号,浙江省建德市第一人民医院数据库发生了损坏,导致医院部分业务系统无法使用。SQLServer日志文件丢失是一件非常危险的事情,很有可能你的数据库彻底毁坏,对于数据库损坏浪擎数据保护专家给客户的建议是在事发前做好充足的准备,事后才不会后悔莫及,正所谓有“备”无患。

在了解数据库损坏之前,首先我们要了解数据库为什么会损坏?SQL Server是如何将数据保存到数据文件,无论更新还是插入数据,数据都需要首先在内存中的Buffer Pool驻留,然后通过CheckPoint和Lazy Writer等过程将内存中的数据持久化到磁盘。

在这个过程中,数据脏页由内存写入持久化的IO子系统,在此期间,按照IO子系统的不同,数据可能经过这几层:Windows(写数据一定调用的是WINDOWS API)、Windows底层的中间层(杀毒软件,磁盘加密系统)、网卡、路由器、交换机、光钎、网线等(如果IO子系统不是直连的话)、SAN控制器(如果使用SAN)、RAID控制器(IO子系统做了RAID)、磁盘或SSD等持久化存储器。

因此,数据页被写入持久化存储期间,可能经过上述列表中的几项。在经历上述过程中,硬件环境会受到很多方面的影响,比如说电压是否稳定、断电、温度过高或过低、潮湿程度等,而软件方面,由于软件都是人写的,因此就可能存在BUG,这些都可能导致数据页在传输过程中出现错误。此外,影响磁盘的因素也包括电压是否稳定、灰尘等因素,这些也有可能引起磁盘坏道或整体损坏。

上面提到的所有因素都可以被归结为IO子系统。因此,造成数据损坏的情况绝大部分是由IO子系统引起的,还有非常非常小的概率内存芯片也会导致数据页损坏,我们提到的这些导致数据损坏的原因都属于天灾,还有一些人祸。比如说通过编辑器等手动编辑数据文件、数据库中还有需要Redo和Undo的事务时(也就是没有Clean Shutdown)删除了日志文件(通常会导致数据库质疑)。

如果没有合适的备份存在,如果损坏的数据页是存在于非聚集索引上,那么是很幸运的,只需要将索引禁用后重建即可。如果存在基准的完整备份,并且日志链没有断裂(包括差异备份可以Cover日志缺失的部分),则可以通过备份尾端日之后还原数据库来进行修复。

基础工作做的不好,可能就需要通过损失数据的方式来换回数据库的一致性,我们不能保证数据库永远不发生故障,所以做好备份容灾工作尤为重要。

上海浪擎信息科技有限公司是中国灾备领域的领航者,拥有众多的大型医院案例,公司从2003年成立至今,已拥有完善的产品线,产品和解决方案涵盖了从桌面到服务器、从备份到容灾、从本地综合备份管理到异地数据中心建设等各个方面。

公司产品线分为D(数据级灾备)、A(应用级灾备)、Y(云计算)、S(备份存储柜)四大系列,丰富的产品线满足客户不同的灾备需求,尤其是A系应用级容灾,是浪擎独家研发的基于应用级的“双活”容灾,处于实时备端在线可读可查询状态,拥有了全国最多的大型医院案例,例如:南京市脑科医院、邵逸夫医院、镇江市第三人民医院、广州军区武汉总院、镇江市中医院,等等。

浪擎完善的产品线可以使用多种备份的方式相结合,保证数据库安全可靠,SQL Server数据库的恢复都是靠日志文件来完成,所以无论如何都要保证日志文件的存在,它至关重要。为了使我们的数据库万无一失,采用多种备份方式是稳妥安全的,从心里重视数据库的管理与维护工作。