处理数据库置疑的方法
- 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 在负荷较重的数据库上
运行得更快,但DBCC CHECKDB 运行时会减少数据库上可获得的并发性。
ESTIMATE ONLY
显示估计的tempdb 空间大小,要运行带有所有其它指定选项的DBCC CHECKDB 则需要该空间。
不执行该检查。
PHYSICAL_ONLY
仅限于检查页和记录标题物理结构的完整性,以及页对象ID 和索引ID 与分配结构之间的一致性。
该检查旨在以较低的开销检查数据库的物理一致性,同时还检测会危及用户数据安全的残缺页和常见的硬件故障。
PHYSICAL_ONLY 始终意味着NO_INFOMSGS,并且不能与任何修复选项一起使用。
注释
DBCC CHECKDB 对索引视图执行物理一致性检查。
只用于向后兼容的NOINDEX 选项也适用于索引视图上的任何辅助索引。
DBCC CHECKDB 是最安全的修复语句,因为它对最多的可能出现的各种错误进行标识和修复。
如果只报告数据库中有分配错误,请执行带修复选项的DBCC CHECKALLOC 以对这些错误进行修复。
然而,若要确保正确修复所有错误(包括分配错误),请执行带修复选项的DBCC CHECKDB,而不要执行带修复选项的DBCC CHECKALLOC。
DBCC CHECKDB 对数据库中所有内容的完整性进行验证。
如果当前正在执行或最近已执行DBCC CHECKDB,则不需要运行DBCC CHECKALLOC 或DBCC CHECKTABLE。
DBCC CHECKDB 执行同样的检查,仿佛是对数据库中的每个表执行DBCC CHECKALLOC 语句和DBCC CHECKTABLE 语句。
默认情况下,DBCC CHECKDB 不获取表锁。
但它获取架构锁,该锁防止对元数据进行更改,但允许更改数据。
获取的架构锁将防止用户得到排它表锁,在生成聚集索引、除去任何索引或截断表时需要排它表锁。
DBCC 语句收集信息,然后扫描日志以查找所做的任何其它更改,并在扫描的结尾将两组信息合并在一起以产生数据的一致视图。
如果指定TABLOCK 选项,DBCC CHECKDB 将获取共享表锁。
这样可允许某些类别的错误有更详细的错误信息,并通过避免使用事务日志数据而将所要求的tempdb 空间大小降为最低。
TABLOCK 选项不阻止日志截断并使命令可以更快地运行。
DBCC CHECKDB 对数据库中每个表的text、ntext 和image 页的链接和大小及数据库中所有页的分配进行检查。
对于数据库中每个表,DBCC CHECKDB 检查其:
索引和数据页是否已正确链接。
索引是否按照正确的顺序排列。
各指针是否一致。
每页上的数据是否均合理。
页面偏移量是否合理。
错误表示数据库中的潜在问题,应该立即改正。
默认情况下,DBCC CHECKDB 对对象执行并行检查。
并行度由查询处理器自动确定。
最大并行度的配置方式与并行查询相同。
使用sp_configure 系统存储过程限制可用于DBCC 检查的最大处理器数。
有关更多信息,请参见max degree of parallelism 选项。
使用跟踪标记2528 可禁用并行检查。
有关更多信息,请参见跟踪标记。
结果集
不管是否指定任何选项(NO_INFOMSGS 或NOINDEX 选项除外),如果未指定数据库,DBCC CHECKDB 返回当前数据库的以下结果集(值可能会变化):
DBCC results for 'master'.
DBCC results for 'sysobjects'.
There are 862 rows in 13 pages for object 'sysobjects'.
DBCC results for 'sysindexes'.
There are 80 rows in 3 pages for object 'sysindexes'.
'...'
DBCC results for 'spt_provider_types'.
There are 23 rows in 1 pages for object 'spt_provider_types'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator. 如果指定NO_INFOMSGS 选项,DBCC CHECKDB 将返回以下结果集(消息):
The command(s) completed successfully.
如果指定ESTIMATEONLY 选项,DBCC CHECKDB 将返回以下结果集。
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
13
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
57
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
权限
DBCC CHECKDB 权限默认授予sysadmin 固定服务器角色或db_owner 固定数据库角色的成员且不可转让。
示例
A. 检查当前数据库和pubs 数据库
下例对当前数据库和pubs 数据库执行DBCC CHECKDB。
-- Check the current database.
DBCC CHECKDB
GO
-- Check the pubs database without nonclustered indexes.
DBCC CHECKDB ('pubs', NOINDEX)
GO
B. 检查当前数据库,禁止显示信息性消息
下例检查当前数据库,并禁止显示所有信息性消息。
DBCC CHECKDB WITH NO_INFOMSGS
GO
-------李庆军修改
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
update sysdatabases set status = 32768 where name = 'accdb'
dbcc rebuild_log (accdb)
update sysdatabases set status =28 where name='accdb'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
DBCC CHECKDB('Accdb')
ALTER DATABASE Accdb SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO
DBCC CHECKDB ('Accdb',REPAIR_REBUILD)
GO
ALTER DATABASE Accdb SET MULTI_USER WITH ROLLBACK IMMEDIATE GO
DBCC CHECKDB ('Accdb',REPAIR_ALLOW_DATA_LOSS )。