SQL Server 2000数据库LDF损坏,只有mdf的恢复方法。
SQL Server 2000数据库文件遭到破坏的现象经常出现,数据库出错是否可以修复呢?答案是可以的,本日志以一个sql server 2000数据库,数据库日志文件ldf损坏了,mdf正常,数据库附加失败的修复方法总结一下,数据库数据恢复在很多时候比较复杂,当数据库存在大量错误的时候,使用DBCC修复也是不可以的,需要拆解数据库来抢救重要的数据,下面是较为常见的一种SQL Server 2000数据库修复方式:
1) 先及时把原来的数据库文件(如testmdf)备份到其他地方。
2) 停掉服务器。
3) 删除这个testmdf。
4) 重新建立一个test同名数据库。
5) 删除这个新建立的test数据库的testldf文件,并用开始备份好testmdf文件覆盖这个新建立的testmdf文件。
6) 启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何 *** 作。
设置数据库允许直接 *** 作系统表。此 *** 作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”。
7) 设置test为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
8) 下面执行真正的恢复 *** 作,重建数据库日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该 *** 作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在 *** 作中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
9) 验证数据库一致性
dbcc checkdb('test')
10设置数据库为正常状态
sp_dboption 'test','dbo use only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
11)最后一步,我们要将步骤6中设置的“允许对系统目录直接修改”一项恢复;
在只有MDF和ldf的情况下进行数据库的备份与恢复。 因病毒问题,用友软件无法正常启动系统管理也不能进入因此无法正常备份数据,这时就要用到附加数据库了通过附加数据库使数据库和用友软件相关联,步骤如下: 1'把用友软件下的ADMIN文件夹下的内容挎出,主要是mdf和ldf文件,就用友通标版2005来说其中包括系统数据UfSystemMDF和UfSystemldf及各账套下的内容 2'重装系统及软件 3'把挎备出来的文件复制回原来的位置 4'通过查询分析器SQL语句附加数据库,或者通过企业管理器/服务器/数据库/右键/附加数据库 来附加数据库。
--sp_attach_db 'ufsystem','D:\UF2000\Admin\ufsystemmdf','D:\UF2000\Admin\ufsystemldf'
//第一行'ufsystem'为系统数据库名,'D:\UF2000\Admin'为物理地址 --sp_detach_db 'ufsystem'
//第二行,在第一行执行时提示ufsystem已经存在,因此要删除ufsystem,但要注意,重做的系统要和之前的系统一样要不就恢复不了。
--sp_attach_db 'ufdata_001_2002','D:\UF2000\Admin\ZT001\2002\ufdatamdf','D:\UF2000\Admin\ZT001\2002\ufdataldf'
//第三行'ufdata_001_2002'为001账套2002的数据库。'D:\UF2000\Admin\ZT001\2002'为物理地址 其它的账套也是如此。>; 另外,用户设置了SQL server 超级用户SA的密码,大家都知道设置SA密码后,当其他软件用到SQL server数据库时是非常不方便的所以要把SA的密码清空 方法是:打开企业管理器,依次打开SQL server组,打开安全性,打开登录,在SA上点右键,选属性,在密码项上清空,依次确定即可。A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_logldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_datamdf
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_logldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该 *** 作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
正确执行完成的提示应该类似于:
警告: 数据库 'test' 的日志已重建。已失去事务的一致性。
应运行 DBCC CHECKDB 以验证物理一致性。
将必须重置数据库选项,并且可能需要删除多余的日志文件。
数据恢复 sql数据库修复 密码恢复
sql数据库恢复 硬盘异响 坏道修复 文件恢复
sql server修复 文件修复
raid数据恢复 sql数据库修复
raid磁盘阵列 sql恢复 sql server恢复
硬盘数据恢复 硬盘坏道修复 硬盘数据修复 数据修复
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
go1、开启数据库
2、从企业管理器,建一个同名的数据库
3、停止sql
server
4、用原mdf文件覆盖新建库的数据库文件
5、重启sql
server(这时数据库应该是置疑)
6、修改服务器设置:允许对系统目录进行直接修改
sp_configure
'allow
updates',1
reconfigure
with
override
7、将数据库置为紧急状态:
update
masterdbosysdatabases
set
status
=
32768
where
name
=
'数据库名'
8、删除新的ldf文件,重建日志:
dbcc
rebuild_log('数据库名',
'f:\数据库名_log_newldf')--假设把新日志在f盘
9、update
masterdbosysdatabases
set
status
=
16
where
name
=
'数据库名'
10、修改服务器设置:取消
允许对系统目录进行直接修改
sp_configure
'allow
updates',
0
reconfigure
with
override
11、再使用检查工具修复错误
use
[数据库名]
alter
database
[数据库名]
set
single_user
with
rollback
immediate
dbcc
checkdb
('数据库名',REPAIR_ALLOW_DATA_LOSS)
alter
database
[数据库名]
set
multi_user
执行完毕之后,如果还有错误,重复执行11,直到没有错误为止。可以在某个文件夹下,新建一个账套,会产生两个文件,也就是你说的mdf数据文件、ldf日志文件,将数据库的服务停止掉,然后将你这两个文件替换掉新的这个文件,再启动数据库服务,打开软件,这样账套就恢复了;
用友比较麻烦,而金额可以将数据库附加的数据库中,有个注册的功能,就好了,相对来说方便点。Windows 7系统自己动手改下注册表就行
文件打开关联被改了但是在这里面却不能选择系统默认的打开方式 改下注册表就能恢复默认了 开始--运行--regedit 打开注册表
找到键HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\FILEXTS\找到你想恢复的那个文件的后缀删除它下面的UserChoice比如修改jpg的打开方式 就找到jpg 你是mdf文件的打开关联被修改了 就找到mdf 删除它下面的UserChoice就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)