sql server mdf文件损坏了如何进行数据库修复
广告:
你已经将数据库分离出来了,但是日志文件太大,大到你没有多余的空间干别的;现在你将日志文件直接删除了,
咱开始新建一个同名数据库,修改数据库为紧急模式;把SQL server服务停掉;用原来的数据库mdf文件把这个同名的mdf文件覆盖掉
启动SQL server服务,执行代码块:单用户模式---->分析数据库--->撤销单用户----->重启SQL server服务------>完成
设为紧急模式
ALTER DATABASE yourdbname SET EMERGENCY
或者
update sysdatabases set status = -32768 where name = 'test'
--可能会提示:不允许对系统目录进行即席更新。
go
ALTER DATABASE yourdbname SET SINGLE_USER
或者
sp_dboption 'test', 'single user', 'true'
dbcc checkdb('test') 验证数据一致性
dbcc checkdb('test') with no_infomsgs --只显示错误信息
DBCC CHECKDB ('test', REPAIR_FAST) --未处理修复语句。当数据库处于紧急模式下时,不支持此级别的修复。
dbcc checkdb('test',REPAIR_REBUILD) --未处理修复语句。当数据库处于紧急模式下时,不支持此级别的修复。
DBCC CheckDB ('test', REPAIR_ALLOW_DATA_LOSS) --支持紧急模式下修复
ALTER DATABASE yourdbname SET MULTI_USER
或者
sp_dboption 'test','dbo use only','false' --设置数据库为正常状态
或者
sp_dboption 'test','single user','false'------撤销单用户模式
恢复挂起---变为紧急模式----关闭服务---删掉日志文件
---启动服务---重新生成日志文件
alter database [test] Rebuild Log on(name=test_log,filename='D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\test_log.LDF')
--重新生成LDF的日志文件
或者
dbcc rebuild_log('test','D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\test_log.LDF')
--重新生成LDF的日志文件
备注:
1 替换mdf文件后,sql server日志提示(打开企业管理器会跳出对话框提示,后台也会记录):
一个或多个文件与数据库的主文件不匹配。如果是尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则文件可能已损坏,应该从备份进行还原。(Microsoft SQL Server,错误: 5173) --表示mdf文件已被替换
2 需要重新打开企业管理器(ssms)会提示恢复挂起
或者在单用户模式下,分离数据库,再附加数据库(附加时只选mdf文件,不选ldf文件),也可以解决。
广告: