`

数据库置疑解决方案

阅读更多


在没有数据库日志的情况下数据的恢复:

由于误删的事务日志文件,导致数据库无法启动(置疑状态),数据无法取去,

方法:
新建一个同名数据库,把数据文件copy覆盖
打开系统表的操作权限
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
设置成为紧急状态
update sysdatabases set status = 32768 where name = 'databaseName'
然后刷新一下数据库
变成了紧急状态
然后再
update sysdatabases set status =26 where name = ''databaseName''
然后刷新一个数据库
一般情况下就应该可以了。

http://www.itpub.net/showthread.php?s=&threadid=32011&highlight=%C8%D5%D6%BE%CE%C4%BC%

太兴奋了,我的数据终于找回来了

数据库被置疑的解决办法 一:         
 
在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态"置疑",我们先来分析一下SQLSERVER数据库"置疑"的原因:
1.错误的删除日志;
2.硬件(HD)损坏,造成日志和数据文件写错误;
3.硬盘的空间不够,比如日志文件过大;


解决办法:

这是最简单的办法是有数据库的全备份,然后恢复即可.
步骤:

1. 删除原始的数据库:
USE MASTER
GO
DROP DATABASE DB_SUEPECT


2.建立同名的数据库:
USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO


3.恢复数据库:
RESTORE DATABASE DB_SUSPECT
FROM DBNAME_BACKUP.DAT


4.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')

5.重新启动MSSQLSERVER服务.

如果没有全备份,那就要用一些特殊的方法:

1.设置数据库为紧急模式
Use Master
GO
sp_configure 'allow updates', 1
reconfigure with override
GO
UPDATE sysdatabases SET status = 32768 where name = 'DB_SUSPECT'
GO

2.停掉SQL Server服务:.Net STOP MSSQLSERVER

3.把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走:

4.启动SQL Server服务:.Net START MSSQLSERVER

5.重新建立一个同名的数据库DB_SUSPECT;

USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO


6.设置数据库运行在单用户的模式:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET SINGLE_USER
GO

7.停掉SQL服务:.Net STOP MSSQLSERVER

8.把原来的数据文件再覆盖回来:


9.启动SQL Server服务:.Net START MSSQLSERVER

10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "DB_SUSPECT"

11.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')

12.恢复数据库为多用户模式:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET MULTI_USER
GO

13.恢复SQLSERVER原始的配置:
USE MATER

GO

UPDATE sysdatabases SET status = 4194320 where name = 'DB_SUSPECT'
GO

14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with override
GO

15.重新启动MSSQLSERVER服务:

最好重新启动操作系统

16.备份数据库:

可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN\USER时,要注意对.MDF.LDF的所在目录的权限.

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
=====================================
该文章转载自网络大本营: http://www.xrss.cn/Info/7753.Html


数据库被置疑的解决办法方法二:

SQL Server数据库多数据文件恢复技术
由于截断数据库日志或者其他需要,我们需要由单个数据文件中恢复数据库。下面的操作需要用sa的身份在SQL Server 查询分析器中登录,并一直假设我们要恢复的数据库是test,数据文件是C:\Program Files\Microsoft SQL Server\MSSQL\data\test_data.mdf。同时如果你需要截断日志文件,请在数据库脱机后将日志文件改名。

如果您的mdf文件是当前数据库产生的并且是单个数据日志的,那么一般情况下你可以很轻松的使用sp_attach_single_file_db恢复数据库,操作语句如下:
sp_attach_single_file_db @dbname = ’test’, @physname = ’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf’
会出现类似下面的提示信息
设备激活错误。物理文件名 ’C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF’ 可能有误。
已创建名为 ’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF’ 的新日志文件。
如果目的是截断日志,你可以将刚才改名的日志文件删除或者备份了。 

但是,如果您的数据库文件是从其他计算机上复制过来的或者有多个数据或日志文件,那么很不幸,上述办法多半行不通了。你也许会得到类似下面的错误信息
服务器: 消息 1813,级别 16,状态 2,行 1
未能打开新数据库 ’test’。CREATE DATABASE 将终止。
设备激活错误。物理文件名 ’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF’ 可能有误。
我们需要用下面的操作来试着恢复(此操作具有很大的危险性,请确认在操作时您的数据库不在使用中)。
我们使用默认方式建立一个供恢复使用的数据库(如test)。如果是多数据文件的,请确认新建数据文件的名称及数目和要恢复的数据文件一致。日志文件就不必了; 
停掉数据库服务器; 
将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf; 
启动数据库服务器。此时会看到数据库test的状态为“置疑”; 
设置数据库允许直接操作系统表。在SQL Server 企业管理器里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中; 
设置test为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID(’test’)
此时可以在SQL Server 企业管理器里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表; 
下面重建数据库日志文件
dbcc rebuild_log(’test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明其他程序正在使用该数据库,如果您正在使用SQL Server 企业管理器,那么关闭它。
正确执行完成的提示应该类似于:
警告: 数据库 ’test’ 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server 企业管理器里面会看到数据库的状态为“只供DBO使用”; 
验证数据库一致性(可省略)
dbcc checkdb(’test’)
在进行了多个验证后,最后的执行结果一般如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 ’test’ 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系; 
设置数据库为正常状态
sp_dboption ’test’,’dbo use only’,’false’
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦; 
最后一步,我们要将步骤5中设置的“允许对系统目录直接修改”一项恢复。在SQL Server 企业管理器里面选择数据库服务器,按右键,选择“属性”,取消在“服务器设置”页面中将“允许对系统目录直接修改”的选择。 

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

分享到:
评论

相关推荐

    SQL数据库置疑解决方案(原因、预防、修复)附图

    ### SQL数据库置疑解决方案 #### 一、数据库置疑产生的原因 数据库置疑是指数据库管理系统在启动时检测到数据库文件存在异常,导致无法正常加载数据库的一种状态。这通常是因为数据库文件完整性受损或某些条件未...

    sql server 2000数据库置疑解决方案

    ### SQL Server 2000 数据库置疑解决方案 #### 背景介绍 SQL Server 2000 是一款广泛使用的数据库管理系统,在其长期的应用过程中,可能会遇到各种各样的问题,比如数据库置疑(suspect)的情况。当SQL Server 2000...

    SQL数据库置疑解决方案报告书(原因、预防、修复)附图.doc

    ### SQL数据库置疑解决方案知识点详解 #### 一、数据库置疑产生的原因 1. **SQL Server 所在分区空间不足**: - 当SQL Server所在分区的空间不足以支持数据库文件的增长时,可能会导致数据库置疑。例如,如果使用...

    SQL数据库置疑解决-问题集锦

    SQL数据库置疑解决方案(原因分析、预防措施、修复方法)附图.doc文档可能提供了详细的图文解析,包括如何识别问题、分析日志和诊断原因。 针对“置疑”状态,首先需要了解数据库的相关命令。SQL数据库置疑-相关命令...

    数据库置疑修复工具

    总结来说,"数据库置疑修复工具"是一种实用的解决方案,旨在帮助IT管理员快速解决数据库置疑问题,减少业务中断时间,并尽可能保护数据安全。在日常运维中,了解这些工具的使用和数据库置疑的处理方法是非常必要的,...

    数据库置疑修复工具下载

    为了解决这个问题,"数据库置疑修复.RAR" 提供了一个便捷的解决方案。 这个压缩包文件包含了一个可能的数据库修复工具,它旨在帮助用户无须深入编写复杂的代码就能修复置疑状态的数据库。这种工具通常会通过扫描...

    SQL数据库置疑项目解决方案(原因、预防、修复)附图.pdf

    SQL数据库置疑是一种常见问题,通常发生在数据库无法正常访问或存在异常情况时。本文将深入探讨数据库置疑的原因、预防措施以及修复策略。 一、数据库置疑的原因 1. 存储空间不足:SQL Server所在分区空间不足或...

    sql2000 数据库置疑解决.doc

    标题中的“sql2000 数据库置疑解决.doc”指的是SQL Server 2000数据库出现“置疑”状态的问题,这种情况通常意味着数据库无法正常访问。描述中提到的“解决文本”是一份详细的步骤指南,确保能解决SQL Server 2000...

    MS SQL数据库置疑修复_MSSQL数据库置疑修复_

    3. 解决方案: - 检查日志文件:使用DBCC CHECKDB命令检查数据库是否有物理损坏,如果有,可能需要从备份中恢复。 - 修改数据库状态:在企业管理器或T-SQL中,将数据库状态从SUSPECT改为EMERGENCY,允许在只读模式...

    SDB数据库置疑的解决方法

    针对MSDB数据库置疑的问题,下面是一些常用的解决方案: 1. **备份与还原:** - 首先确保有完整的MSDB数据库备份文件,然后尝试将备份文件恢复到一个新的数据库实例中。 - 使用T-SQL命令来实现此操作,例如: ``...

    SQL数据库置疑导库工具

    总的来说,“SQL数据库置疑导库工具”是应对SQL Server数据库置疑状态的一种高效解决方案,它提供了一种专业的方法来从损坏的数据库中拯救数据,并将其安全地迁移到新的环境中。对于企业来说,这类工具是数据库管理...

    SQL_Server2000数据库置疑的解决方法

    虽然这种方式可能不会完全成功,但它可以提供一种临时的解决方案,帮助用户访问数据并进行必要的数据恢复操作。 综上所述,对于SQL Server 2000数据库置疑状态的解决方法及文件恢复技术,我们不仅需要遵循一定的...

    数据库置疑修复工具.zip

    "数据库置疑修复工具.zip"就是一个针对这类问题的解决方案。 该压缩包文件包含了一个名为"数据库置疑修复工具.exe"的可执行程序,这可能是一个独立的应用程序,设计用于帮助用户解决数据库置疑状态的问题。这种类型...

    用友数据库置疑修复

    本文将深入探讨“用友数据库置疑修复”的主题,并提供解决方案。 “置疑”状态通常指的是数据库在某些情况下无法正常访问,可能由于硬件故障、操作系统问题、网络问题或数据库文件损坏引起。在用友U8系列,特别是...

    修复SQL2000数据库置疑时出现的错误.txt

    #### 解决方案 针对上述问题,我们可以采取以下步骤进行修复: 1. **备份数据库** 在进行任何操作之前,强烈建议先对数据库进行完全备份,以防止进一步的数据丢失。 2. **停止 SQL Server 服务** 需要注意的...

    SQL数据库置疑修复工具

    "SQL数据库置疑修复工具"是一种专业的软件解决方案,用于处理SQL Server数据库中出现的置疑状态。当数据库被标记为置疑时,它通常表示数据库与SQL Server实例之间的连接出现问题,可能是主数据库文件(MDF)或日志文件...

    sqlserver数据库置疑的种解决方法.doc

    ### SQL Server 数据库置疑解决方法详解 #### 方法一:重置数据库状态并删除日志文件 当SQL Server 2000中的数据库出现置疑状态时,可以通过以下步骤进行修复: 1. **停止SQL Server服务**:确保SQL Server当前...

Global site tag (gtag.js) - Google Analytics