写在数据灾难之后

周一中午,一客户的数据库服务器意外死机之后,重启后一直蓝屏,无法正常使用。之后转移数据库,数据库是存放在磁盘阵列的,杯具的事情发生了,转移后,发现数据库文件MDF变成了0字节,这下傻眼了,数据库之前没做镜像备份。出了这么大问题,高层也相当重视,马上联系专业的数据恢复公司来处理,经过2天的努力,数据被抢救回来了,谢天谢地!后来数据库重新附加后,发现程序一直不能正常使用,检查系统日志,发现如下错误

SQL Server 断言: 文件: <blobbase.cpp>,行=712 失败的断言 = 'rowSize == rowSizeExpected'。此错误可能与时间有关。如果重新运行该语句后错误仍然存在,请使用 DBCC CHECKDB 来检查数据库的结构是否完整,或重新启动服务器以确保内存中的数据结构未破坏。

差了一下资料,应该是恢复的时候,数据库结构被破坏了,只好使用DBCC CHECKDB来修复了

步骤如下

USE [master]

GO

ALTER DATABASE [数据库名称] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

GO

ALTER DATABASE [数据库名称] SET SINGLE_USER

GO

--先设置数据库为单用户模式

DBCC CHECKDB ('数据库名称', REPAIR_ALLOW_DATA_LOSS)

====================================

说明:DBCC CHECKDB 有三个参数

REPAIR_FAST 仅为保持向后兼容性而保留

REPAIR_REBUILD 执行由 REPAIR_FAST 执行的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险

REPAIR_ALLOW_DATA_LOSS 尝试修复报告的所有错误。这些修复可能会导致一些数据丢失

修复成功后

重新设置数据库为多用户模式

====================================

USE [master]
GO
ALTER DATABASE [数据库名称] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [数据库名称] SET MULTI_USER
GO

到此,数据库成功恢复,终于可以交差了。。。

 

通过此次事件,深刻体会到数据备份的重要性,以后一定要认真做好数据备份工作,避免这种事情再次发生。

以后需要好好学习数据库的各种备份方式了。。。

 

posted @ 2010-04-30 10:32  阿sam  阅读(288)  评论(0编辑  收藏  举报