-
修复
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
输出了错误信息,请与系统管理员联系。
提问者:
风之辟尘
-
三级最佳答案备份数据
文件
,
然后按下面的步骤处理
:
1.
新建一个同名的数据
库
(
数据文件与原来的要一致
)
2.
再停掉
sql
server(
注意不要分离数据库
)
3.
用原数据库的数据文件覆盖掉这个新建的数据库
4.
再重启
sql server
5.
此时打开企业管理器
时会出现置疑,先不管,执行下面的语句(注意修改
其中的数据库名
)
6.
完成后
一般就可以访问数据库中的数据了
,
这时
,
数据库本身一般还要问
题
,
解决办法是
,
利用
数据库的脚本创建一个新的数据库
,
并将数据导进去就行了
.
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
name='
置疑的
数据库名
'
Go
sp_configure 'allow updates', 0
reconfigure with overr
ide
Go
sp_dboption '
置疑的数据库名
',
'single user', 'false
假设数据库为
TEST
:
按以下步骤执行
A
.设置数据库允许直接操作系统表。此操作可以在
SQL
Server Enterprise Manager
里面选择数据库服务器
,
按右键,
选择
“属性”,在“服务器
设置”页面中将“允许对系统目录直接修改”一项选中。
也可以使用如下语句来实现。<
/p>
use master
go
sp_configure
'allow updates',1
go
reconfigure with override
go
B
.设置
test
为紧急修复模式
update sysdatabases set
status=-32768 where
dbid=DB_ID('
test')
此时可以在
SQL Server
Enterprise Manager
里面看到该数据库处于
“只读
置疑
脱机
紧急模式”可以看到数据库里面的表,但是仅仅有系统表
C
.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('test','C:Program
FilesMicrosoft SQL
Se
rverMSSQLDatatest_')
执行过程中,如果遇到下列提示信息:
服务器
:
消息
5030
,级别
16
,状态
1
,行
1
未能排它地锁定数据库以执行该操作。
DBCC
执行完毕。
如果
DBCC
输出了错误信息,
请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您
在
F
步骤中使用
SQL
Server Enterprise Manager
打开了
test
库的系统表,那么退出
SQL
Server Enterprise
Manager
就可以了。
正确执行完成的提示应该类似于:
警告
:
数据库
'test'
的日
志已重建。已失去事务的一致性。应运
行
DBCC
CHECKDB
以验证物理一致性。将必须重置数据库选项,并且可
能需要删除多余的日志文件。
DBCC
执行完毕。
如果
DBCC
输出了错误信息,
请与系统管理员联系。
此时打开在
SQL
Server Enterprise Manager
里面会看到数据库的状
态为“只供
DBO
使用”。此时可以访
问数据库里面的用户表了。
D
.验证数据库一致性(可省略)
dbcc checkdb('test')
一般执行结果如下:
CHECKDB
发现了
0
个分配错误和
0
个一致性错误(在数据
库
'test'
中)。
DBCC
执行完毕。
如果
DBCC
输出了错误信息,
请与系统管理员联系。
E
.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的
数据库啦。
F
.最后一步,
我们要将步骤
E
中设置的“允许对系统目录直接修改”一项恢<
/p>
复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在
< br>SQL Server Enterprise Manager
里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure
with override
go
上面的语句操作步骤有点问题:
应该如下:
A
.我们使用默认方式建立一个供恢复使用的数据库
(
如
test)
。可以在
SQL
Server Enterprise
Manager
里面建立。
B
.停掉数据库服务器。
C
.将刚才生成的数据库的日志文件
test_
< br>删除,用要恢复的数据库
mdf
文件覆盖刚才生成的数据
库数据文件
test_
。
D
.启动数据库服务器。此时会看到数据库
test
的状态为“置疑”。这时候
不能对此数据库进
行任何操作。
E
.设置数据库允许直接操作系统表。此操作可以在
SQL
Server Enterprise Manager
里面选择数据库服务器
,
按右键,
选择
“属性”,在“服务器
设置”页面中将“允许对系统目录直接修改”一项选中。
也可以使用如下语句来实现。<
/p>
use master
go
sp_configure
'allow updates',1
go
reconfigure with override
go
F
.设置
test
为紧急修复模式
update sysdatabases set
status=-32768 where
dbid=DB_ID('
test')
-
-
-
-
-
-
-
-
-
上一篇:ubuntu 软件源设置
下一篇:kickstart无人值守安装