加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver “置疑”解决办法

发布时间:2020-12-12 15:42:30 所属栏目:MsSql教程 来源:网络整理
导读:求助:我的sqlserver突然之间数据库msdb无法打开,企业管理器里面在msdb旁边显示“置疑”,导致数据库的作业调度用不了了,不知是设那么 楼主jsys(雪狼) 2004-05-08 14:10:40 在 MS-SQL Server / 应用实例 提问 求助:我的sqlserver突然之间数据库msdb无法

求助:我的sqlserver突然之间数据库msdb无法打开,企业管理器里面在msdb旁边显示“置疑”,导致数据库的作业调度用不了了,不知是设那么

楼主jsys(雪狼) 2004-05-08 14:10:40 在 MS-SQL Server / 应用实例 提问

求助:我的sqlserver突然之间数据库msdb无法打开,企业管理器里面在msdb旁边显示“置疑”,导致数据库的作业调度用不了了,不知是设那么原因?如何解决? 问题点数:100、回复次数:4Top

1 楼zjcxc(邹建)回复于 2004-05-08 14:14:56 得分 50

重置置疑状态 ?
? 如果 ? 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 ?
? ?
? Top

2 楼progress99(如履薄冰)回复于 2004-05-08 14:15:39 得分 50

看看大大版主leimin的: ?
? ?
? 在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,?
? ? ? ? ? ? ? ? ? ? ? ? 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 ?
? ?
?   ?
? ?
?   ?
? ?
? 对该贴的补充: ?
? 1.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样 ?
? UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大: ?
? ? ? ALTER ? DATABASE ? DB_NAME ? SET ? RECOVERY ? SIMPLE ?
? 2.如果你的恢复模式是全部,你一定要配置日志字段收缩: ?
? ? ? ? ? sp_dboption ? 'databasename','trunc. ? log ? on ? chkpt.',true ?
? ? ? ? ? sp_dboption ? 'databasename','autoshrink',true ?
? 3.通过每日备份将日志收缩: ?
? ? ? BACKUP ? DATABASE ? DATABASE_NAME ? TO ? BACKUP_DEVICES ?
? ? ? BACKUP ? LOG ? DATABASE_NAME ? TO ? LOG_DEVICES ?
? ? ? OR ?
? ? ? BACKUP ? LOG ? DATABASE_NAME ? with ? truncate_only ?
? ?
? ? ? **检查日志的容量:DBCC ? SQLPERF ? (LOGSPACE) ? 这时日志并没有收缩! ?
? ?
? 4.每天在备份数据库完成之后,重新启动MS ? SQLSERVER ? SERVICE. ?
? ? ? ? ? ? ? ? ? USE ? DATABASE_NAME ?
? ? ? ? ? ? ? ? ? go ?
? ? ? ? ? ? ? ? ? DBCC ? ? SHRINKFILE(2,truncateonly) ?
? ?
? ? ? **检查日志的容量:DBCC ? SQLPERF ? (LOGSPACE) ? 这时日志已经收缩! ?
? ?
? 5.手动快速收缩日志: ?
? ? ? / ? *run ? ? below ? ? script,you ? ? will ? ? shrink ? ? you ? ? database ? ? log ? ? files ?
? immediately,? ? in ? ? my ? ? experience,you ? ? need ? ? to ? ? run ? ? the ? ? script ? ? for ? ? 3 ? ? or ?
? 4 ? ? minutes ? ? before ? stopping ? ? it ? ? manually ? ? */ ?
? use ? ? databasename ?
? dbcc ? ? shrinkfile(2,notruncate) ?
? dbcc ? ? shrinkfile(2,truncateonly) ?
? create ? ? table ? ? t1(char1 ? ? char(4000)) ?
? go ?
? declare ? ? @i ? ? int ?
? select ? ? @i=0 ?
? while(1=1) ?
? begin ?
? ? ? ? ? while(@i<100) ?
? ? ? ? ? ? ? ? ? ? ? ? ? begin ?
? ? ? ? ? ? ? ? ? ? ? INSERT ? ? INTO ? ? T1 ? ? VALUES ? ? ('A') ?
? ? ? ? ? ? ? ? ? ? ? SELECT ? ? @I=@I+1 ?
? ? ? ? ? ? ? ? ? ? ? END ?
? TRUNCATE ? ? table ? ? T1 ?
? BACKUP ? ? LOG ? ? youdatabasename ? ? with ? ? truncate_only ?
? end ?
? go ?
? ?
? Top

3 楼zjcxc(邹建)回复于 2004-05-08 14:17:41 得分 0

置疑有多种情况,你在企业管理器中,看看置疑写的是什么原因置疑?Top

4 楼enxi(恩熙 @_@)回复于 2004-05-08 17:19:26 得分 0

学习!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读