您现在的位置: 启天网 >> 技术中心 >> 数据库 >> 正文
今天是:
微软关于MS SQL Server数据库置疑的解决办法           ★★★★★ 【字体:
微软关于MS SQL Server数据库置疑的解决办法
作者:未知    文章来源:转载    点击数:    更新时间:2008-3-6
  重置置疑状态  
  如果   SQL   Server   因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么   Microsoft®   SQL   Server™   2000   会返回错误   1105   并且将   sysdatabases   中的   status   列设为置疑。按下面的步骤解决这个问题:    
   
  执行   sp_resetstatus。  
   
   
  用   ALTER   DATABASE   向数据库添加一个数据文件或日志文件。  
   
   
  停止并重新启动   SQL   Server。    
  用新的数据文件或日志文件所提供的额外空间,SQL   Server   应该能完成数据库的恢复。  
   
  释放磁盘空间并且重新运行恢复操作。    
  sp_resetstatus   关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。  
   
   
   
  注意     只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用   sp_resetstatus。否则,可能会损坏数据库。  
   
   
  由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启用更新,使用下面的过程:  
   
  USE   master  
  GO  
  sp_configure   'allow   updates',   1  
  GO  
  RECONFIGURE   WITH   OVERRIDE  
  GO  
   
  过程创建后,立即禁用系统表更新:  
   
  sp_configure   'allow   updates',   0  
  GO  
  RECONFIGURE   WITH   OVERRIDE  
  GO  
   
  只有系统管理员才能执行   sp_resetstatus。执行该过程后,立即关闭   SQL   Server。  
   
  语法为:  
   
  sp_resetstatus   database_name  
   
  下面的例子将关闭   PRODUCTION   数据库的置疑标志。  
   
  sp_resetstatus   PRODUCTION  
   
  下面是结果集:  
   
  Database   'PRODUCTION'   status   reset!  
  WARNING:   You   must   reboot   SQL   Server   prior   to   accessing   this   database!  
   
  sp_resetstatus   存储过程代码  
  下面是   sp_resetstatus   存储过程的代码:  
   
  IF   EXISTS   (   SELECT   *   from   sysobjects   where   name   =   'sp_resetstatus'   )  
        DROP   PROCEDURE   sp_resetstatus  
  GO  
   
  CREATE   PROC   sp_resetstatus   @dbname   varchar(30)   AS  
  DECLARE   @msg   varchar(80)  
  IF   @@trancount   >   0  
              BEGIN  
                    PRINT   'Can''t   run   sp_resetstatus   from   within   a   transaction.'  
                    RETURN   (1)  
              END  
  IF   suser_id()   !=   1  
              BEGIN  
                    SELECT   @msg   =     'You   must   be   the   System   Administrator   (SA)'  
                    SELECT   @msg   =   @msg   +   '   to   execute   this   procedure.'  
                    RETURN   (1)  
              END  
  IF   (SELECT   COUNT(*)   FROM   master..sysdatabases  
                    WHERE   name   =   @dbname)   !=   1  
              BEGIN  
                    SELECT   @msg   =   'Database   '   +   @dbname   +   '   does   not   exist!'  
                    PRINT   @msg  
                    RETURN   (1)  
              END  
  IF   (SELECT   COUNT(*)   FROM   master..sysdatabases  
                    WHERE   name   =   @dbname   AND   status   &   256   =   256)   !=   1  
              BEGIN  
                    PRINT   'sp_resetstatus   can   only   be   run   on   suspect   databases.'  
                    RETURN   (1)  
              END  
  BEGIN   TRAN  
              UPDATE   master..sysdatabases   SET   status   =   status   ^   256  
                    WHERE   name   =   @dbname  
              IF   @@error   !=   0   OR   @@rowcount   !=   1  
                    ROLLBACK   TRAN  
              ELSE    
                    BEGIN  
                          COMMIT   TRAN  
                          SELECT   @msg   =   'Database   '   +   @dbname   +   '   status   reset!'  
                          PRINT   @msg  
                          PRINT   ''  
                          PRINT   'WARNING:   You   must   reboot   SQL   Server   prior   to     '  
                          PRINT   '                   accessing   this   database!'  
                          PRINT   ''  
                    END  
  GO   
文章录入:junsan    责任编辑:junsan05 
  • 上一篇文章:
  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    MySQL删除表中大批量的数据
    Microsoft JET Database Engine 错误 '…
    在一个机机上让 Microsoft SQL Server 2000…
    SQL SERVER性能优化综述
    微软封杀盗版网站 雨林木风停止提供系统下载
    微软在华布局农村手机欲横扫山寨
    微软正式发布SQL Server 2008
    微软要求用户参加IE8浏览器测试
    IBM“去微软化”挑战微软
    SQL Server数据库性能的优化
     网友评论:(最新10条。只代表网友观点,与本站立场无关!)