修复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