[SQL]数据库置疑的故事

数据|数据库|置疑

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明确的书面许可,不得出于任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。

 

时间: 2024-11-01 04:42:33

[SQL]数据库置疑的故事的相关文章

数据库置疑的处理方法

数据|数据库|置疑 步骤1: 创建一个新的数据库,命名为原来数据库的名字. 步骤2: 停止SQL Server 步骤3: 把老数据库的MDF文件替换新数据库的相应的MDF文件,并把LDF文件删除. 步骤4: 重新启动SQL Server服务,然后运行如下命令: Use Master Go sp_configure 'allow updates', 1 reconfigure with override Go begin tran update sysdatabases set status =

Sql数据库MDF数据文件数据库恢复

EXEC sp_attach_db @dbname = 'dbname', @filename1 = 'd:\dbname_Data.MDF', @filename2 = 'd:\dbname_log.ldf'  sp_attach_single_file_db @dbname = 'dbname' , @physname = 'physical_name' dbname:即要还原的数据库名字. Physname:即物理文件名. Physical_name:即.mdf文件路径. 数据库 : ms

session-aspx单点登录 怎么判断不正常退出,将SQL数据库一字段改成true

问题描述 aspx单点登录 怎么判断不正常退出,将SQL数据库一字段改成true 我做了一个系统,在同一时间,一个帐号只能一个登录,我把数据库帐号表加了一个列,用来判断是否登录,如果没登录,为true,如果登录后,就改为false,然后在登陆界面判断这个列是true还是false,如果是false就弹框,不能进去. 只有用户自己安全退出,才把false改成true 我的帐号使用session传值的. 现在有个麻烦,就是如果直接关掉游览器,那这个列的字段不会自己变成true,怎么办?还有直接断电和

sql语句-sql 数据库问题,如何得到我想要的表达

问题描述 sql 数据库问题,如何得到我想要的表达 现在表单是这样的怎么把它变成下面这样的求大神解答 解决方案 可以把你的问题说清楚一些吗,我没看懂你要表达什么意思 解决方案二: 这很简单啊,直接在sql语句中把所有需要的数据查询出来输出就行 解决方案三: 1.如果是直接用sql语句查询显示的话,可以参考这边 http://blog.csdn.net/smile725775/article/details/6977937 ,但是这个有一个要求就是工序的最大数目是固定的,你能提前知道最多有多少个工

3步转化ACCESS为SQL数据库的连接

其实两者基本通用 步骤很简单3步: 1,转化MDB数据库到SQL SQL工具里就有 2, 更改数据库链接字串 以下为代码: Set Conn=Server.CreateObject("ADODB.Connection") SQL="Driver={SQL Server};Server=XD-Y1W9B7;UID=sa;PWD=sa;DataBase=ljl" Conn.Open(SQL) 最后是SQL与ACCESS差异的地方· 这个大家需要注意 下面为其详细讲解:

sql数据库被挂马或插入JS木马的解决方案

很多网站可能遭遇到sql数据库被挂马者插入JS木马的经历:mssql的每个varchar.text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插入数据库.    这很有可能是程序自动执行的,黑客先从搜索引擎google.百度等搜索存在漏洞的采用asp+mssql设计的网站,然后采用小明子这样的注入扫描工具,扫描整个网站,一旦发现有sql注入的漏洞或者上传漏洞,黑客就通过各种手段,上传自己的大马,如海阳木马:然后,黑客就把这个网站纳入他的肉鸡列

ASP.NETR把Excel导入SQL数据库的自定义类

ASP.NETR把Excel导入SQL数据库的自定义类 以下是引用片段:public class SaveToSql {   public string strNewCodeId = string.Empty;   public string strNewCode = string.Empty;   public string strNewDes = string.Empty;   public string strOldCodeId = string.Empty;   public strin

ASP中怎么实现SQL数据库备份、恢复

sql|备份|恢复|数据|数据库 1.ASP中怎么实现SQL数据库备份.恢复!答:asp在线备份sql server数据库:1.备份<%SQL="backup database 数据库名 to disk='"&Server.MapPath("backup")&"\"&"backuptext.dat"&"'"set cnn=Server.createobject(&quo

如何把ACCESS转成SQL数据库

access|sql|数据|数据库 很多朋友想用SQL2000数据库的编程方法,但是却又苦于自己是学ACCESS的,对SQL只是一点点的了解而已,这里我给大家提供以下参考---将ACCESS转化成SQL2000的方法和注意事项 一,首先,我说的是在ACCESS2000,SQL2000之间转换,其他的我也还没有尝试过,希望大家多多试验,肯定是有办法的: 二,转换的方法 1,打开"控制面板"下"管理工具"中的"数据库源": 2,按"添加&q