-
当数据库质疑或是有的无法完成读取时可以尝试这些修复命令。
1. DBCC CHECKDB
重启服
务器后,在没有进行任何操作的情况下,在
SQL
查询分析器中
执行以下
SQL
进
行数据库的修复,修
复数据库存在的一致性错误与分配错误。
use master
declare @databasename
varchar(255)
set @databasen
ame='
需要修复的数据库实体的名称
'
exec sp_dboption
@databasename, N'single', N'true'
--
将目标数据库置为单用户状态
dbcc
checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc
checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename,
N'single',
N'false'--
将目标数据库置为多用户状态
然后执行
DBCC
CHECKDB('
需要修
复的数据库实体的名称
')
检查数据库是否仍旧存在错误。<
/p>
注意:修复后可能会造成部分数据的丢失。
2. DBCC
CHECKTABLE
如果
DBCC CHECKDB
检查仍旧存在错误,可以使用
DBCC
CHECKTABLE
来修复。
use
需要修复的数据库实体的名称
declare @dbname
varchar(255)
set
@dbname='
需要修复的数据库实体的名称
'
exec sp_dboption
@dbname,'single user','true'
dbcc checktable('
需要修复的数据表的名称
',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('
需要修复的数据表的名称
',REPAIR_REBUILD)
------
把’
需要修复的数据表的名称’更改为执行
DBCC
CHECKDB
时报错的数据表的名称
exec sp_dboption
@dbname,'single user','false'
3.
其他的一些常用的修复命令
DBCC DBREINDEX
重建指定数据库中表的一个或多个索引
用法:
DBCC
DBREINDEX (
表名
,
’
p>
’
)
修复此表所有的索引。
SQL
SERVER
数据库的检测及修复方法
1.1 SQL
SERVER
数据库的检测
SQL SERVER
提供了数据库检测的命令,
可用
DBCC CHECKDB
对数据库中各个对象
的分配及结
构的正确性进行检测,并可通过一参数控制,将所有的错误信息显示出来。其
语法如下:
DBCC
CHECKDB
('database_name'
[,NOINDEX | { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
|
REPAIR_REBUILD
}]
) [WITH {ALL_ERRORMSGS |
NO_INFOMSGS}]
参数说明:
'database_name'
代表被检测的数据库实体名;
NOINDEX
指非系统表的非
聚族索引不检测;
REPAIR_ALLOW_DATA_LOSS
|
REPAIR_FAST|
REPAIR_REBUILD
指直接修复发现的错误,其中
REPAIR_ALLOW_DA
TA_LOSS
代表,若此错误不能修复时,系统将直接删除相关数据。带此三
个参数的任一个时,数据库必须处于单用户模式,可在
Enterpri
se Manager
中的数据库属性
中设置;
ALL_ERRORMSGS
代表将检测到的错误信息全部显示出来,
否则,
对于每张表
最多只显示
200
条错误信息;
NO_INFOMSGS
代表隐藏所
有的信息及占用空间的报告。
经过
检测,
对于错误的对象,
将以
OBJE
CT ID
的形式报告具体出错的信息,
可根据
OBJECT ID
到系统表
sysobjects<
/p>
中查找到相关的表,即
NAME
。
1.2
SQL SERVER
问题数据库的修复
经过数据库检测后,
可针对出现的问
题采取相应的措施进行处理。
如通过检测后,
发现对象
的物理存放存在问题,可用
DBCC
CHECKALLOC
来进行修复:
DBCC
CHECKALLOC
('database_name'
|
REPAIR_REBUILD
}]
)
[WITH
{ALL_ERRORMSGS
|
NO_INFOMSGS}]
若是非系统对象的索引出错,则可用
DBCC
DBREINDEX
进行修复:
DBCC
DBREINDEX
(
[
'_name'
[,
index_name
[,
fillfactor
]
]
]
)
[WITH
NO_INFOMSGS]
以上两种情况,也可直接使用
DBCC CHECKDB(
p>
‘
db_name
’
,repair_rebuild)
来修复。
另外一种情况是在进行检测时,
提示
无法建立数据连接,
此时表明,数据库已损坏。对于这
种情况,
我们可采取如下措施来尝试修复。
首先,
在
SQL Enterpris
e
中新建一数据库
(如数据库名为
te
st
)
,
建好数据库后,
停止
SQL Server
Service Ma
nager
,
并将客户数据库的
MDF
文件更名为
test _(
即新建数据
库的主文件
名
)
,
然后用更名后的文件覆盖新建数据库同名文件,
接着,
启动
SQL Server Service Manager
。<
/p>
对
Master
数据库将系统表设置为可
更改状态
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
将数据库设为紧急状态:
update sysdatabases set status = 32768
where database '
停止并重新启动
SQL Server Service Ma
nager
,并重建
Log
文件:
p>
DBCC TRACEON
(3604)
DBCC REBUILD_LOG('
test ','test _log_ldf')
将数据库设置为单用户模式,然后进行检测:
sp_dboption ' test ',
'single user', 'true'
DBCC
CHECKDB(' test ')
Go
此数据库执行
CHECKDB
的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索
引的
操作:
DBCC
DBREINDEX
(表名)
-
-
-
-
-
-
-
-
-
上一篇:小学三年级英语总复习资料(完整)
下一篇:2013新译林牛津英语8A-课文翻译