SQL Server 置疑、可疑、正在恢复等情况分析_MsSql

来源:脚本之家  责任编辑:小易  

在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",原因约有以下几条:1.错误的删除日志;2.硬件(HD)损坏,造成日志和数据文件写错误;3.硬盘的空间不够,比如日志文件过大;解决办法:最简单的办法是有数据库的全备份,然后恢复即可.步骤:1.删除原始的数据库:USE MASTERGODROP DATABASE DB_SUEPECT2.建立同名的数据库:USE masterGOCREATE DATABASE DB_SUSPECTON(NAME=DBNAME_DAT,FILENAME='C:',SIZE=10,FILEGROWTH=5)LOG ON(NAME='DBNAME_LOG',FILENAME='g:',SIZE=5MB,FILEGROWTH=5MB)GO3.恢复数据库:RESTORE DATABASE DB_SUSPECTFROM DBNAME_BACKUP.DAT4.数据库完整性检测:DBCC CHECKDB('DB_SUSPECT')5.重新启动MSSQLSERVER服务.如果没有全备份,那就要用一些特殊的方法:1.设置数据库为紧急模式Use MasterGOsp_configure 'allow updates',1reconfigure with overrideGOUPDATE sysdatabases SET status=32768 where name='DB_SUSPECT'GO2.停掉SQL Server服务:Net STOP MSSQLSERVER3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:4.启动SQL Server服务:Net START MSSQLSERVER5.重新建立一个同名的数据库DB_SUSPECT;USE masterGOCREATE DATABASE DB_SUSPECTON(NAME=DBNAME_DAT,FILENAME='C:',SIZE=10,FILEGROWTH=5)LOG ON(NAME='DBNAME_LOG',FILENAME='g:',SIZE=5MB,FILEGROWTH=5MB)GO6.设置数据库运行在单用户的模式:USE MASTERGOALTER DATABASE DB_SUSPECT SET SINGLE_USERGO7.停掉SQL服务:Net STOP MSSQLSERVER8.把原来的数据文件再覆盖回来:9.启动SQL Server服务:Net START MSSQLSERVER10.重新设置SQLSERVER的状态:USE MASTERGOEXEC sp_resetstatus"DB_SUSPECT11.数据库完整性检测:DBCC CHECKDB('DB_SUSPECT')12.恢复数据库为多用户模式:USE MASTERGOALTER DATABASE DB_SUSPECT SET MULTI_USERGO13.恢复SQLSERVER原始的配置:USE MATERGOUPDATE sysdatabases SET status=4194320 where name='DB_SUSPECT'GO14.配置SQLSERVER不允许更新系统表:USE MASTERGOsp_configure 'allow updates',0reconfigure with overrideGO15.重新启动MSSQLSERVER服务:最好重新启动操作系统16.备份数据库:可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT补充一点,如果用DOMAIN\\USER时,要注意对.MDF.LDF的所在目录的权限.灵验脚本遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:before running any script,run the following to set themaster database to allow updatesUSE masterGOsp_configure 'allow updates',1GORECONFIGURE WITH OVERRIDEGORun the following scriptUPDATE master.sysdatabases SET status=status^256WHERE name='Database_Name'Run the following scriptexec SP_resetstatus Database_Namestop and start the MSDTC at this stageAfter the procedure is created,immediately disableupdates to the system tables:exec sp_configure 'allow updates',0GORECONFIGURE WITH OVERRIDEGOwww.zgxue.com防采集请勿采集本网。

一、出错情况

有些时候当你重启了数据库服务,会发现有些数据库变成了正在恢复、置疑、可疑等情况,这个时候DBA就会很紧张了,下面是一些在实践中得到证明的方法。

那你的数据将变成msdb数据库备份中的数据,如果你自己的数据库中有含不一样的数据,也就会消失

在一次重启数据库服务后,数据库显示正在恢复,过了很久还是这个状态,离线时间不能太长,所以就想起了一个方法,就是把数据库服务停止了,把数据文件mdf和ldf拷贝出来,删除了ldf文件,按照之前的经验,好像是在没有ldf的情况下可以使用mdf来恢复数据库。创建了一个同名的数据库,停止数据库服务,覆盖mdf文件,再启动数据库服务,这个时候还是处于可疑的状态。

我使用SQL 2000 已有5年从未出现过这种问题。你电脑安装的是什么操作系统?最好找个干净的操作系统,全部重新安装,数据还是相当重要。

其中使用mdf来附加数据库是附加不了的,一直报错。

此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\\置疑\\脱机\\紧急模式”可以看到数据库里面的表,但是仅仅有系统表 G.下面执行真正的恢复操作,重建数据库日志文件 dbcc rebuild_log('

二、解决步骤

要是其他问题,还没有备份的话就必须建一个空数据库,用sqlseever的命令和sql将数据迁入新库中(即使这样,也未必能保证不丢失数据),像你说的通过鼠标点一下的操作就将数据库恢复的方法现在还没有!

方法一:使用脚本进行数据库恢复。

那只能用数据恢复软件恢复一下试试了。final data 或 easyrecovery 建议用后者。数据文件丢失,会不会是误删除, 一般SQL如果不是人为操作的话,数据库不会丢的。

复制代码 代码如下:

--DataBaseName为修复的数据名

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

ALTER DATABASE [DataBaseName] SET EMERGENCY

GO

sp_dboption 'DataBaseName', 'single user', 'true'

GO

DBCC CHECKDB('DataBaseName','REPAIR_ALLOW_DATA_LOSS')

GO

ALTER DATABASE [DataBaseName] SET ONLINE

GO

sp_configure 'allow updates', 0 reconfigure with override

GO

sp_dboption 'DataBaseName', 'single user', 'false'

GO

SQL讲解:

1) 使用指定值强制重新配置:(1、0表示为真假)

sp_configure 'allow updates', 1 reconfigure with override

2) 设置为紧急状态:

alter database DataBaseName set emergency

3) 设置为单用户模式:

alter database [DataBaseName] set single_user

或者:Sp_dboption 'DataBaseName', 'single user', 'true'

4) 修复发现的错误:

DBCC CHECKDB('DataBaseName','REPAIR_ALLOW_DATA_LOSS')

5) 设置为联机、在线:

ALTER DATABASE [DataBaseName] SET ONLINE

方法二:这个方法还没尝试过,大家可以试试看。

复制代码 代码如下:

CREATE DATABASE DataBaseName

ON (FILENAME = 'D:\DataBase\Name.mdf')

FOR ATTACH_REBUILD_LOG ;

GO

您好,是这样的:1.首先确认已经备份了.mdf和.ldf文件。2. 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。3. 用原有的.mdf和.ldf文件覆盖新建数据库对应的.mdf和.ldf文件。4. 重新启动SQL Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。5. 在SQL查询分析器中执行以下命令,以允许更新系统表:use mastergosp_configure "allow updates",1reconfigurewithoverridego。6. 将这个数据库置为紧急模式:update sysdatabases set status = 32768 where name="db_name"go。7. 使用DBCC CHECKDB命令检查数据库中的错误:DBCC CHECKDB("db_name")GO。8. 如果DBCC CHECKDB命令失败,请转至第10步,否则先e799bee5baa6e79fa5e98193e78988e69d8331333337373663将数据库置为单用户模式,再尝试对其进行修复:sp_dboption "db_name","singleuser","true"DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)GO如果在执行DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQLServer服务,然后继续尝试。9. 如果DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:重新执行DBCC CHECKDB("db_name")命令,确认数据库中已没有错误存在。清除数据库的置疑状态:sp_resetstatus "db_name"清除数据库的单用户模式状态:sp_dboption "db_name","single user","false"重新启动SQL Server服务,如果一切正常的话,则数据库已经成功恢复。10.如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:  1. 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。  2. 用原有的ldf文件覆盖新建数据库对应的.mdf文件,将其日志文件(.ldf)删除。  3. 启动SQL Server服务,并将数据库置为紧急模式(同上: 步骤5和步骤6)。  4. 停止并重新启动SQL Server服务。  5. 执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)  DBCC REBUILD_LOG("cas_db", "D:\cas_db\cas_db_Log.LDF")  6. 重新将该数据库置为单用户模式。  7. 再次尝试使用DBCC CHECKTABLE或DBCC CHECKDB命令检查并修复数据库中内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • sqlserver数据库出现置疑的解决思路
  • 命令行启动mssqlserver服务的方法示例
  • delete误删数据使用scn号恢复(推荐)
  • sqlserver数据备份文件的分割备份方法
  • sql server降权运行 sql server 2000以guests权限运行设置方法
  • 查询sqlserver数据库死锁的一个存储过程分享
  • sql创建的几种存储过程
  • 小议sqlserver数据库主键选取策略
  • sqlserver中case的使用方法(上下篇)
  • sql server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发
  • sql高级技巧几个有用的sql语句
  • 如何解决SQL Server数据库置疑问题
  • sql server2000数据库置疑还能用吗
  • SQL SERVER2000置疑
  • 数据库置疑希望高手指教!SQL Server
  • SQL server2000中的MSDB数据库置疑,网上的很多方法都试过,但是都解决不了!
  • SQL SERVER 2000 重启数据库或服务器以后 出现置疑的问题。
  • 如何修复 SQL 数据库置疑
  • 在sql server 2000中经常会遇到数据库置疑,我想问下怎么解决置疑恢复问题。不是用备份还原的那些
  • sql server 置疑 数据库mdf,ldf 文件都丢了
  • sql server2000附加数据出现wxywt21(置疑)
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mssqlsqlserver数据库出现置疑的解决思路命令行启动mssqlserver服务的方法示例delete误删数据使用scn号恢复(推荐)sqlserver数据备份文件的分割备份方法sql server降权运行 sql server 2000以guests权限运行设置方法查询sqlserver数据库死锁的一个存储过程分享sql创建的几种存储过程小议sqlserver数据库主键选取策略sqlserver中case的使用方法(上下篇)sql server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发sql高级技巧几个有用的sql语句sql server 2012 安装图解教程(附sql server数据库入门学习总结microsoft sql server 2012 数据sql重复记录查询的几种方法win7系统安装sqlserver2000的详细sqlserver中distinct的用法(不重sql server错误代码大全及解释(sql-order by 多字段排序(升序、sql将一个表中的数据插入到另一个用sql语句添加删除修改字段、一些mssql isql命令详解sql中存储过程的定义、修改和删除操作使sql用户只能看到自己拥有权限的库(图文sql server 2016 安装步骤图文教程sqlserver记录登录用户的登录时间(自写脚开窗函数有浅入深详解(一)sql server 2000 行转列的实现(横排)sqlserver批量更新两个关联表数据的方法sql中的 where 、group by 和 having 用法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved