请教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 也会有同样原问题, 是否出现取决于你的日志文件中的事务是否已经完全应用
这个联机帮助上已经写了, 不允许
要改非常麻烦
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(另一个程序正在使用此文件,进程无法访问。)"。
--难道要先新建数据库名?
单文件附加: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 日志文件的, 但如果没有, 就不行, 无法保证数据一致性
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、运行下面的命令以恢复数据库:
————————————————————————————————————————————————————————
恢复方法:
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说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?
您的方法已试过,最后一步恢复数据库即提示
文件激活失败。物理文件名称'F:\XACMSDB_BATABACKUP\pwms_log.ldf'可能不正确。
--所以正像zjcxc说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?
#12
一般来说做backup log 的操作可以使未应用的事务写入数据文件, 或者将数据库恢复模型切换到简单模型
当然, 做这些之前, 先保证断开所有用户连接
当然, 做这些之前, 先保证断开所有用户连接
#13
请教 zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。
您刚说,先保证断开所有用户连接。
--在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]
执行如下脚本:
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的方法,谢谢。
--请问针对以上红字错误提示,是否有详细的解决办法?回复加分,谢谢。
再次感谢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下分离前可以断开连接)
SQL Server 错误日志和系统事件没有发现特别提示。
--不过从日志分析,
Setting database option SINGLE_USER to ON for database PWMS. 2008-10-30 18:13:56
接着仍有客户端连接该数据库的错误提示,没有其他特别信息。
--可能像zjcxc说的,mdf 文件有问题。请问 在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接)
#19
在分離—雙擊連接—清除連接
#20
05的數據庫MDF損壞
備份損壞的日志文件
還原以前備份,再通過日志文件還原
備份損壞的日志文件
還原以前備份,再通過日志文件還原
#21
回复roy_88:
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件?
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件?
#22
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)
#23
这个东西要严重关注下
#24
up
#25
帖子已加分,希望前辈们讨论出一些实用的结果。在此,先谢谢大家了。
#26
你附加的是2000的mdf還是2005的mdf?
#27
是2005的mdf。
#28
離線可復制物理文件
#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文件时,是否也有处理方法呢?
--那么数据库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
大家总结
#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
也可以通过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 也会有同样原问题, 是否出现取决于你的日志文件中的事务是否已经完全应用
这个联机帮助上已经写了, 不允许
要改非常麻烦
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(另一个程序正在使用此文件,进程无法访问。)"。
--难道要先新建数据库名?
单文件附加: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 日志文件的, 但如果没有, 就不行, 无法保证数据一致性
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、运行下面的命令以恢复数据库:
————————————————————————————————————————————————————————
恢复方法:
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说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?
您的方法已试过,最后一步恢复数据库即提示
文件激活失败。物理文件名称'F:\XACMSDB_BATABACKUP\pwms_log.ldf'可能不正确。
--所以正像zjcxc说的日志文件中的所有事务是否都应用了。关键是事务即使应用了,现在应该可以直接附加成功;事务没有应用完毕,对此问题应该还有别的处理方式和方法吗?
#12
一般来说做backup log 的操作可以使未应用的事务写入数据文件, 或者将数据库恢复模型切换到简单模型
当然, 做这些之前, 先保证断开所有用户连接
当然, 做这些之前, 先保证断开所有用户连接
#13
请教 zjcxc:
您刚说,先保证断开所有用户连接。
--在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接。
您刚说,先保证断开所有用户连接。
--在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]
执行如下脚本:
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的方法,谢谢。
--请问针对以上红字错误提示,是否有详细的解决办法?回复加分,谢谢。
再次感谢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下分离前可以断开连接)
SQL Server 错误日志和系统事件没有发现特别提示。
--不过从日志分析,
Setting database option SINGLE_USER to ON for database PWMS. 2008-10-30 18:13:56
接着仍有客户端连接该数据库的错误提示,没有其他特别信息。
--可能像zjcxc说的,mdf 文件有问题。请问 在SQL2005中分离数据库时,有个选项是删除连接,此作用不是分离前断开用户的连接吗?(注:因为在2K下分离前可以断开连接)
#19
在分離—雙擊連接—清除連接
#20
05的數據庫MDF損壞
備份損壞的日志文件
還原以前備份,再通過日志文件還原
備份損壞的日志文件
還原以前備份,再通過日志文件還原
#21
回复roy_88:
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件?
请问,当mdf和ldf都处于离线状态,有方法 備份損壞的日志文件?
#22
明天给帖子加分。希望大家讨论出一些实用的结果。
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)
对于SQL2005的分离操作导致数据库文件无法再附加的情况,相信大家都可能遇到。对于数据不重要或者做过备份而言,基本上都会再次新建数据库通过还原的方式处理。但是数据重要且只有mdf和ldf文件的情况下如何恢复呢?
是否遇到 SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确的情况就没有办法了?
希望前辈们深度思考,还有别的办法吗?(注:发帖时出错的数据库暂时通过运营手段处理了)
#23
这个东西要严重关注下
#24
up
#25
帖子已加分,希望前辈们讨论出一些实用的结果。在此,先谢谢大家了。
#26
你附加的是2000的mdf還是2005的mdf?
#27
是2005的mdf。
#28
離線可復制物理文件
#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文件时,是否也有处理方法呢?
--那么数据库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
大家总结
#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
也可以通过for attach_rebuild_log 来重建日志
create database db_test
on(name = 'db_test_data,FILENAME = N'c:\db_test.mdf'')
for attach_rebuild_log ;