当前位置: 主页 > 数据库

数据库 文件 修复-dataguard备库修复

发布时间:2023-02-08 10:07   浏览次数:次   作者:佚名

2008年7月7日星期一,数据库服务器的磁盘阵列卡坏了,硬件维修人员更换了磁盘阵列卡,但系统的数据库文件损坏了。 恢复数据库花了两天时间。 数据库使用SQLSERVER2000,数据库名称为regie_sc_sj,数据库文件名为regie_sc_sj_data.mdf。

问题检查过程

1、企业管理器中垄断数据库状态可疑,通过以下命令修复数据库状态:

使用大师

sp_configure '允许更新', 1

重新配置覆盖

sp_resetstatus 'regie_sc_sj'

但是修复不成功,找不到数据库。 检查发现数据库文件没有丢失,只是数据库文件没有连接到SQLSERVER。

2、通过SQLSERVER的企业管理器将数据库文件附加到SQLSERVER失败,报“823”错误,是磁盘故障引起的。

3、将数据库文件复制到另一台机器上,在新机器上附加到企业管理器,同样报错。 表示磁盘故障损坏了数据库文件。 数据库上次备份是2004年的,用这个备份文件时间太久了。 现在只能尽量恢复已有的数据库文件。

修复过程

1、在master库的sysdatabases表中添加垄断数据库信息:

使用大师

--修改系统属性,允许修改系统表的内容

sp_configure '允许更新', 1

重新配置覆盖

--在sysdatabases表中添加垄断数据库信息数据库 文件 修复,其中status=32768表示紧急模式

插入 sysdatabases(名称、dbid、sid、模式、状态、status2、crdate、保留、类别、cmptlevel、文件名)

values('regie_sc_sj',10,0x01,0,32768,'1090519040',getdate(),getdate(),0,80,'D:/108809 database backup/regie_sc_sj_data.mdf') from sysdatabases

2.检查并修复数据库文件:

--设置regie_sc_sj数据库一次只能被一个用户访问

sp_dboption 'regie_sc_sj', '单用户', 'true'

-- 检查并修复数据库

DBCC CHECKDB('regie_sc_sj')

修复后记录错误的表

3.恢复数据库原有属性

sp_dboption 'regie_sc_sj', '单用户', '假'

sp_configure '允许更新', 0

重新配置覆盖

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就修复好了,但是还是有部分数据丢失了。

俗话说,“好斗者无大事”。 数据库的维护应以预防为主,但如果数据库文件损坏,再好的解决办法,最好有一个最近的备份,以便进行简单的恢复操作。 因此,要真正保证数据库的安全,有必要对数据库进行定期备份。