服务器消息7995,修复sql2000数据库置疑时出现的错误.docx

本文详细指导如何修复SQL Server 2000数据库在完整性检查中遇到的错误,涉及备份数据、新建数据库、设置权限、日志重建和一致性检查等步骤,适用于数据库管理员和开发者解决置疑问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修复SQL2000数据库置疑时出现的错误

在执行最后一步dbcc checkdb(dbname)检查完整性上出的错

服务器:消息8946,级别16,状态12,行2

表错误:分配页(1:461016)的PFS_PAGE页首结构值无效。类型为 0。请检 查该页上的类型、对象ID和页ID。

服务器:消息7995,级别16,状态1,行1

数据库'dbname' 在 sysobjects 、sysindexes、syscolumns 或 systypes 中 存在一致性错误,妨碍了进一步的CHECKDB处理。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

提问者:风之辟尘-三级最佳答案备份数据文件,然后按下面的步骤处理:

新建一个同名的数据库(数据文件与原来的要一致)

再停掉sql server(注意不要分离数据库)

用原数据库的数据文件覆盖掉这个新建的数据库

再重启 sql server

此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改 其中的数据库名)

完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问

题,解决办法是,利用

数据库的脚本创建一个新的数据库,并将数据导进去就行了 .

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑 的数据库名’

Go

sp dboption '置疑的数据库名','single user', 'true'

Go

DBCC CHECKDB('置疑的数据库名')

Go

update sysdatabases set status =28 where n ame='置疑的

数据库名’

Go

sp_c on figure 'allow updates', 0 rec on figure with overr

de

Go

sp_dboption '置疑的数据库名','single user', 'false

假设数据库为TEST

按以下步骤执行

A ?设置数据库允许直接操作系统表。此操作可以在

SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择

“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。

也可以使用如下语句来实现。

use master

go

sp_c on figure 'allow updates',1

go

rec on figure with override

go

B ?设置test为紧急修复模式

update sysdatabases set status=-32768 where dbid=DB_ID('

test')

此时可以在SQL Server Enterprise Manager里面看到该数据库处于

“只读置疑脱机紧急模式”可以看到数据库里面的表,但是仅仅有系统表

C ?下面执行真正的恢复操作,重建数据库日志文件

dbcc rebuild」og('test','C:\Program Files\Microsoft SQL Se rver\MSSQL\Data\test_log.ldf)

执行过程中,如果遇到下列提示信息:

服务器: 消息5030,级别16,状态1,行1

未能排它地锁定数据库以执行该操作。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用

SQLServerEnterpriseManager打开了 test库的系统表,那么退出

SQLServerEn terpriseMan ager就可以了。

正确执行完成的提示应该类似于:

警告: 数据库'test'的日志已重建。已失去事务的一致性。应运

行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可 能需要删除多余的日志文件。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

此时打开在SQL Server Enterprise Manager里面会看到数据库的状

态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

D ?验证数据库一致性(可省略)

dbcc checkdb('test')

一般执行结果如下:

CHECKDB发现了 0个分配错误和 0个一致性错误(在数据

库'test'中)。

DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。

E ?设置数据库为正常状态

sp_dbopti on 'test','db

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值