[SQL]数据库置疑的故事

系统 1640 0

The information in this article applies to:

- Microsoft SQL Server 7.0,2000

 

[SQL] 置疑

故事

Revision History:

对本文档所有修改都应按修改时间顺序记录在此。

 

Version

Date

Creator

Description

1.0.0 .1

2004-2-19

郑昀

草稿

 

 

 

 

Implementation Scope

本文面向的读者是 Microsoft SQL Server 维护人员

继续阅读之前,我们假设您熟悉以下知识:

n         Microsoft SQL Server

 

1. 以前的文章

从前写过一篇

数据库日志文件丢失时的恢复步骤     zhengyun_ustc (原作)

http://www.csdn.net/develop/read_article.asp?id=17604 ), 描述我误删除了数据库的事务日志文件 (.ldf) 之后,如何经过各种尝试恢复数据库的

 

但是不少网友在处理“数据库置疑”的实践过程中,又产生了许多新的疑问。

我还是总结一下出现的几种情况,以供参考。

 

2.Zach 的灵验脚本

Zach 说他每次遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:

======================================================

--before running any script, run the following to set the

master database to allow updates

USE master

GO

sp_configure 'allow updates', 1

GO

RECONFIGURE WITH OVERRIDE

GO

 

--Run the following script

UPDATE master..sysdatabases SET status = status ^ 256

WHERE name = 'Database_Name'

 

--Run the following script

exec SP_resetstatus Database_Name

 

--stop and start the MSDTC at this stage

 

--After the procedure is created, immediately disable

updates to the system tables:

exec sp_configure 'allow updates', 0

GO

RECONFIGURE WITH OVERRIDE

GO

=====================================

 

从上面可以看出,处理置疑的基本步骤还是我那篇文章中说的 ( 注意我使用的字体颜色 )

执行 sp_configure 以允许对系统表进行更新,然后用 RECONFIGURE WITH OVERRIDE 语句强制实施该配置;

数据库重置紧急模式;

执行 sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项 只有系统管理员才能执行 。执行该过程后,立即重启 SQL Server 服务;

执行 sp_configure 以禁止对系统表进行更新,然后用 RECONFIGURE WITH OVERRIDE 语句强制实施该配置。

       

 

status ^ 256 的意思就是:

Constant

Value

Description

SQLDMODBStat_Suspect

256

Database integrity is suspect for the referenced database.

 

 

不同的是,有时候丢失了数据库日志文件,额外需要以下步骤:

Ø          把应用数据库设置为 Single User 模式;

Ø          DBCC CHECKDB

才可以。

 

但是几位网友的实践结果就是这个 DBCC CHECKDB 执行失败。一位网友 yang 说:“ 但是 DBCC CHECKDB 就是执行不了,总是说 该数据库处于回避恢复模式 。我已经试了很多次了,就是改变不了这个状态。

还有一位 Rui 执行 DBCC CHECKDB 时报错:“ Server: Msg 943, Level 14, State 1, Line 1 Database 'his_yb' cannot be opened because its version (539) is later than the current server version (515).

 

对于 Yang ,可能他没有一步一步做,。我的切身体会是,把应用数据库设置为 Single User 模式后就可以做 DBCC CHECKDB 。之后呢,也许 SQL Server 重启后自动检查数据库是否正常。 但是数据应该是可以读出来的,至少可以被 DTS Wizard 读出来的 。这时候的数据库还存在问题,比如我的 组件使用数据库时,报告说:“发生错误: -2147467259, 未能在数据库 'XXX' 中运行 BEGIN TRANSACTION ,因为该数据库处于回避恢复模式。”

 

对于 Rui 碰到的那个错误

Server: Msg 943, Level 14, State 1, Line 2
Database 'XXXX' cannot be opened because its version (536) is later than
the current server version (515).

这表明 Rui 正试图:

从一个 SQL Server 2000(version 539,536之类的) 的数据库备份恢复到一个 SQL Server 7.0

或者

把一个 SQL Server 2000(version 539,536之类的) 的数据库 attach 到一个 SQL Server 7.0

这是不允许的。如果你必须使用这个 SQL Server 2000 的数据备份,那么请您首先把这个备份倒入 SQL Server 2000 ,最后用 DTS 把数据库从 SQL Server 2000 transfer SQL Server 7.0 上。

 

关于数据库置疑和日志文件丢失损坏,我们还会继续关注并作进一步报道。

 

Writen by zhengyun.NoJunk(at)tomosoft.dot.com

Disclaimers

本文档所包含的信息代表了在发布之日, ZhengYun 对所讨论问题的当前看法, Zhengyun 不保证所给信息在发布之日以后的准确性。

本文档仅供参考。对本文档中的信息, Zhengyun 不做任何明示或默示的保证。

用户必须遵守所有适用的版权法。在不对版权法所规定的权利加以限制的情况下,如未得到 zhengyun CSDN.Net 明确的书面许可,不得出于任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12747


[SQL]数据库置疑的故事


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论