科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道细化解析:带你轻松接触—重置置疑状态

细化解析:带你轻松接触—重置置疑状态

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果 SQL Server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么 Microsoft SQL Server 2000 会返回错误 1105 并且将 sysdatabases 中的 status 列设为置疑。

作者:赛迪网 limeinan 来源:天新网 2008年3月28日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

如果 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_resetstatusdatabase_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)      ENDIF suser_id() != 1      BEGIN         
SELECT @msg =  'You must be the System Administrator 
(SA)'SELECT @msg = @msg + ' to execute this procedure.
'RETURN (1)      ENDIF (SELECT COUNT(*) FROM master.
.sysdatabases         WHERE name = @dbname) != 1      
BEGIN         SELECT @msg = 'Database ' + @dbname + '
does not exist!'PRINT @msg         RETURN (1)     
ENDIF (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)      ENDBEGIN 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 ''ENDGO
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章