急!!!SQL Server 数据库Suspect的问题

Hukay 2002-07-08 12:30:16
我在MS SQL Server 7.0 上建立了一DataBase PPID,
但在用的过程中出现Suspect的问题,我不知怎么恢复,
请高手帮忙
...全文
430 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiaoCheng 2002-07-08
  • 打赏
  • 举报
回复
还有另外一种可能

数据库之所以标记为置疑是因为它的恢复进程失败,
解决方法:

1.附加数据库。

2.使用 RESTORE 数据库或 RESTORE LOG 过程。
LiaoCheng 2002-07-08
  • 打赏
  • 举报
回复
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_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

billquick 2002-07-08
  • 打赏
  • 举报
回复
what's the suspect problem?
Hukay 2002-07-08
  • 打赏
  • 举报
回复
看了解答,我仍有问题
我的数据库所在的Hard Disk的Free空间足够,
为什么会经常发生这种问题(已经两次了)
OpenVMS 2002-07-08
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2785
支持中文,非DEMO版,绝对可用。 核心功能是修复因各种原因损坏或无法访问的 Microsoft SQL Server 数据库主数据文件 (.MDF) 和辅助数据文件 (.NDF),并从中提取尽可能多的可用数据。 主要功能与特点: 修复严重损坏: 处理各种导致 SQL Server 数据库无法附加或访问的错误,例如: 823 错误 (I/O 错误) 824 错误 (逻辑一致性错误) 605 错误 (尝试在数据库中提取逻辑页失败) 数据库可疑 (SUSPECT) 状态 DBCC CHECKDB 命令报告严重错误 文件头损坏 页面撕裂、校验和错误 意外关机、硬件故障(磁盘坏道)、病毒攻击、软件故障等导致的损坏。 绕过 SQL Server 引擎: 该工具不依赖 SQL Server 实例本身来读取损坏的文件。它直接解析 MDF/NDF 文件的内部结构,即使文件无法附加到 SQL Server,也能尝试读取其中的数据页。 数据提取与恢复: 扫描损坏的文件,识别并提取其中包含的表结构 (Schema) 和 实际数据 (Records)。 支持恢复各种数据类型。 恢复选项: 生成 SQL 脚本: 将恢复出来的表结构和数据生成为标准的 .SQL 脚本文件。这是最常用和最灵活的方式,允许用户在目标 SQL Server 上执行脚本重建数据库和导入数据。 导出到数据库: 直接将恢复的数据插入到一个新的或现有的、运行中的 SQL Server 数据库中(需要提供连接信息)。 导出到 CSV 文件: 将恢复出来的数据导出为 .CSV 文件,方便在其他程序(如 Excel)中查看或导入到其他系统。 选择性恢复: 通常允许用户选择要恢复的特定数据库对象(表),而不是强制恢复整个文件的所有内容,节省时间。

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧