处理数据库置疑的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
处理数据库置疑的方法
先分离数据库
企业管理器--右键置疑的数据库--所有任务--分离数据库
然后备份你的置疑数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用置疑数据库的文件覆盖掉这个新建的同名数据库,只覆盖mdf文件,日志文件不要覆盖
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,打开查询分析器执行下面的语句(注意修改其中的数据库名)
重建日志文件,经过修复后数据就可以正常分离并附加了,语句中“C:\置疑的同名数据库名_Log.ldf”是重建日志日志文件存放路径,
在重建日志后,最好将数据库分离并将重新创建的日志文件拷贝到数据库文件所在目录,再重新进行附加。
--重建日志文件,修复损坏的日志
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的同名数据库名'
Go
dbcc rebuild_log('置疑的同名数据库名','C:\置疑的同名数据库名_Log.ldf')
GO
update sysdatabases set status =28 where name='置疑的同名数据库名'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
6、数据库修复后还需要进行数据库检测,看是否存在一些错误,数据库检测需要用DBCC CHECKDB命令,如下:
DBCC CHECKDB('置疑的同名数据库名')
如果检测到错误,需要进行修复,但修复数据库需要在单用户模式下,请使用以下语句, 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 减少执行总时间,因为它不对用户定义的表的非聚集索引进行检查。NOINDEX 对系统表没有影响,因为DBCC CHECKDB 总是对所有系统表索引进行检查。
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定DBCC CHECKDB 修复发现的错误。给定的database_name 必须在单用户模式下以使用修复选项,它可以是下列值之一。
值描述
REPAIR_ALLOW_DATA_LOSS 执行由REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。
REPAIR_REBUILD 执行由REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。
WITH
指定有关下列内容的选项:返回错误信息的数量、获得的锁或估计的tempdb 要求。
ALL_ERRORMSGS
显示每个对象不受限制的错误数。如果没有指定ALL_ERRORMSGS,每个对象至多显示200 个错误信息。按对象ID 对错误信息进行排序(从tempdb 中生成的消息除外)。
NO_INFOMSGS
禁止显示所有信息性消息(严重级别10)和关于所用空间的报告。
TABLOCK
导致DBCC CHECKDB 获得共享表锁。TABLOCK 可使DBCC CHECKDB 在负荷较重的数据库上