sql server 数据库状态(置疑)的解决办法!邹大哥救命啊!
一次忽然停电,开机后,数据库文件变成灰色,无法访问。查询网上资料,重新建立一个相同名字的数据库,然后停止sql server服务,将原来的数据库文件覆盖掉新生成的,然后重新启动sql server服务,但是问题没有解决,现在的现象是:
在查询分析器中可以访问表里面的数据,使用select * form table 可以读出表中的数据,但是在企业管理器中无法访问表,提示处于 suspect 状态,不可访问,也不能进行备份操作。
使用脚本生成的时候,也会出错,使用导出数据到一个新建库的操作也出错。
使用 SELECT DATABASEPROPERTYEX(table', 'Status') 命令,显示为 ONLINE
使用 DBCC CHECKDB('table', REPAIR_ALLOW_DATA_LOSS)命令,显示为:
服务器: 消息 7919,级别 16,状态 2,行 1
未处理修复语句。数据库需要处于单用户模式下。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
使用 sp_resetstatus table 命令,显示:
在 sysdatabases 中更新数据库 table' 的条目之前,模式 = 0,状态 = 28(状态 suspect_bit = 0),没有更新 sysdatabases 中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。
使用 BACKUP DATABASE 命令备份数据,显示:
服务器: 消息 3033,级别 16,状态 1,行 1
BACKUP DATABASE 不能用于以紧急模式打开的数据库。
服务器: 消息 3013,级别 16,状态 1,行 1
BACKUP DATABASE 操作异常终止。
我该怎么办????请各位路过的大侠救命,请邹大哥救命啊!!!
问题点数:100、回复次数:35Top
1 楼zjcxc(邹建)回复于 2005-03-03 14:32:49 得分 10
--设置看看能否进入单用户模式
alter database [table] set single_user
DBCC CHECKDB('table', REPAIR_ALLOW_DATA_LOSS)Top
2 楼dxhdxh(anyduan)回复于 2005-03-03 14:35:59 得分 5
停服务器 把数据库文件copy出来 启动服务器 删除置疑数据库 然后附加数据库Top
3 楼631799(杭州工人)回复于 2005-03-03 14:38:45 得分 35
.新建一个同名的数据库
2.再停掉sql server
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的同名数据库名'
Go
sp_dboption '置疑的同名数据库名', 'single user', 'true'
Go
DBCC CHECKDB('置疑的同名数据库名')
Go
update sysdatabases set status =28 where name='置疑的同名数据库名'
Go
sp_configure 'allow updates', 0 reconfigure with override
Go
sp_dboption '置疑的同名数据库名', 'single user', 'true'
Go
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
转贴:
问题:
Sql2000数据的附加时出错:
错误 3624
location:recovery.c:1996
express:curr->lon_length>0
spdi:51
process id:768
最后提示附加失败
服务器: 消息 5105,级别 16,状态 4,行 1
设备激活错误。物理文件名 'f:\database\fdzz1204_Data.ldf' 可能有误。
解决:
新建一同名数据库(文件名,文件组都和原来的一样),然后停止数据库服务,用原来文件替换新建的数据库文件,启动数据库,该数据库被设未suspect
然后把数据库改成紧急模式:
sp_configure 'allow', 1
reconfigure with override
update sysdatabases set status = 32768 where name = '数据库名'
把LDF文件改名,再执行
DBCC REBUILD_LOG ('数据库名', 'E:\fdzz\database\fdzz1204_Log.LDF' )
恢复数据库紧急模式
update sysdatabases set status = 0 where name = '数据库名'
执行
restore database 数据库名 WITH RECOVERY
sp_configure 'allow', 0
reconfigure with override
然后用DBCC CHECKDB ('数据库名')看看有没有错误
如果上面还是不行,试试吧数据库设为紧急模式,应该可以看到数据了,在把数据导出到一个新的数据库Top
4 楼pweixing(幸运星)回复于 2005-03-03 15:19:34 得分 0
//--设置看看能否进入单用户模式
alter database [table] set single_user
DBCC CHECKDB('table', REPAIR_ALLOW_DATA_LOSS)
执行前一个语句,返回消息为:
命令已成功完成。
执行后一个语句,返回消息为:
服务器: 消息 7919,级别 16,状态 2,行 1
未处理修复语句。数据库需要处于单用户模式下。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
请邹大哥继续帮忙!!谢谢!Top
5 楼Softlee81307(孔腎)回复于 2005-03-03 16:02:47 得分 5
upTop
6 楼cemma(佩)回复于 2005-03-03 16:11:54 得分 5
MARKTop
7 楼zjcxc(邹建)回复于 2005-03-03 17:09:03 得分 10
试
执行第一个语句 alter database [table] set single_user
重新启动sql服务,再修复Top
8 楼pweixing(幸运星)回复于 2005-03-04 09:34:24 得分 0
前一个命令执行结果:
命令已成功完成。
重新启动sql server服务后执行第二个命令,结果为:
服务器: 消息 8966,级别 16,状态 1,行 1
未能读取并闩锁页 (1:2446)(用闩锁类型 SH)。sysindexes 失败。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
再使用命令 SELECT DATABASEPROPERTYEX('table', 'Status') ,返回结果为
SUSPECT
和昨天不一样,昨天是online,估计是因为重新启动后状态又变了!!
怎么办??
请邹大哥继续指导!
Top
9 楼pweixing(幸运星)回复于 2005-03-04 13:05:09 得分 0
自己顶!Top
10 楼TigerSuper(菜鸟(鸟吃菜吗?))回复于 2005-03-04 13:09:18 得分 5
UP
Top
11 楼huazf(huazf)回复于 2005-03-04 17:32:17 得分 0
专业提供Sql Server 数据库修复服务
http://www.xunxin.cn
Eamil:xxkj@china.com.cn
Tel:0576-2454863
QQ:386999
Hotmail:huazf@hotmail.comTop
12 楼pweixing(幸运星)回复于 2005-03-04 17:57:57 得分 0
楼上的哥们,我在武汉,你来不来啊???Top
13 楼LoveLwn(小P)回复于 2005-03-04 18:08:40 得分 5
upTop
14 楼yangys(杨杨)回复于 2005-03-04 18:34:34 得分 5
顶Top
15 楼huazf(huazf)回复于 2005-03-04 23:49:59 得分 0
to pweixing(幸运米,幸运得米!)
不需要到武汉,具体你可以QQ与我联系Top
16 楼pweixing(幸运星)回复于 2005-03-07 17:09:08 得分 0
自己顶!大侠快帮忙!Top
17 楼tdy1977(懂一点电脑的小唐)回复于 2005-03-07 17:24:29 得分 0
我也经常遇到某个实例置疑,一般都可以解决:先脱机,再联机。Top
18 楼skeeterLa(英俊的大米虫)回复于 2005-03-07 21:12:57 得分 5
我也遇到过 不知怎么弄的就弄好了 流汉ing!Top
19 楼Leftie(左手,为人民币服务)回复于 2005-03-07 21:49:01 得分 5
先分离数据库,再附加数据库Top
20 楼real_name(*真名)回复于 2005-03-07 21:52:50 得分 0
先删除 再附加Top
21 楼pweixing(幸运星)回复于 2005-03-08 09:15:38 得分 0
分离数据库:该数据库实例不存在!到master库的sysdatabase表里面看根本就没有这个表的信息。
附加数据库:错误823Top
22 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-08 11:56:45 得分 0
唉哟哟,我的数据库现在也是这个样子,我用的631799(杭州工人) 的方法,可是也解决不了问题,今天本来要发帖子问大家的,结果就看到这个了,还有什么方法没有?Top
23 楼deyangwangyu(wangyu)回复于 2005-03-08 13:55:52 得分 0
值得学习Top
24 楼pweixing(幸运星)回复于 2005-03-08 14:45:09 得分 0
//唉哟哟,我的数据库现在也是这个样子,我用的631799(杭州工人) 的方法,可是也解决不了问题,今天本来要发帖子问大家的,结果就看到这个了,还有什么方法没有?
哥们,同情你!我的数据库可是非常重要啊!郁闷…………Top
25 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-08 15:18:52 得分 0
不是哥位,我是女的:)Top
26 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-09 16:37:27 得分 5
SQL Server数据库文件恢复技术
yzhshi(yzhshi@etang.com)
SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,
另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。
本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和
SQL Server Quwey Analyser(SQL Server查询分析器)
1、正常的备份、恢复方式
正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,
然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名
连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件
都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:sp_detach_db 'test'
连接数据库:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'
2、只有mdf文件的恢复技术
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,
但是会出现类似下面的提示信息
设备激活错误。物理文件名 '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 将终止。
设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。
D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。
E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,
在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.设置test为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
G.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。[brown]
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,
那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:
[brown]警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
H.验证数据库一致性(可省略)
dbcc checkdb('test')
一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
I.设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure with override
goTop
27 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-09 16:38:40 得分 0
按上面方法一步一步做,我的现在已经好了:)Top
28 楼sky125(http://ms_sql.home4u.china.com/ )回复于 2005-03-09 17:19:26 得分 0
这类问题很多Top
29 楼wyb0026(小小)回复于 2005-03-09 17:25:45 得分 0
留个脚印以后用的着Top
30 楼pweixing(幸运星)回复于 2005-03-10 11:30:51 得分 0
继续等待!Top
31 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-11 09:40:58 得分 0
不会吧,楼主你怎么还在等待啊?我给你这个办法是我自己验证过的,我的置疑数据库就按这样修好了,你试一下,不要告诉我你只是看过啊Top
32 楼gx(gx)回复于 2005-03-11 13:11:49 得分 0
gzTop
33 楼pweixing(幸运星)回复于 2005-03-11 14:31:31 得分 0
如果上面的可以成功的话,我早修复好了!Top
34 楼ccxxiaoxia(笑看庭前花开花落)回复于 2005-03-22 15:14:30 得分 0
那就怪了,我的好了一直到现在都没有问题Top
35 楼pweixing(幸运星)回复于 2005-04-04 09:53:32 得分 0
最终也没有解决,好在有一个月以前的备份,找几个人重新录入了数据.
唉,结贴Top




