凑合修mdf

新建一个数据库 要求mdf ldf文件要和以前的名字一样,地址最好也一样 选项的CHECKPAGE改为NONE
停掉数据库服务,用原来的MDF文件覆盖这个新的mdf
试运行
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。 use mastergosp_configure ‘allow updates‘,1goreconfigure with overridego
  设置MHDYF2005为紧急修复模式,语句如下: update sysdatabases set status=-32768 where dbid=DB_ID(‘MHDYF2005‘)
  此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表。
  下面执行真正的恢复操作,重建数据库日志文件 dbcc rebuild_log(‘MHDYF2005‘,‘C:\Program Files\Microsoft SQL Server\MSSQL\Data\MHDYF2005_log.ldf‘)

以下关键的
use master
declare @databasename varchar(255)
set @databasename='vtdata'         ---你的.mdf文件文件名
exec sp_dboption @databasename, N'single', N'true' ---将目标数据库置为单用户状态
alter database vst set emergency --将AKS_PM 数据库设为紧急模式。dbcc checkdb(N'vst',REPAIR_ALLOW_DATA_LOSS) --检查数据库 (具备修复)dbcc checkdb(N'vst',REPAIR_REBUILD) exec sp_dboption N'vst', N'single', N'false'--将目标数据库置为多用户状态
会报LDF文件有误或别的什么权限的问题 多按F5运行几次兴许就可以进行运行了

-----------------------------------------------------------------

.我们使用默认方式建立一个供恢复使用的数据库(如MHDYF2005)。可以在SQL Server里面建立。

  2.停掉数据库服务器。

  3.将刚才生成的数据库的日志文件MHDYF2005_log.ldf删除,用要恢复的数据库mdf(yu1.mdf)文件覆盖刚才生成的数据库数据文件MHDYF2005_data.mdf。

  4.启动数据库服务器。(刷新之后)此时会看到数据库MHDYF2005的状态为“置疑”。这时候不要对此数据库进行任何操作。

  5.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。 use mastergosp_configure ‘allow updates‘,1goreconfigure with overridego

  6.设置MHDYF2005为紧急修复模式,语句如下: update sysdatabases set status=-32768 where dbid=DB_ID(‘MHDYF2005‘)

  此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表。

  7.下面执行真正的恢复操作,重建数据库日志文件 dbcc rebuild_log(‘MHDYF2005‘,‘C:\Program Files\Microsoft

  SQL Server\MSSQL\Data\MHDYF2005_log.ldf‘)

  执行过程中,如果遇到下列提示信息: 服务器: 消息 5030,级别 16,状态 1,行 1

  未能排它地锁定数据库以执行该操作。

  DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

  说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了MHDYF2005库的系统表,那么退出SQL Server Enterprise Manager就可以了。

  正确执行完成的提示应该类似于:

  警告: 数据库 ‘MHDYF2005‘ 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

  此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。

  8.验证数据库一致性(可省略),语句如下: dbcc checkdb(‘MHDYF2005‘)

  一般执行结果如下:CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 ‘MHDYF2005‘ 中)。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

  9.设置数据库为正常状态,语句如下: sp_dboption ‘MHDYF2005‘,‘dbo use only‘,‘false‘

  如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。

  10.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成: sp_configure ‘allow updates‘,0goreconfigure with overridego


alter database 你的.mdf文件名 set emergency '--将数据库设置为紧急状态
use master
declare @databasename varchar(255)
set @databasename='你的.mdf文件名'         '--你的.mdf文件文件名
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'--将目标数据库置为多用户状态


不过这些资料不是一点用都没有,从中我还是悟出了一定的道理,经过几番试验以后,通过下面的方法终于把这个千疮百孔的数据库修好了。

1.       在SQL Server Management Studio中随便创建一个数据库,例如:PVLink。

2.       停止SQL Server服务。

如果不停止此服务,刚才创建的PVLink数据库将即不能被拷贝,也不能被覆盖。

3.       把已经损坏的数据库的mdf文件拷贝并覆盖刚才新建的数据库产生的mdf文件。

4.       启动SQL Server服务。

此时可以看见刚才创建的PVLink数据库名字后面没有加号,无法察看其任何信息,其实目前它已经处于无法使用的状态。

5.       把数据库设置为紧急状态。

通过在“查询分析器”中执行:alter database PVLink set EMERGENCY 可以将数据库设置为紧急状态,此时数据库PVLink的图标改变成粉红色并出现“紧急”字样。

6.       将数据库设置为单用户模式。

如果不设置为单用户模式,我们将无法使用带有效repair选项的DBCC CHECKDB来检查/修复数据库,SQL Server 2005设置单用户模式比SQL Server 2000容易,只要在“查询分析器”中执行:

use master

go

sp_dboption 'PVLink',single,true

即可。

7.       修复数据库

修复数据库主要使用DBCC来操作,一般来讲,我们可以使用以下三个选项来修复:

REPAIR_ALLOW_ DATA_LOSS

尝试修复报告的所有错误。这些修复可能会导致一些数据丢失。

REPAIR_FAST

仅为保持向后兼容性而保留。

REPAIR_REBUILD

执行由 REPAIR_FAST 执行的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。

一般我们通过执行:DBCC CHECKDB('PVLink',REPAIR_REBUILD) 即可完成修复工作,此时 SQL Server 2005会给出很多提示,因为这个过程可能会导致一些数据库设计或者数据的丢失,并且在这个过程中,会产生新的以ldf为扩展名的数据库日志文件。

8.       完成以上的步骤后,一般情况下数据库应该可用了,如果数据库此时仍然是紧急状态,可以通过:alter database PVLink set ONLINE ,把数据库变成在线状态。

以上介绍的方法对于通过“附加”的方法无法恢复受到比较严重损坏的数据库比较有效,总的来看,SQL Server 2005给数据库管理和开发提供了更加有效实用的工具和方法。


以前看到网上经常会有人说不能修改MS SQL2005的系统表,我是用这种方法来修改的,不知道和你们说的是否是一个意思呢。

看看是否能解决你们的“不允许对系统目录进行即席更新”的问题。

select * from sysconfigures
select * from sysconfigures where config='1539'
--0 1539 maximum degree of parallelism 3
update sysconfigures set value='1' where config='1539'
--不允许对系统目录进行即席更新。

sp_configure
--allow updates 0 1 0 0
--show advanced options 0 1 1 1
--allow updates 0 1 1 1
EXEC sp_configure 'allow updates', '1'
--下面这句不需要执行,因为默认的是1
EXEC sp_configure 'show advanced option', '1'
--下面的这句要执行,否则它只有等到重启时才会生效
RECONFIGURE WITH OVERRIDE

EXEC sp_configure 'max degree of parallelism' ,'1'
RECONFIGURE WITH OVERRIDE


如果您的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][/i]  
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。  
正确执行完成的提示应该类似于:  
警告: 数据库 '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  
go


一次Project项目平台(PWA)意外停机且配置数据库SharePoint_Config 的LDF被意外删除,如果直接附加MDF文件则无法附加.

先尝试sp_attach_single_file_db恢复,执行如下:

sp_attach_single_file_db 'SharePoint_Config','D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\SharePoint_Config.mdf'
出现错误提示:
文件激活失败。物理文件名称'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\SharePoint_Config_log.LDF'可能不正确。
由于数据库没有完全关闭,无法重新生成日志。
消息 1813,级别 16,状态 2,第 1 行
无法打开新数据库 'SharePoint_Config'。CREATE DATABASE 中止。

然后尝试如下步骤:
1、新建SharePoint_Config 数据库

2、停止SQL SERVER 2005,将原来的SharePoint_Config .mdf数据库文件覆盖刚新建的SharePoint_Config .mdf数据库文件,重新启动数据库,
此时数据库中的表不能正常读取。

3、将数据库设置为紧急状态:

alter database SharePoint_Config set emergency
此时数据处于紧急状态,库中的表可以读取
4、执行如下代码:

use master

declare @databasename varchar(255)

set @databasename='SharePoint_Config'         --设置变量为数据名

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'--将目标数据库置为多用户状态
数据库正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值