数据库置疑的解决方法_msdb数据库置疑的解决方法

数据库置疑的解决方法_msdb数据库置疑的解决方法在没有数据库日志的情况下数据的恢复:由于误删的事务日志文件,导致数据库无法启动(置疑状态),数据无法取去,方法:新建一个同名数据库,把数据文件copy覆盖打开系统表的操作权限UseMasterGosp_configure’allowupdates’,1reconfigurewithoverrideGo设置成为紧急状态updatesysdatabasessetstatus=32…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺


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

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

方法:
新建一个同名数据库,把数据文件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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171491.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 怎样选择有效的关键词

    怎样选择有效的关键词

  • 手机号码归属地查询数据库下载「建议收藏」

    手机号码归属地查询数据库下载「建议收藏」只需要输入前7位即可查询所在地access数据库,excel的可以直接查询哦,还有htm格式下载。有15万5千多条记录电话区号code字段2009年01月02日整理完成支持移动159号段和联通153号段包含最新的151、155、157号码段的归属地数据手机号码归属地信息,可以详细查询到手机号码的开户地信息,包括该号码所属省份、城市、长途区号以及该号…

  • C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解

    C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解最近要做一个大数据dataTable循环操作,开始发现运用foreach,进行大数据循环,并做了一些逻辑处理。在循环中耗费的时间过长。后来换成使用Parallel.ForEach来进行循环。一开始认为, 数据比较大时,Parallel.ForEach肯定比 ForEach效率高,后来发现,其实并不是这样。我用了1000万次循环测试:{CSDN:CODE:2601125}

  • cuda包卸载_之前安装过cuda卸载不彻底

    cuda包卸载_之前安装过cuda卸载不彻底不小心把/usr/local/cuda删除了,卸载cuda后安装cuda后/usr/local下没有cuda文件夹.运行:sudoapt-getautoremove–purgecuda

  • copy与deepcopy_java clone 深拷贝

    copy与deepcopy_java clone 深拷贝说到复制方法,在开发程序中要怎么复制呢?其实复制Java数组的方法很多,但大多数都是浅层复制,今天爱站技术频道小编带你寻找详解JAVA深层拷贝DeepCopy的使用方式。方法实现很简单,提供两种方式:一种是序列化成数据流,前提是所有对象(对象中包含的对象…)都需要继承Serializable接口,如果都继承了那很容易,如果没有继承,而且也不打算修改所有类,可以用第二种方式。第二种是将对象序…

  • ifconfig 与 ip addr 命令详解 – 学习/实践

    ifconfig 与 ip addr 命令详解 – 学习/实践1.应用场景 主要用于了解学习,掌握使用IP地址相关知识, 如何查看IP信息,以及各个参数代表的含义 2.学习/操作 1.文档阅读 网络协议概论|Laravel学院-不定期分享之ifconfig与ipaddr命令详解 2.整理输出 2.1如何查看机器的IP地址 我们在Linux系统查看IP地址通常有以下两种方式: 1)ifconfig 2)ipaddr

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号