数据库文件损坏后的恢复方法
2008-07-24 09:27
941 查看
2008年7月7日,星期一,数据库服务器的磁盘阵列卡坏了,硬件维护人员更换了磁盘阵列卡,但是系统的数据库文件已经损坏。用了两天的时间恢复该数据库。数据库使用的是SQLSERVER2000,数据库名是regie_sc_sj,数据库文件名regie_sc_sj_data.mdf.
问题检查过程
1、在企业管理器中专卖数据库的状态是置疑,用以下命令修复数据库状态:
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_resetstatus 'regie_sc_sj'
但是修复不成功,无法找到该数据库。检查发现数据库文件没有丢失,只是数据库文件没有连接到SQLSERVER中。
2、通过SQLSERVER的企业管理器将数据库文件附加到SQLSERVER中,也没有成功,报错为“823” 磁盘故障造成的问题。
3、将数据库文件复制到其它机器上,并且在新的机器上附加到企业管理器中,出现相同的报错。说明磁盘的故障已经损坏了数据库文件。该数据库上次备份是在2004年,时间太久已经无法使用这个备份文件,现在只能尽量恢复现有的数据库文件。
修复过程
1、在master库的sysdatabases表中添加专卖数据库信息:
Use Master
--修改系统属性,允许修改系统表的内容
sp_configure 'allow updates', 1
reconfigure with override
--添加专卖数据库信息到sysdatabases表中,其中status=32768表示紧急模式
insert into sysdatabases(name,dbid,sid,mode,status,status2,crdate,reserved,category,cmptlevel,filename)
values ( 'regie_sc_sj',10,0x01,0,32768,'1090519040',getdate(),getdate(),0,80,'D:/108809数据库备份/regie_sc_sj_data.mdf') from sysdatabases
2、检查并修复数据库文件:
--设置regie_sc_sj数据库一次只能一个用户访问
sp_dboption 'regie_sc_sj', 'single user', 'true'
--检查和修复数据库
DBCC CHECKDB('regie_sc_sj')
修复后记录下有报错的表
3、恢复数据库原由属性
sp_dboption 'regie_sc_sj', 'single user', 'false'
sp_configure 'allow updates', 0
reconfigure with override
4、现在数据库中的数据能够查询到,但是没有日志文件,新建日志文件,重启数据库服务。
5、重启数据库服务以后,如果数据库正常,那么就大功告成了,但是如果数据库成为了置疑状态或者日志文件无法新建,那么就只有继续下面的操作了。
6、先按照1到3步的步骤将数据库恢复到可以查询到的状态,不要重启数据库服务,将表、视图、存储过程和函数等用户创建的信息导成脚本。
7、新建一个数据库,在新的数据库(regie_sc_sj_jy)中执行前面导出来的脚本,注意表的脚本中要有索引、用户、主键等信息,在执行表脚本前要将表脚本中的原数据库名(regie_sc_sj)该为新的数据库名(regie_sc_sj_jy)。
8、将数据库中各个表的数据导到新的数据库中。导数据的过程中,前面数据库检查的时候出现过问题的表单独导,这些表已经损坏,无法修复,数据会丢失一部分。
9、到完数据以后,重启数据库服务,将regie_sc_sj和regie_sc_sj_jy都从数据库管理器中分离出去,重新附加regie_sc_sj_jy的数据库文件到管理器中,并将数据库名字修改为regie_sc_sj.
这样数据库regie_sc_sj就修复完成了,但是还是有些数据丢失。
俗话说“善战者,无赫赫功”,数据库的维护应该已预防为主,但是如果真的出现数据库文件损坏的情况,不管多好的解决技巧都不如有个近期的备份进行简单的恢复操作,所以真正要做到数据库的安全,还是要对数据库进行定时备份。
相关文章推荐
- Windows XP用户配置文件丢失或损坏后的恢复方法
- SQLserver2005 数据库无日志文件恢复方法
- 丢失归档日志文件的数据库恢复方法
- Windows XP用户配置文件丢失或损坏后的恢复方法
- Oracle 数据库模拟数据文件损坏恢复
- 无数据库日志文件恢复数据库方法两则
- linux下rm误删除数据库文件的恢复方法
- 如何恢复SQL Server 2000损坏的数据库文件
- 联机日志文件损坏后的恢复方法
- 无数据库日志文件恢复数据库方法两则
- 怎么用引用啊?[转]SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
- 【SQL Server备份恢复】提高恢复速度:通过数据库完整备份,来恢复损坏的某个文件
- Oracle表空间文件损坏导致的数据库异常关闭并启动失败问题的解决方法
- SQLServer 数据库日志文件(LDF)损坏后 补救方法
- postgresql备份恢复数据库和批量导入导出数据到文件方法
- 无数据库日志文件恢复数据库方法两则
- oracle9i回滚段表空间数据文件损坏或丢失后的恢复方法
- Sybase Anywhere 8.0 DB数据库文件损坏的恢复
- 恢复mdf文件到数据库方法
- 无数据库日志文件恢复数据库方法两则