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明确的书面许可,不得出于任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




