数据库变为置疑,可能是日志文件损坏造成的,有无办法恢复?

pgpga 2004-12-01 08:36:10
以前运行正常的数据库,突然变为置疑。而磁盘空间还很大,我怀疑是日志文件损坏造成的。
数据库数据文件picturedata.mdf,picture1.ndf,picture2.ndf,日志文件picturelog.ldf,
建库sql为:
USE master
GO

CREATE DATABASE PICTURE
ON PRIMARY
( NAME = PICTURE_Data,
FILENAME = 'K:\DB Files\picturedata.mdf',
SIZE = 10,
MAXSIZE = 500,
FILEGROWTH = 5 ),
FILEGROUP SECONDARY
( NAME = PICTURE_1,
FILENAME = 'K:\DB Files\picture1.ndf',
SIZE = 10,
MAXSIZE = 500,
FILEGROWTH = 5),
( NAME = PICTURE_2,
FILENAME = 'K:\DB Files\picture2.ndf',
SIZE = 10,
MAXSIZE = 500,
FILEGROWTH = 5)
LOG ON
( NAME = PICTURE_Log,
FILENAME = 'K:\DB Files\picturelog.ldf',
SIZE = 5,
MAXSIZE = 400,
FILEGROWTH = 5 )
COLLATE Chinese_PRC_CS_AS
GO

EXEC sp_addlogin 'TPU', 'renzheng', 'PICTURE', 'Simplified Chinese'
EXEC sp_addsrvrolemember 'TPU', 'dbcreator'

USE PICTURE
GO

EXEC sp_changedbowner 'TPU'

EXEC sp_grantdbaccess guest

我试过有关解决置疑问题的帖子中的方法,都不行。我的数据库为sql server2000请各位指点。
...全文
492 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
pgpga 2004-12-13
  • 打赏
  • 举报
回复
搞定了,谢谢各位。
huazf 2004-12-02
  • 打赏
  • 举报
回复
专业提供SQL SERVER 修复,SQL恢复,误删除表,SQL 数据恢复,SQL SERVER 数据库恢复修复,SQL 找回业务。
QQ:386999
TEL:0576-2454863
prcgolf 2004-12-02
  • 打赏
  • 举报
回复
up
pgpga 2004-12-02
  • 打赏
  • 举报
回复
还是没搞定,现在的情况是我手头只有数据文件picturedata.mdf,picture1.ndf,picture2.ndf,日志文件picturelog.ldf,和前2个月的一个备份,能不能恢复出最近的数据啊?
cheny1234 2004-12-02
  • 打赏
  • 举报
回复
以前有备份啊,有没有试过用NO_TRUNCATE备份日志,然后再还原呢?


NO_TRUNCATE

允许在数据库损坏时备份日志。
huazf 2004-12-01
  • 打赏
  • 举报
回复
QQ:386999 验证码:SQLSERVER数据库修复
TEL:0576-2454863
可以联系我,我可以帮你解决
mingzaili 2004-12-01
  • 打赏
  • 举报
回复
collection
pgpga 2004-12-01
  • 打赏
  • 举报
回复
To cheny1234(咩):
数据库已置疑,分离时报错“错误: 947,干净地关闭数据库 'PICTURE' 时出错。”
应如何“分离数据库”?能否列出操作步骤?

To jingxijun(一笑):
我试过执行以下语句:
EXEC sp_attach_db @dbname = N'PICTURE',
@filename1 = N'e:\DB Files\picturedata.mdf',
@filename2 = N'e:\DB Files\picture1.ndf',
@filename3 = N'e:\DB Files\picture2.ndf',
@filename4 = N'e:\DB Files\picturelog.ldf'
但报错“服务器: 消息 5173,级别 16,状态 2,行 1
不能使文件与不同的数据库相关。”

不附加日志,执行
EXEC sp_attach_db @dbname = N'PICTURE',
@filename1 = N'e:\DB Files\picturedata.mdf',
@filename2 = N'e:\DB Files\picture1.ndf',
@filename3 = N'e:\DB Files\picture2.ndf'
报错:
服务器: 消息 5173,级别 16,状态 1,行 1
不能使文件与不同的数据库相关。
服务器: 消息 1813,级别 16,状态 1,行 1
未能打开新数据库 'PICTURE'。CREATE DATABASE 将终止。
日志文件 'E:\DB Files\picturelog.ldf' 与主文件不匹配。可能该文件来自另一个数据库,也可能先前曾重建过该日志。

jingxijun 2004-12-01
  • 打赏
  • 举报
回复
日志可以不恢复的
cheny1234 2004-12-01
  • 打赏
  • 举报
回复
如果数据文件没损坏,分离数据库,删除日志文件,附加数据库,数据就回来了。
pgpga 2004-12-01
  • 打赏
  • 举报
回复
To cheny1234(咩):
我只是猜测“可能是日志文件损坏”。由于没有做备份,所以无法直接恢复,但数据文件和日志文件都有,不过可能有问题,不知能不能恢复或是把里面的数据取出来?
cheny1234 2004-12-01
  • 打赏
  • 举报
回复
根据什么判断“可能是日志文件损坏”?
如果是数据文件损坏,又有做完全备份,会容易恢复一些,
俺的水平只会这种,呵呵。
pgpga 2004-12-01
  • 打赏
  • 举报
回复
To jingxijun(一笑) :
我把出现置疑数据库机器上的picturedata.mdf,picture1.ndf,picture2.ndf,picturelog.ldf考到自己的机器上,建立同名的数据库,使用的建库sql也完全一样,当把picturedata.mdf,picture1.ndf,picture2.ndf覆盖过来后,又出现的置疑。
右键置疑状态的数据库-->所有任务-->脱机
报“错误: 947,严重度: 16,状态: 1
干净地关闭数据库 'PICTURE' 时出错。
ALTER DATABASE 语句失败,
sp_dboption命令失败。
syilo 2004-12-01
  • 打赏
  • 举报
回复
关注!
jingxijun 2004-12-01
  • 打赏
  • 举报
回复
转载:
数据库suspect后如何进行恢复
右键置疑状态的数据库-->所有任务-->脱机
右键脱机状态的数据库-->所有任务-->联机

这个问题比较复杂,引起的原因页很多。另外,你备份后的数据如果是在置疑之后备份的恢复之后也是置疑的。
数据库置疑之后,你可以查看系统数据库maseter中的sysdatabase中的status列,如果该列值是256表示置疑
你可以手工恢复
必须以sa登陆
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_resetstatus
go

update sysdatabase
set status = status -256
where dbname="your database name here"
and status&256= 256(或者直接写256)
go
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_resetstatus
go
这样一般能恢复

如果还不行:

重置置疑状态
如果 SQL Server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么
Microsoft? SQL Server? 2000 会返回错误 1105 并且将 sysdatabases 中的 status
列设为置疑。按下面的步骤解决这个问题:

1.. 执行 sp_resetstatus。


2.. 用 ALTER DATABASE 向数据库添加一个数据文件或日志文件。


3.. 停止并重新启动 SQL Server。
用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢
复。

4.. 释放磁盘空间并且重新运行恢复操作。
sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。



注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用
sp_resetstatus。否则,可能会损坏数据库。


由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启
用更新,使用下面的过程:

USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
过程创建后,立即禁用系统表更新:

sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。

语法为:

sp_resetstatus database_name

下面的例子将关闭 PRODUCTION 数据库的置疑标志。

sp_resetstatus PRODUCTION
下面是结果集:

Database 'PRODUCTION' status reset!
WARNING: You must reboot SQL Server prior to accessing this database!
sp_resetstatus 存储过程代码
下面是 sp_resetstatus 存储过程的代码:

IF EXISTS ( SELECT * from sysobjects where name = 'sp_resetstatus' )
DROP PROCEDURE sp_resetstatus
GO

CREATE PROC sp_resetstatus @dbname varchar(30) AS
DECLARE @msg varchar(80)
IF @@trancount > 0
BEGIN
PRINT 'Can''t run sp_resetstatus from within a transaction.'
RETURN (1)
END
IF suser_id() != 1
BEGIN
SELECT @msg = 'You must be the System Administrator (SA)'
SELECT @msg = @msg + ' to execute this procedure.'
RETURN (1)
END
IF (SELECT COUNT(*) FROM master..sysdatabases
WHERE name = @dbname) != 1
BEGIN
SELECT @msg = 'Database ' + @dbname + ' does not exist!'
PRINT @msg
RETURN (1)
END
IF (SELECT COUNT(*) FROM master..sysdatabases
WHERE name = @dbname AND status & 256 = 256) != 1
BEGIN
PRINT 'sp_resetstatus can only be run on suspect databases.'
RETURN (1)
END
BEGIN TRAN
UPDATE master..sysdatabases SET status = status ^ 256
WHERE name = @dbname
IF @@error != 0 OR @@rowcount != 1
ROLLBACK TRAN
ELSE
BEGIN
COMMIT TRAN
SELECT @msg = 'Database ' + @dbname + ' status reset!'
PRINT @msg
PRINT ''
PRINT 'WARNING: You must reboot SQL Server prior to '
PRINT ' accessing this database!'
PRINT ''
END
GO
pgpga 2004-12-01
  • 打赏
  • 举报
回复
使用以下方法:
1.新建一个同名的数据库

  2.再停掉sql server(注意不要分离数据库)

  3.用原数据库的数据文件覆盖掉这个新建的数据库

  4.再重启sql server

  5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

  6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
  数据库的脚本创建一个新的数据库,并将数据导进去就行了.

USE master
GO
sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
GO

UPDATE sysdatabases SET status =32768 WHERE name='PICTURE'
Go

sp_dboption 'PICTURE', 'single user', 'true'
Go

DBCC CHECKDB('PICTURE')
Go

update sysdatabases set status =28 where name='PICTURE'
Go

sp_configure 'allow updates', 0 reconfigure with override
Go

sp_dboption 'PICTURE', 'single user', 'false'
Go

在执行第五步的语句时出现如下信息,应如何解决?

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

(所影响的行数为 1 行)

服务器: 消息 8966,级别 16,状态 1,行 2
未能读取并闩锁页 (1:98)(用闩锁类型 SH)。sysindexes 失败。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。
pgpga 2004-12-01
  • 打赏
  • 举报
回复
To cheny1234(咩):
你所指的picture应该是置疑的数据库吧
右键置疑状态的数据库-->所有任务-->脱机
报“错误: 947,严重度: 16,状态: 1
干净地关闭数据库 'PICTURE' 时出错。
ALTER DATABASE 语句失败,
sp_dboption命令失败。
vinsonshen 2004-12-01
  • 打赏
  • 举报
回复
帮你顶~~
pgpga 2004-12-01
  • 打赏
  • 举报
回复
我用picturedata.mdf,picture1.ndf,picture2.ndf,picturelog.ldf直接附加数据库,数据库图标显示为灰色的“PICTURE(只读)”,除关系图和表内容为空,其它内容都有。
停掉sql server服务再启动,数据库图标显示为灰色的“PICTURE(置疑)”

执行完
USE master
GO
sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
GO

UPDATE sysdatabases SET status =32768 WHERE name='PICTURE'
Go

sp_dboption 'PICTURE', 'single user', 'true'
Go

DBCC CHECKDB('PICTURE')
Go

update sysdatabases set status =28 where name='PICTURE'
Go

sp_configure 'allow updates', 0 reconfigure with override
Go

sp_dboption 'PICTURE', 'single user', 'false'
Go

依然报如下错:
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'allow updates' 从 1 改为 1。请运行 RECONFIGURE 语句以安装。

(所影响的行数为 1 行)

服务器: 消息 8966,级别 16,状态 1,行 2
未能读取并闩锁页 (1:98)(用闩锁类型 SH)。sysindexes 失败。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

(所影响的行数为 1 行)

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。

但是此时数据库图标显示正常,但访问关系图和表报“错误:823”
jingxijun 2004-12-01
  • 打赏
  • 举报
回复
不能使文件与不同的数据库相关。”

若恢复后的数据库的路径改了,需参考如下,
最好是数据库名及其逻辑文件名、物理文件名都和原先一样(数据库名注意大小写)
1。先查出数据库中有几个逻辑文件名:
RESTORE FILELISTONLY
FROM DISK = 'd:\sql2000data\mssql\backup\jz30data'
结果是:
LogicalName PhysicalName
jz30data_data D:\Program Files\Microsoft SQL Server\MSSQL\data\jz30data.mdf
jz30data_log D:\Program Files\Microsoft SQL Server\MSSQL\data\jz30data.ldf

2、然后恢复(同时移动物理文件到SQL目录下'd:\sql2000data\mssql\Data\)
RESTORE DATABASE jz30data
from DISK = 'd:\sql2000data\mssql\backup\jz30data'
WITH NORECOVERY,
MOVE 'jz30data_data' TO 'd:\sql2000data\mssql\Data\jz30data.mdf',
MOVE 'jz30data_log' TO 'd:\sql2000data\mssql\Data\jz30data.ldf'

3
恢复完后,可能会出现:这个数据库 显示灰色,“正在连接中”
再执行如下就可以了:
restore database jz30data WITH RECOVERY
加载更多回复(1)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧