如何修复数据库状态

发表于:2007-07-02来源:作者:点击数: 标签:
HOW TO FIX SQL SERVER DATABASE SUSPECT? 如何修复数据库状态"置疑"? ********************************************************** Author:黄山光明顶 mail:leimin@jxfw.com version:1.0.0 date:2004-1-30 (如需转载,请注明出处!,如果有问题请发MAIL给我:-

HOW TO FIX SQLSERVER DATABASE SUSPECT?
如何修复数据库状态"置疑"?

**********************************************************

Author:黄山光明顶

mail:leimin@jxfw.com

version:1.0.0

date:2004-1-30

(如需转载,请注明出处!,如果有问题请发MAIL给我:-))

***********************************************************
在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",我们先来分析一下SQLSERVER数据库"置疑"的原因:
   1.错误的删除日志;
   2.硬件(HD)损坏,造成日志和数据文件写错误;
   3.硬盘的空间不够,比如日志文件过大;


解决办法:

这是最简单的办法是有数据库的全备份,然后恢复即可.
步骤:

1. 删除原始的数据库:
     USE MASTER
     GO 
     DROP DATABASE DB_SUEPECT
    

2.建立同名的数据库:
        USE master
       GO
       CREATE DATABASE DB_SUSPECT
        ON
         ( NAME = DBNAME_DAT,
           FILENAME = @#C:@#,
           SIZE = 10,
            FILEGROWTH = 5 )
           LOG ON
          ( NAME = @#DBNAME_LOG@#,
           FILENAME = @#g:@#,
           SIZE = 5MB,
           FILEGROWTH = 5MB )
           GO
    

3.恢复数据库:
      RESTORE DATABASE DB_SUSPECT
     FROM DBNAME_BACKUP.DAT
  

4.数据库完整性检测:
       DBCC CHECKDB(@#DB_SUSPECT@#)

5.重新启动MSSQLSERVER服务.

如果没有全备份,那就要用一些特殊的方法:

1.设置数据库为紧急模式
       Use Master
       GO
       sp_configure @#allow updates@#, 1
       reconfigure with override
      GO
      UPDATE sysdatabases SET status = 32768 where name = @#DB_SUSPECT@#
      GO

2.停掉SQL Server服务:
     NET STOP MSSQLSERVER

3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:

4.启动SQL Server服务:
      NET START MSSQLSERVER

5.重新建立一个同名的数据库DB_SUSPECT;

       USE master
       GO
       CREATE DATABASE DB_SUSPECT
        ON
         ( NAME = DBNAME_DAT,
           FILENAME = @#C:@#,
           SIZE = 10,
            FILEGROWTH = 5 )
           LOG ON
          ( NAME = @#DBNAME_LOG@#,
           FILENAME = @#g:@#,
           SIZE = 5MB,
           FILEGROWTH = 5MB )
           GO


6.设置数据库运行在单用户的模式:
         USE MASTER
        GO
        ALTER DATABASE DB_SUSPECT SET SINGLE_USER
        GO

7.停掉SQL服务:
     NET STOP MSSQLSERVER

8.把原来的数据文件再覆盖回来:


9.启动SQL Server服务:
      NET START MSSQLSERVER

10.重新设置SQLSERVER的状态:
         USE MASTER
        GO
        EXEC sp_resetstatus "DB_SUSPECT"

11.数据库完整性检测:
        DBCC CHECKDB(@#DB_SUSPECT@#)

12.恢复数据库为多用户模式:
        USE MASTER
        GO
        ALTER DATABASE DB_SUSPECT SET MULTI_USER
       GO

13.恢复SQLSERVER原始的配置:
      USE MATER

    GO     

    UPDATE sysdatabases SET status = 4194320 where name = @#DB_SUSPECT@#
    GO

14.配置SQLSERVER不允许更新系统表:
      USE MASTER
     GO
      sp_configure @#allow updates@#, 0
      reconfigure with override
     GO

15.重新启动MSSQLSERVER服务:

     最好重新启动操作系统

16.备份数据库:

   可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT

原文转自:http://www.ltesting.net