分享、学习、提高
2007/07/07 10:30
Tags: , ,
一大早起来,朋友在QQ上急问说:
引用

xxx 00:22:10
某数据库出现置疑,我按照
http://www.itlearner.com/article/2005/1375.shtml
xxx 00:22:35
在分离数据库时说分离失败,然后在数据库就消失了
xxx 07:39:39
我现在用一个多月前备份的
我 09:28:37
那现在用的你有没有换一个数据库名?
xxx 09:24:34
我就是右键,分离数据库,提示失败,在企业管理里一看,数据库没有了
xxx 09:25:02
没有换数据库名,但是我把那个mdf和log文件复制了一份


上服务器看一下,先停止MSSQL。把其一个月前备份的改个名字,将昨天出现问题的数据库.mbf和ldf文件恢复成原数据库名。重启MSSQL,在数据库列表中就看到它了:)只是后面有个(置疑)。

然后参照上面那篇文章说的运行:

USE MASTER
GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='hxdbname'
Go

sp_dboption 'hxdbname', 'single user', 'true'
Go

DBCC CHECKDB('test')
Go

update sysdatabases set status =28 where name='hxdbname'
Go

sp_configure 'allow updates', 0 reconfigure with override
Go

sp_dboption 'hxdbname', 'single user', 'false'
Go


1分钟后,下面显示了结果,看到了许多索引错误。如:

服务器: 消息 8909,级别 16,状态 1,行 2
表错误: 对象 ID 0,索引 ID 0,页 ID (1:60296)。页首结构中的 PageId = (0:0)。
'hxdbname' 的 DBCC 结果。
CHECKDB 发现了 0 个分配错误和 1 个一致性错误,这些错误并不与任何单个的对象相关联。
.......
表错误: 数据库 'hxdbname',索引 'Hx_Fav.bookid'(ID 133575514)(索引 ID 2)。下列键的键多余或无效:
服务器: 消息 8956,级别 16,状态 1,行 2
索引行(1:25141:294)(其值为 favid = 1172 and id = 212014)指向由  标识的数据行。
服务器: 消息 8952,级别 16,状态 1,行 2
表错误: 数据库 'hxdbname',索引 'Hx_Fav.bookid'(ID 133575514)(索引 ID 2)。下列键的键多余或无效:
服务器: 消息 8956,级别 16,状态 1,行 2
索引行(1:50440:363)(其值为 favid = 6070 and id = 212012)指向由  标识的数据行。
服务器: 消息 8952,级别 16,状态 1,行 2
........

先不管这些,此时网站就可以使用了:)

但是出现了这些索引错误,应该修复一下才对。于是,使用dbcc dbreindex('Hx_Fav'),提示
引用

服务器: 消息 3908,级别 16,状态 1,行 1
未能在数据库 'hxdbname' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。


同时,在网站访问时也出现了类似的错误。
引用

Microsoft OLE DB Provider for SQL Server 错误 '80004005'

未能在数据库 'hxdbname' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。

/book/log_show.asp,行 78  


网上找下资料,还是只能通过新建一个数据库,将数据库导入的方法来解决:(

新建一个数据库,将原数据库导入,选上了“扩展选项”,导入还算顺利。

然后将出现错误提示的表一一dbcc dbreindex了一下。

最后dbcc checkdb,没有显示错误了。

修改网站的连接数据库代码,问题解决:)
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]