-
处理数据库置疑的方法
先分离数据库
企业管理器
--
右键置疑的数据库
--
所有任务
--
分离数据库
然后备份你的置疑数据库的文件
,
再按下面的步骤处理
:
1.
新建一个同名的数据库
2.
再停掉
sql server
3.
用置疑数据库的文件覆盖掉这个
新建的同名数据库,
只覆盖
mdf
文件
,
日志文件不要覆盖
4.
再重启
sql server
5.
此时打开企业管理器时新建的同
名数据库会出现置疑,先不管,打开查询分析器执行下面
的语句(注意修改其中的数据库
名
)
重建日志文件,经过修复后数据就可以正常分离并附加了,语句中“
C:
置疑的同名数据
库名
_
”是重建日志日志文件存放路径,
在重建日志后,最好将数据库分离并将重新创建的日志文件拷
贝到数据库文件所在目录,
再重新进行附加。
--
重建日志文件,修复损坏的日志
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1
RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET
STATUS =32768 WHERE
NAME='
置疑的同名数据库名
'
Go
dbcc rebuild_
log('
置疑的同名数据库名
','C:
置疑的同名数据库名
_')
GO
update sysdatabases set
status =28 where
name='
置疑的同名数据库名
'
Go
sp_configure
'allow updates', 0 reconfigure with override
Go
6
、
数据库修复后还需要进行数据库检测,看是否存在一些错误,数据库检测需要用
DBCC
CHECKDB
命令,如下:
DBCC
CHECKDB('
置疑的同名数据库名
')
p>
如果检测到错误,需要进行修复,但修复数据库需要在单用户模式下,请使用以下语句
,
ALTER DATABASE
置疑的同名数据库名
SET
SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CHECKDB
('
置疑的同名数据库名
',REPAIR_REBUILD)
GO
ALTER DATABASE
置疑的同名数据库名
SET
MULTI_USER
WITH ROLLBACK
IMMEDIATE
GO
如果还有错误,执行下面的语句
DBCC CHECKDB ('
数据库名
',REPAIR_ALLOW_DA
TA_LOSS )
-------(
执行一次如果
还有错误,可以多执行几次
)
7
、有时通过
DBCC
CHECKDB
能够修复数据库中的错误,但有时不能修复,可能需要对单个
有问题的数据表进行修复,需要使用
DBCC CHECKTABLE('
有问题的数据表名
',REPAIR_REBUILD)
命令,详细请看联机帮助
8
、
DBCC
CHECKDB
命令介绍
检查指定数据库中的所有对象的分配和结构完整性。
语法
DBCC CHECKDB
(
'database_name'
[ , NOINDEX
| { REPAIR_ALLOW_DATA_LOSS
|
REPAIR_FAST
| REPAIR_REBUILD
} ]
)
[ WITH { [
ALL_ERRORMSGS ]
[ , [
NO_INFOMSGS ] ]
[ , [ TABLOCK ]
]
[ , [ ESTIMATEONLY ] ]
[ ,
[ PHYSICAL_ONLY ] ]
}
]
参数
'database_name'
是要对其中的所有对象分配和结构完整性进行检查的数据库。
如果未指定,
则默认为当前数
据库。数据库名称必须符合标识符的规则。有关更多信息,请
参见使用标识符。
NOINDEX
指定不检查非系统表的非聚集索引。
NOINDEX
减少执行总时间,因为它不对用户定义的表
的非聚集索引进行检查。
p>
NOINDEX
对系统表没有影响,因为
DBCC CHECKDB
总是对所有系
统表索引进行检查。
REPAIR_ALLOW_DATA_LOSS |
REPAIR_FAST | REPAIR_REBUILD
指定
DBCC CHECKDB
修复发现的错误。
给定的
database_name
必须在单用户模式下以使用
p>
修复选项,它可以是下列值之一。
值
描述
REPAIR_ALLOW_DATA_LOSS
执行由
REPAIR_REBUILD
完成的所有修复,
包括对行和页进行分
配和取消分配以改正分配错误、
结构行或页的错误,
以及删除已损坏的文本对象。
这些修复<
/p>
可能会导致一些数据丢失。
修复操作可以在用户事务下完成以允许
用户回滚所做的更改。
如
果回滚修复,
则数据库仍会含有错误,
应该从备份进行恢复。
如果由于所提供
修复等级的缘
故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,
备份数据库。
REPAIR_FAST
进行小的、不耗时的修复操作,如修
复非聚集索引中的附加键。这些修复可以
很快完成,并且不会有丢失数据的危险。
REPAIR_REBUILD
执行由
REPAIR_FAST <
/p>
完成的所有修复,包括需要较长时间的修复(如重建
索引)
。执行这些修复时不会有丢失数据的危险。
WITH
指定有关下列内容的选项:返回错误信息的数量、获得的锁或
估计的
tempdb
要求。
ALL_ERRORMSGS
显示每个对象不受限制的错误数。如果没有指定
ALL_ERRORMSGS
,每个对象至多显示
200
个错误信息。按对象
ID
对错误信息进行排序(从
tempdb
中生成的消息除外)
。
NO_INFOMSGS
禁止显示所有信息性消息(严重级别
10
)和关于所用空间的报告。
TABLOCK
导致
DBCC CHECKDB
获得共享表锁。
TABLOCK
可使
DBCC CHECKDB
在负荷较重的数据库上