教你轻松恢复/修复SQL Server的MDF文件

首先:如果备份的数据库有两个文件,分别是.LDF 和 .MDF,打开企业管理器,在实例上右击---所有任务--附加数据库,然后选择那个.MDF文件,就可以了。

或者在查询分析器中输入:

代码如下:

sp_attach_db "数据库名称","路径\文件名.ldf","路径\文件名.MDF"

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您 能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)。

1.正常的备份、恢复方式0

正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。

卸下数据库的命令:Sp_detach_db 数据库名

代码如下:

连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] 'dbname',
[@filename1 =] 'filename_n' [,...16]
sp_attach_single_file_db [@dbname =]
'dbname', [@physname =] 'physical_name'

使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

例子:

假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。下面我们讨论一下如何备份、恢复该数据库。

代码如下:

卸下数据库:sp_detach_db 'test'
连接数据库:sp_attach_db 'test','
C:\Program Files\Microsoft SQL Server\MSSQL
\Data\test_data.mdf','C:\Program Files
\Microsoft SQL Server\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db 'test','
C:\Program Files\Microsoft SQL Server\MSSQL
\Data\test_data.mdf'

2.只有mdf文件的恢复技术

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。

如果您的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
服务器: 消息 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里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。

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 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在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中设置的“允许对系统目录直接修改”一项恢复。

(0)

相关推荐

  • sqlserver只有MDF文件恢复数据库的方法

    在查询中执行下列语句 EXEC sp_attach_single_file_db @dbname = 'tggov_Data', @physname = 'E:\tggov_Data\www.jb51.net.MDF' 'tggov_Data' 为恢复的数据库名 'E:\tggov_Data\tggov_Data.MDF' 物理文件位置

  • sqlserver附加.mdf权限问题解决

    问题:数据库附加.mdf文件时,提示无法打开物理文件,操作系统错误5:"5(拒绝访问)" 错误:5120. 解决方案: 数据库当前账户对存放.mdf文件的文件夹权限不足,该文件夹权限角色加入Everyone.并赋予读写权限即可. 人总要去积累生活.工作上的点点滴滴,慢慢的进步,以后回头看看,笑笑,顺便学学,人都说回忆才是最美的.

  • MDF文件在SQL Server中的恢复技术

    先把要恢复的文件置于MS SQL里的DATA文件里,进入MS SQL主数据库服务器. 1.我们使用默认方式建立一个供恢复使用的数据库(如MHDYF2005).可以在SQL Server里面建立. 2.停掉数据库服务器. 3.将刚才生成的数据库的日志文件MHDYF2005_log.ldf删除,用要恢复的数据库mdf(yu1.mdf)文件覆盖刚才生成的数据库数据文件MHDYF2005_data.mdf. 4.启动数据库服务器.(刷新之后)此时会看到数据库MHDYF2005的状态为"置疑".

  • 没有SQL Server数据库时如何打开.MDF文件

    如果您在试图打开一个.MDF数据库文件时,却发现自己没有安装SQL Server数据库,该怎么办呢?这时候,如果恰巧您的机子上装有Visual Studio 2005或者是更高的版本时,不用安装SQL Server数据库也能打开.MDF数据库文件.本文我们主要介绍了这一方法的实现,接下来我们就开始介绍. 解决方法: 打开Visual Studio 2005,在项目中点击工具→连接到数据库会出现更改数据源,选择, 点确定,会出现如下窗口: 浏览到你的mdf数据库文件: 点打开 然后点连接测试,如果

  • SQLServer2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数据库的方法

    复制代码 代码如下: exec sp_attach_db exun,'d:\exun2.mdf' 一句话就可以了. 网上看了那些比较繁琐的,都是sql server 2000版本的. (可能执行一次不能成功,测试了下,有时候需要执行2次以上命令才行) 执行了之后,记得刷新数据库,不然是不会显示的

  • 恢复.mdf 数据库步骤

    方法一(只有mdf没有日志文件的可以恢复) 证明有效 1.新建同名数据库. 2.把该数据库设置为脱机. 3.删除其日志文件(.LDF),不删除后边的过程执行通不过. 4.在在查询分析器中以超级用户登入,执行以下存储过程,必须以超级用户登入,这是系统级存存处过程. EXEC sp_detach_db @dbname = 'xxx' //@dbnam 为要还原的数据库 EXEC sp_attach_single_file_db @dbname = 'xxx', @physname = 'yyyy'

  • mdf文件和ldf文件导入到sql server 2005实现语句

    复制代码 代码如下: USE master; Go EXEC sp_attach_db @dbname = N'数据库名', @filename1 = N'完整目录的mdf文件', @filename2 = N'完整目录的ldf文件'; GO 如 USE master; Go EXEC sp_attach_db @dbname = N'db_shop', //db_shop是数据库名字 @filename1 = N'E:\TM\07\Database\db_shop_Data.MDF', @fi

  • 教你轻松恢复/修复SQL Server的MDF文件

    首先:如果备份的数据库有两个文件,分别是.LDF 和 .MDF,打开企业管理器,在实例上右击---所有任务--附加数据库,然后选择那个.MDF文件,就可以了. 或者在查询分析器中输入: 复制代码 代码如下: sp_attach_db "数据库名称","路径\文件名.ldf","路径\文件名.MDF" SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文

  • SQL Server中的文件和文件组介绍

    文件和文件组简介 在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL Server通过管理逻辑上的文件组的方式来管理文件. SQL Server通过文件组对数据文件进行管理.我们看到的逻辑数据库由一个或者多个文件组构成. 结构图如下: 文件组管理着磁盘上的文件,文件中存放的就是SQL Server的实际数据. 为什么通过文件组来管理文件 从用户的角度来说,创建对象时需要指定存储文件组的只有三种数据对象:表,索引和大对象

  • 教你如何看懂SQL Server查询计划

    对于SQL Server的优化来说,优化查询可能是很常见的事情.由于数据库的优化,本身也是一个涉及面比较的广的话题,因此本文只谈优化查询时如何看懂SQL Server查询计划.毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正. 首先,打开[SQL Server Management Studio],输入一个查询语句看看SQL Server是如何显示查询计划的吧. 说明:本文所演示的数据库,是我为一个演示程序专用准备的数据库,可以在此网页中下载. select v.O

  • SQL恢复master数据库方法 只有mdf文件的数据库如何恢复

    首先先和大家讲一讲SQL Server恢复master数据库方法,具体步骤如下 第一步:复制model.mdf.mastlog.ldf.model.mdf.modellog.ldf.msdbdata.mdf.msdblog.ldf文件. 从X:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Templates 至X:\Program Files\Microsoft SQL Server\MSSQL10.MSSQ

  • 清理SQL Server 2008日志文件Cannot shrink log file 2 的解决方案

    SQL 2008日志文件占了23G硬盘空间,而事务日志已经截断(Truncate),实际日志内容很小,1G都不到,想要释放日志文件霸占的多余空间. 但是,无论怎么收缩(Shrink)日志文件,空间就是不能释放,总是出现错误: Cannot shrink log file 2 (CNBlogsText_log) because of minimum log space required. 之前解决过类似的问题,也写过一篇博客-SQL Server 2008事务日志清理,当时采用的最终解决方法是:

  • SQL Server无日志恢复数据库(2种方法)

    SQL Server是一个关系数据库管理系统,应用很广泛,在进行SQL Server数据库操作的过程中难免会出现误删或者别的原因引起的日志损坏,又由于SQL Server数据库中数据的重要性,出现了以上的故障之后就必须对数据库中数据进行恢复.下文就为大家介绍一种恢复数据库日志文件的方法. 解决方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先

  • SQL Server 数据库清除日志的方法

    方法一: 1.打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2.再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了. 方法二: 设置检查点,自动截断日志 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1.设置数据库模式为简单模

  • Sql Server安装出错,安装程序配置服务器失败的解决方法小结

    错误重现:首先在控制面板里卸载了sqlserver软件,一切正常,然后重启(一定要重启,否则没法重装),执行sqlserver的安装程序,一切似乎都正常,一路下一步,安装到了最后,突然提示"安装程序配置服务器失败". 当出现安装程序配置服务器失败时,可以试着用一下方法解决 推荐方法:在安装SQL Server 2000时,安装快要完成,到最后提示一个错误,如上图,怎么解决呢,不急,请看下面的方法: 把上次安装时产生的"Microsoft SQL Server"文件夹

  • SQL SERVER 2008数据库引擎详细介绍

    SQL Server 的数据库引擎组件是用于存储.处理数据和保证数据安全的核心服务.数据库引擎提供受控的访问和快速事务处理,以满足企业中要求极高.大量使用数据的应用程序的要求. SQL Server 支持在同一台计算机上最多存在 50 个数据库引擎实例.对于本地安装,必须以管理员身份运行安装程序.如果从远程共享安装 SQL Server,则必须使用对远程共享具有读取和执行权限的域帐户. 高可用性解决方案概述 高可用性解决方案可减少硬件或软件故障造成的影响,保持应用程序的可用性,尽可能地减少用户所

  • SQL Server 数据库分离与附加(图文教程)

    一.概述 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用的"分离/附加"方法,类似于大家熟悉的"文件拷贝"方法,即把数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘上作备份,然后把这两个文件再拷贝到任何需要这个数据库的系统之中.比如,在实验教学过程中,同学们常常想把自己在学校实验室计算机中创建的数据库搬迁到自己的计算机中而不想

随机推荐