加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

应该对数据库运行 DBCC CHECKDB 和 DBCC CHECKCATALOG

(2010-11-10 10:16:16)
标签:

杂谈

分类: 电脑知识

http://topic.csdn.net/t/20060607/22/4807676.html


DBCC CHECKDB 与 DBCC CHECKCATALOG的使用2009-08-10 13:43提示如下数据库 'Express_YTO' 中检测到一个可能的数据库一致性问题。应该对数据库 'Express_YTO'运行 DBCC CHECKDB 和 DBCC CHECKCATALOG.

执行DBCC CHECKDB 和 DBCC CHECKCATALOG.发现了出错表是 ship_scanpod.在查询分析器中执行select * from ship_scanpod 反回3600行数据,还提示有错

在数据库 'Express_YTO' 中检测到一个可能的数据库一致性问题。应该对数据库'Express_YTO' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。 连接中断.


以下参考文章

调试程序时,提示:java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]在数据库 'cncsupport' 中检测到一个可能的数据库一致性问题。应该对数据库 'support' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG

检查了出错的页面 发现了出错表是 nc_softlist表 在查询分析器里用下面的语句查询

select * from nc_softlist

果然是这个表出错了 sql提示信息:

在数据库 'support' 中检测到一个可能的数据库一致性问题。应该对数据库 'support' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。 连接中断

于是下面要做的就是修复这个表 使用下面的语句 尝试进行修复

DBCC CHECKTABLE('nc_softlist',REPAIR_REBUILD)

使用这个语句出现了错误提示,要求单用户下面进行修复

SELECT DATABASEPROPERTY ('ebook118000','IsSingleUser')

上面的这个语句可以查看当前数据库是否单用户

我这个库是非单用户状态 于是问题是怎么把数据库状态转换为单用户状态

sp_dboption 'ebook118000', 'single user', 'true'

使用上面的语句出现了错误 因为有其他用户正在链接 无法转换用户状态 怎么办?只有切断所有正在链接的用户了
(重启服务器,需关掉IIS)
use ebook118000
declare @spid int,@str varchar(100),@dbid int,@dbname varchar(255)
set @dbname='ebook118000' --Replace with you Database Name,try it
select @dbid=dbid from ebook118.dbo.sysdatabases WHERE name = @dbname
declare cur_spid cursor local for
select spid from ebook118000.dbo.sysprocesses where dbid=@dbid
open cur_spid
fetch from cur_spid into @spid
while @@fetch_status=0
begin
set @str='kill '+Cast(@spid as varchar(10))
exec(@str)
fetch from cur_spid into @spid
end
close cur_spid
deallocate cur_spid

上面的语句 功能就是切断数据库所有链接

ok 现在继续进行用户状态的转换了

sp_dboption 'ebook118000', 'single user', 'true'

显示:执行成功.

好了现在计划回到本次操作的最终目的 修复nc_softlist这个表

使用这个语句(因为害怕数据损失)

DBCC CHECKTABLE('nc_softlist',REPAIR_REBUILD)和这个语句DBCC CHECKDB ('nc_softlist',Repair_Fast)   都执行失败了

只好用下面的方法了,损失数据也没有办法了

DBCC CHECKTABLE('nc_softlist',repair_allow_data_loss)

执行成功 两处数据库不一致性被修复

迫不及待的 打开网站看看 失败~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 哦忘了将数据库的用户模式修改回来了
sp_dboption 'ebook118000', 'single user', 'false'

SELECT DATABASEPROPERTY ('ebook118000','IsSingleUser')执行这个语句查看当前状态已经是非单状态了

然后再次执行下面的语句 可以正常执行了没有了错误提示了
select * from nc_softlist

再看看网站 还是不能用 只要重新启动下sql就可以了   哦,如果使用了Sql代理的话 代理也需要重新启动下 因为上面的操作会把代理也停止了


重建索引
 DBCC   DBREINDEX( 'nc_softlist')

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有