代码改变世界

数据库备份还原时-Sql Server 检测到基于一致性的逻辑I/O错误解决方案

2010-08-24 23:36  Leason Li  阅读(2024)  评论(1编辑  收藏  举报

今天在做SharePoint迁移的时候,遇到了一个新问题,其中用到的自定义数据库(不是新建SharePoint网站时自动生成的数据库)

从生产环境中备份.BAK文件在新SharePoint服务器上还原一切OK,sql server 也提示全部还原成功。

没有想到的是,在做一些layouts页面功能测试的时候,其中一个记录Log的页面打不开,提示如下错误:

截图01 

很明显这是数据库中的某个表结构被损坏了,数据的一致性和完整性被破坏,找到所在的数据表logs,执行

select * from logs

还真是,执行完后,同样报类似的错误,很明显,这个表还原后,有问题,所以数据库的备份还原机制并不一定能成功啊。

解决方法有两个,如下:

1: 执行如下sql语句

use RUM

go

ALTER DATABASE RUM SET SINGLE_USER   设置为单用户

DBCC CHECKDB (RUM, repair_allow_data_loss) with NO_INFOMSGS   允许丢失错误

go

ALTER DATABASE RUM SET MULTI_USER   设置为多用户

go

把其中的RUM换成自己的数据库执行成功后,结果如下:

截图00

可喜的是,我用这条命令就解决了问题,但是也有此命令执行不成功的情况,这时用办法2。

2: 删除出问题的表Log(生产环境中可不能这么干哈),然后参照生产环境,新建一个结构和名字一样的表Log,

并导入生产环境中Log表中的数据。OK,问题解决。