前辈们,关于sql server 2005修复数据库的一些疑问,急!

时间:2022-06-21 21:42:37
目前网上关于sql2000上附加mdf和ldf出错的疑问有了一些明确的答复,但本人在SQL2005上附加数据库文件同样出错。
请教zjcxc邹建和所有前辈:
1.在SQL2005下如何修改系统表数据,对于出现"不允许对系统目录进行即席更新"问题如何解决?(注使用 ALTER DATABASE database_name SET EMERGENCY后再修改仍提示出错)
2.在SQL2005下如何自动生成ldf文件?(注因本人试图用mdf文件自动生成ldf还原数据)
--
背景:SQL2005上考试数据库在分离后附加提示出错,有mdf和ldf文件,直接附加提示:文件'G:\pwms_log.ldf'的文件头不是有效的数据库文件头。PageAudit属性不正确。(Microsoft SQL Server ,错误:5172)
--
能及时解决,本人将所有积分散完,谢谢前辈们。

40 个解决方案

#1


遇到了类似的问题,顶一下,搭车求解

#2


关注

#3


1.在SQL2005下如何修改系统表数据,对于出现"不允许对系统目录进行即席更新"问题如何解决?(注使用 ALTER DATABASE database_name SET EMERGENCY后再修改仍提示出错) 

这个联机帮助上已经写了, 不允许
要改非常麻烦


2.在SQL2005下如何自动生成ldf文件?(注因本人试图用mdf文件自动生成ldf还原数据) 
-- 
背景:SQL2005上考试数据库在分离后附加提示出错,有mdf和ldf文件,直接附加提示:文件'G:\pwms_log.ldf'的文件头不是有效的数据库文件头。PageAudit属性不正确。(Microsoft SQL Server ,错误:5172) 

2000 也会有同样原问题, 是否出现取决于你的日志文件中的事务是否已经完全应用

#4


单文件附加:sp_attach_single_file_db

#5



1.联机帮助:
修改 SQL 脚本,以使用正式且有记录的 API。例如,使用 ALTER DATABASE database_name SET EMERGENCY,而不是对 sysdatabases 系统表运行 UPDATE 语句。
--即表明有解决办法了?能否详细说明,对上面的联机说明本人不是很明白。

2.在SQL2005下如何自动生成ldf文件?
网上有一些SQL2000下根据mdf生成ldf的说法,SQL2005下执行dbcc rebuild_log脚本提示语法错误。

#6


回复happyflystone
单文件附加:sp_attach_single_file_db 语句如下:
USE master;
GO
EXEC sp_detach_db @dbname = 'pwms2';
EXEC sp_attach_single_file_db @dbname = 'pwms2', 
    @physname = N'F:\XACMSDB_BATABACKUP\pwms.mdf';
提示:
消息 15010,级别 16,状态 1,过程 sp_detach_db,第 34 行
数据库 'pwms2' 不存在。请使用 sp_helpdb 来显示可用的数据库。
消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件 "F:\XACMSDB_BATABACKUP\pwms.mdf"。操作系统错误 32:"32(另一个程序正在使用此文件,进程无法访问。)"。
--难道要先新建数据库名?

#7


1. 意思是让你使用联机帮助上有说明的语句(官方正式公布的东西), 而不是直接更新系统对象

2. 如果你的日志文件中的所有事务都应用了, 当然是可以 rebuild 日志文件的, 但如果没有, 就不行, 无法保证数据一致性

#8


TRY: 
———————————————————————————————————————————————————————— 
恢复方法: 

1、停止数据库服务。 

2、将需要恢复的数据库文件复制到另外的位置。 

3、启动数据库服务。 

4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。 

5、新建同名的数据库(数据库文件名也要相同)。 

6、停止数据库服务。 

7、用第2步中备份的.mdf文件覆盖新数据库的同名文件。 

8、启动数据库服务。 

9、运行alter database dbname set emergency,将数据库设置为emergency mode 

10、运行下面的命令以恢复数据库: 

use master 

declare @databasename varchar(255) 

set @databasename='要恢复的数据库名称' 

exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 

dbcc checkdb(@databasename,REPAIR_REBUILD) 

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 

#9


例如, 下面的测试是一个新库, 日志文件中不存在未应用的日志的问题, 可以在删除了 ldf 文件的情况下附加成功的

USE master;
GO

CREATE DATABASE db_test
ON(
NAME = db_test_data,
FILENAME = N'c:\db_test.mdf')
LOG ON(
NAME = db_test_log,
FILENAME = N'c:\db_test.ldf');
GO

EXEC sp_detach_db N'db_test';
GO

EXEC xp_cmdshell 'del c:\db_test.ldf';
GO

EXEC sp_attach_single_file_db
N'db_test',
N'c:\db_test.mdf';
GO

DROP DATABASE db_test;

/*-- 结果:
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。

(1 行受影响)
文件激活失败。物理文件名称'c:\db_test.ldf'可能不正确。
新的日志文件 'c:\db_test_log.LDF' 已创建。

--*/

#10


老大来了,学习。

#11


回复wufeng4552
您的方法已试过,最后一步恢复数据库即提示
文件激活失败。物理文件名称'F:\XACMSDB_BATABACKUP\pwms_log.ldf'可能不正确。
--所以正像zjcxc说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?

#12


一般来说做backup log 的操作可以使未应用的事务写入数据文件, 或者将数据库恢复模型切换到简单模型
当然, 做这些之前, 先保证断开所有用户连接

#13


请教   zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。

#14


回复zjcxc:
执行如下脚本:
EXEC sp_attach_single_file_db
    N'pwms2',
    N'F:\PWMSDATA\pwms.mdf';
GO
--已经创建日志文件,但仍提示出错,帮忙分析原因看是否有解决办法,多谢。
出错消息如下:
文件激活失败。物理文件名称'E:\PWMSDATA\PWMS_log.ldf'可能不正确。
新的日志文件 'F:\PWMSDATA\pwms_log.LDF' 已创建。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'pwms'。CREATE DATABASE 中止。
消息 824,级别 24,状态 2,第 1 行
SQL Server 检测到[color=#FF0000]
基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
[/color]

#15


从错误提示看, 是你的 mdf 文件有问题呢

#16


SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。
再次感谢zjcxc介绍了 如何在SQL2005下根据mdf自动生成ldf的方法,谢谢。
--请问针对以上红字错误提示,是否有详细的解决办法?回复加分,谢谢。

#17


看看SQL Server 错误日志或系统事件日志中有什么提示

#18


回复happyflystone:
SQL Server 错误日志和系统事件没有发现特别提示。
--不过从日志分析,
Setting database option SINGLE_USER to ON for database PWMS. 2008-10-30 18:13:56
接着仍有客户端连接该数据库的错误提示,没有其他特别信息。
--可能像zjcxc说的,mdf 文件有问题。请问 在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接) 

#19


引用 13 楼 claro 的回复:
请教   zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。


在分離—雙擊連接—清除連接

#20


05的數據庫MDF損壞

備份損壞的日志文件
還原以前備份,再通過日志文件還原 

#21


回复roy_88:
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件

#22


明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)

#23


这个东西要严重关注下

#24


up

#25


引用 22 楼 claro 的回复:
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?

帖子已加分,希望前辈们讨论出一些实用的结果。在此,先谢谢大家了。

#26


引用楼主 claro 的帖子:
目前网上关于sql2000上附加mdf和ldf出错的疑问有了一些明确的答复,但本人在SQL2005上附加数据库文件同样出错。 
请教zjcxc邹建和所有前辈: 
1.在SQL2005下如何修改系统表数据,对于出现"不允许对系统目录进行即席更新"问题如何解决?(注使用 ALTER DATABASE database_name SET EMERGENCY后再修改仍提示出错) 
2.在SQL2005下如何自动生成ldf文件?(注因本人试图用mdf文件自动生成ldf还原数据) 
-- 
背景:SQL2005上考试…

你附加的是2000的mdf還是2005的mdf?

#27


引用 26 楼 wufeng4552 的回复:
你附加的是2000的mdf還是2005的mdf?

是2005的mdf。

#28


引用 22 楼 claro 的回复:
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时…


離線可復制物理文件

#29


mark

#30


希望关注25楼问题。

#31


看赵伟涛编写《SQL2005奥秘》一书中提到数据存储的一些有用信息,看来对于数据库故障的案例关注的人太少,希望不要像我一样遇到问题再满世界找答案。

#32


SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库 
1)SQL Server 2005数据库删除日志文件

DUMP  TRANSACTION  DatabaseName WITH  NO_LOG;declare @fileid int;select 

@fileid=fileid from sysfiles where name like '%Log';dbcc shrinkfile(@fileid)



2)在某些偶然的情况下,会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障、计算机非正常重启或关机。
当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况:
1、在SQL Server Management Studio中显示数据库处于置疑(suspect)状态。
2、事件日志可能会出现如下错误信息:
   Could not redo log record (21737:686:9), for transaction ID (0:2334886), on page (1:37527), database 'Test' (database ID 15). Page: LSN = (21735:299:5), type = 2. Log: OpCode = 3, context 19, PrevPageLSN: (21737:615:1). Restore from a backup of the database, or repair the database.

   During redoing of a logged operation in database 'Test', an error occurred at log record ID (76116:286:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database. 
3、无法分离数据库
4、用CREATE DATABASE DBName ON ( FILENAME = N'DBFile' )  FOR ATTACH_REBUILD_LOG附加数据库时出现提示:The log cannot be rebuilt because the database was not cleanly shut down.

恢复方法:
1、停止数据库服务。
2、将需要恢复的数据库文件复制到另外的位置。
3、启动数据库服务。
4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。
5、新建同名的数据库(数据库文件名也要相同)。
6、停止数据库服务。
7、用第2步中备份的.mdf文件覆盖新数据库的同名文件。
8、启动数据库服务。
9、运行alter database dbname set emergency,将数据库设置为emergency mode
10、运行下面的命令就可以恢复数据库:


use master 

declare @databasename varchar(255) 

set @databasename='要恢复的数据库名称' 

exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 

dbcc checkdb(@databasename,REPAIR_REBUILD) 

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 

上面的方法是通过.mdf文件恢复数据库,即使log文件丢失也可以恢复。

#33


感谢linguojin11给出了数据库修复时,对于日志文件损坏或丢失的情况,如何处理的方法。
--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。 】),而有ldf文件时,是否也有处理方法呢?

#34


学习了。

#35


前辈关注33楼问题。(本人问题已解决,希望大家探讨问题总结经验)

#36


引用 33 楼
感谢linguojin11给出了数据库修复时,对于日志文件损坏或丢失的情况,如何处理的方法。
--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。】),而有ldf文件时,是否也有处理方法呢?
------------------------------------------------------

大家总结

#37


up

#38


--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。 】),而有ldf文件时,是否也有处理方法呢?
我已经解决了,哈哈,搞了一个晚上终于给我搞定了,数据找回来了,哎,真是辛苦啊。

#39


请问楼上的怎么搞定的?

#40


引用 9 楼 zjcxc 的回复:
例如, 下面的测试是一个新库, 日志文件中不存在未应用的日志的问题, 可以在删除了 ldf 文件的情况下附加成功的

SQL codeUSE master;
GO

CREATE DATABASE db_test
ON(
NAME = db_test_data,
FILENAME = N'c:\db_test.mdf')
LOG ON(
NAME = db_test_log,
FILENAME = N'c:\db_test.ldf');
GO

EXEC sp_detach_db N'db_test';
GO

EXEC xp_cmdshell 'del c:\db_test.ldf';
GO

EXEC sp_attach_single_file_db
N'db_test',
N'c:\db_test.mdf';
GO

DROP DATABASE db_test;

/*-- 结果:
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。

(1 行受影响)
文件激活失败。物理文件名称'c:\db_test.ldf'可能不正确。
新的日志文件 'c:\db_test_log.LDF' 已创建。

--*/


也可以通过for attach_rebuild_log 来重建日志

create database db_test
  on(name = 'db_test_data,FILENAME = N'c:\db_test.mdf'')
for attach_rebuild_log ;

#1


遇到了类似的问题,顶一下,搭车求解

#2


关注

#3


1.在SQL2005下如何修改系统表数据,对于出现"不允许对系统目录进行即席更新"问题如何解决?(注使用 ALTER DATABASE database_name SET EMERGENCY后再修改仍提示出错) 

这个联机帮助上已经写了, 不允许
要改非常麻烦


2.在SQL2005下如何自动生成ldf文件?(注因本人试图用mdf文件自动生成ldf还原数据) 
-- 
背景:SQL2005上考试数据库在分离后附加提示出错,有mdf和ldf文件,直接附加提示:文件'G:\pwms_log.ldf'的文件头不是有效的数据库文件头。PageAudit属性不正确。(Microsoft SQL Server ,错误:5172) 

2000 也会有同样原问题, 是否出现取决于你的日志文件中的事务是否已经完全应用

#4


单文件附加:sp_attach_single_file_db

#5



1.联机帮助:
修改 SQL 脚本,以使用正式且有记录的 API。例如,使用 ALTER DATABASE database_name SET EMERGENCY,而不是对 sysdatabases 系统表运行 UPDATE 语句。
--即表明有解决办法了?能否详细说明,对上面的联机说明本人不是很明白。

2.在SQL2005下如何自动生成ldf文件?
网上有一些SQL2000下根据mdf生成ldf的说法,SQL2005下执行dbcc rebuild_log脚本提示语法错误。

#6


回复happyflystone
单文件附加:sp_attach_single_file_db 语句如下:
USE master;
GO
EXEC sp_detach_db @dbname = 'pwms2';
EXEC sp_attach_single_file_db @dbname = 'pwms2', 
    @physname = N'F:\XACMSDB_BATABACKUP\pwms.mdf';
提示:
消息 15010,级别 16,状态 1,过程 sp_detach_db,第 34 行
数据库 'pwms2' 不存在。请使用 sp_helpdb 来显示可用的数据库。
消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件 "F:\XACMSDB_BATABACKUP\pwms.mdf"。操作系统错误 32:"32(另一个程序正在使用此文件,进程无法访问。)"。
--难道要先新建数据库名?

#7


1. 意思是让你使用联机帮助上有说明的语句(官方正式公布的东西), 而不是直接更新系统对象

2. 如果你的日志文件中的所有事务都应用了, 当然是可以 rebuild 日志文件的, 但如果没有, 就不行, 无法保证数据一致性

#8


TRY: 
———————————————————————————————————————————————————————— 
恢复方法: 

1、停止数据库服务。 

2、将需要恢复的数据库文件复制到另外的位置。 

3、启动数据库服务。 

4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。 

5、新建同名的数据库(数据库文件名也要相同)。 

6、停止数据库服务。 

7、用第2步中备份的.mdf文件覆盖新数据库的同名文件。 

8、启动数据库服务。 

9、运行alter database dbname set emergency,将数据库设置为emergency mode 

10、运行下面的命令以恢复数据库: 

use master 

declare @databasename varchar(255) 

set @databasename='要恢复的数据库名称' 

exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 

dbcc checkdb(@databasename,REPAIR_REBUILD) 

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 

#9


例如, 下面的测试是一个新库, 日志文件中不存在未应用的日志的问题, 可以在删除了 ldf 文件的情况下附加成功的

USE master;
GO

CREATE DATABASE db_test
ON(
NAME = db_test_data,
FILENAME = N'c:\db_test.mdf')
LOG ON(
NAME = db_test_log,
FILENAME = N'c:\db_test.ldf');
GO

EXEC sp_detach_db N'db_test';
GO

EXEC xp_cmdshell 'del c:\db_test.ldf';
GO

EXEC sp_attach_single_file_db
N'db_test',
N'c:\db_test.mdf';
GO

DROP DATABASE db_test;

/*-- 结果:
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。

(1 行受影响)
文件激活失败。物理文件名称'c:\db_test.ldf'可能不正确。
新的日志文件 'c:\db_test_log.LDF' 已创建。

--*/

#10


老大来了,学习。

#11


回复wufeng4552
您的方法已试过,最后一步恢复数据库即提示
文件激活失败。物理文件名称'F:\XACMSDB_BATABACKUP\pwms_log.ldf'可能不正确。
--所以正像zjcxc说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?

#12


一般来说做backup log 的操作可以使未应用的事务写入数据文件, 或者将数据库恢复模型切换到简单模型
当然, 做这些之前, 先保证断开所有用户连接

#13


请教   zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。

#14


回复zjcxc:
执行如下脚本:
EXEC sp_attach_single_file_db
    N'pwms2',
    N'F:\PWMSDATA\pwms.mdf';
GO
--已经创建日志文件,但仍提示出错,帮忙分析原因看是否有解决办法,多谢。
出错消息如下:
文件激活失败。物理文件名称'E:\PWMSDATA\PWMS_log.ldf'可能不正确。
新的日志文件 'F:\PWMSDATA\pwms_log.LDF' 已创建。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'pwms'。CREATE DATABASE 中止。
消息 824,级别 24,状态 2,第 1 行
SQL Server 检测到[color=#FF0000]
基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
[/color]

#15


从错误提示看, 是你的 mdf 文件有问题呢

#16


SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。
再次感谢zjcxc介绍了 如何在SQL2005下根据mdf自动生成ldf的方法,谢谢。
--请问针对以上红字错误提示,是否有详细的解决办法?回复加分,谢谢。

#17


看看SQL Server 错误日志或系统事件日志中有什么提示

#18


回复happyflystone:
SQL Server 错误日志和系统事件没有发现特别提示。
--不过从日志分析,
Setting database option SINGLE_USER to ON for database PWMS. 2008-10-30 18:13:56
接着仍有客户端连接该数据库的错误提示,没有其他特别信息。
--可能像zjcxc说的,mdf 文件有问题。请问 在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接) 

#19


引用 13 楼 claro 的回复:
请教   zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。


在分離—雙擊連接—清除連接

#20


05的數據庫MDF損壞

備份損壞的日志文件
還原以前備份,再通過日志文件還原 

#21


回复roy_88:
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件

#22


明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)

#23


这个东西要严重关注下

#24


up

#25


引用 22 楼 claro 的回复:
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?

帖子已加分,希望前辈们讨论出一些实用的结果。在此,先谢谢大家了。

#26


引用楼主 claro 的帖子:
目前网上关于sql2000上附加mdf和ldf出错的疑问有了一些明确的答复,但本人在SQL2005上附加数据库文件同样出错。 
请教zjcxc邹建和所有前辈: 
1.在SQL2005下如何修改系统表数据,对于出现"不允许对系统目录进行即席更新"问题如何解决?(注使用 ALTER DATABASE database_name SET EMERGENCY后再修改仍提示出错) 
2.在SQL2005下如何自动生成ldf文件?(注因本人试图用mdf文件自动生成ldf还原数据) 
-- 
背景:SQL2005上考试…

你附加的是2000的mdf還是2005的mdf?

#27


引用 26 楼 wufeng4552 的回复:
你附加的是2000的mdf還是2005的mdf?

是2005的mdf。

#28


引用 22 楼 claro 的回复:
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时…


離線可復制物理文件

#29


mark

#30


希望关注25楼问题。

#31


看赵伟涛编写《SQL2005奥秘》一书中提到数据存储的一些有用信息,看来对于数据库故障的案例关注的人太少,希望不要像我一样遇到问题再满世界找答案。

#32


SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库 
1)SQL Server 2005数据库删除日志文件

DUMP  TRANSACTION  DatabaseName WITH  NO_LOG;declare @fileid int;select 

@fileid=fileid from sysfiles where name like '%Log';dbcc shrinkfile(@fileid)



2)在某些偶然的情况下,会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障、计算机非正常重启或关机。
当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况:
1、在SQL Server Management Studio中显示数据库处于置疑(suspect)状态。
2、事件日志可能会出现如下错误信息:
   Could not redo log record (21737:686:9), for transaction ID (0:2334886), on page (1:37527), database 'Test' (database ID 15). Page: LSN = (21735:299:5), type = 2. Log: OpCode = 3, context 19, PrevPageLSN: (21737:615:1). Restore from a backup of the database, or repair the database.

   During redoing of a logged operation in database 'Test', an error occurred at log record ID (76116:286:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database. 
3、无法分离数据库
4、用CREATE DATABASE DBName ON ( FILENAME = N'DBFile' )  FOR ATTACH_REBUILD_LOG附加数据库时出现提示:The log cannot be rebuilt because the database was not cleanly shut down.

恢复方法:
1、停止数据库服务。
2、将需要恢复的数据库文件复制到另外的位置。
3、启动数据库服务。
4、确认要恢复的数据库文件已经成功复制到另外的位置,然后在SQL Server Management Studio中删除要恢复的数据库。
5、新建同名的数据库(数据库文件名也要相同)。
6、停止数据库服务。
7、用第2步中备份的.mdf文件覆盖新数据库的同名文件。
8、启动数据库服务。
9、运行alter database dbname set emergency,将数据库设置为emergency mode
10、运行下面的命令就可以恢复数据库:


use master 

declare @databasename varchar(255) 

set @databasename='要恢复的数据库名称' 

exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 

dbcc checkdb(@databasename,REPAIR_REBUILD) 

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 

上面的方法是通过.mdf文件恢复数据库,即使log文件丢失也可以恢复。

#33


感谢linguojin11给出了数据库修复时,对于日志文件损坏或丢失的情况,如何处理的方法。
--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。 】),而有ldf文件时,是否也有处理方法呢?

#34


学习了。

#35


前辈关注33楼问题。(本人问题已解决,希望大家探讨问题总结经验)

#36


引用 33 楼
感谢linguojin11给出了数据库修复时,对于日志文件损坏或丢失的情况,如何处理的方法。
--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。】),而有ldf文件时,是否也有处理方法呢?
------------------------------------------------------

大家总结

#37


up

#38


--那么数据库mdf出现异常(比如zjcxc前辈推断mdf有问题【 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:199998,但实际为 0:0)。在文件 'F:\PWMSDATA\pwms.mdf' 中、偏移量为 0x00000061a7c000 的位置对数据库 ID 15 中的页 (1:199998) 执行 读取 期间,发生了该错误。 】),而有ldf文件时,是否也有处理方法呢?
我已经解决了,哈哈,搞了一个晚上终于给我搞定了,数据找回来了,哎,真是辛苦啊。

#39


请问楼上的怎么搞定的?

#40


引用 9 楼 zjcxc 的回复:
例如, 下面的测试是一个新库, 日志文件中不存在未应用的日志的问题, 可以在删除了 ldf 文件的情况下附加成功的

SQL codeUSE master;
GO

CREATE DATABASE db_test
ON(
NAME = db_test_data,
FILENAME = N'c:\db_test.mdf')
LOG ON(
NAME = db_test_log,
FILENAME = N'c:\db_test.ldf');
GO

EXEC sp_detach_db N'db_test';
GO

EXEC xp_cmdshell 'del c:\db_test.ldf';
GO

EXEC sp_attach_single_file_db
N'db_test',
N'c:\db_test.mdf';
GO

DROP DATABASE db_test;

/*-- 结果:
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'xp_cmdshell' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。

(1 行受影响)
文件激活失败。物理文件名称'c:\db_test.ldf'可能不正确。
新的日志文件 'c:\db_test_log.LDF' 已创建。

--*/


也可以通过for attach_rebuild_log 来重建日志

create database db_test
  on(name = 'db_test_data,FILENAME = N'c:\db_test.mdf'')
for attach_rebuild_log ;