严重级别为 21 表示可能存在数据损坏. 可能的原因包括损坏的页链, 损坏的 IAM 或该对象的 sys.objects 目录视图中存在无效条目. 这些错误通常由硬件或磁盘设备驱动程序故障而引起.
MS Sql Server 提供了很多关于数据库修复的命令, 当 MS Sql Server 数据库遭到质疑或者是有的无法完成读取时可以尝试这些修复命令.
1. DBCC CHECKDB
重启服务器
- use master
- declare @databasename varchar(255)
- set @databasename='需要修复的数据库实体的名称'
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'- 将目标数据库置为多用户状态
sql2012 将目标数据库修改单用户状态语句
ALTER DATABASE DT_CMS_OJJ SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
sql2012 将目标数据库修改单用户状态语句
Alter database DT_CMS_OJJ set multi_user
然后执行 SQL Server 数据修复命令 DBCC CHECKDB('需要修复的数据库实体的名称') 检查数据库是否仍旧存在错误. 注意: 修复后可能会造成部分数据的丢失.
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)
- 把'需要修复的数据表的名称'更改为执行 SQL Server 数据修复命令 DBCC CHECKDB 时报错的数据表的名称
exec sp_dboption @dbname,'single user','false'
3. 其他的一些常用的修复命令
DBCC DBREINDEX 重建指定数据库中表的一个或多个索引 用法: DBCC DBREINDEX (表名,'') 修复此表所有的索引.
来源: http://www.bubuko.com/infodetail-2749507.html