教你轻松恢复修复SQL Server的MDF文件
### 教你轻松恢复修复SQL Server的MDF文件 在SQL Server环境中,MDF文件(主数据文件)是构成数据库的重要组成部分之一。当MDF文件出现损坏或丢失时,可能会导致整个数据库无法正常运行。本文将详细介绍如何仅通过MDF文件来恢复数据库,并解决在恢复过程中可能出现的一些常见问题。 #### 一、MDF文件与数据库恢复的基本概念 1. **MDF文件的作用**:MDF文件是SQL Server数据库中的主要存储文件,它包含了数据库的所有数据和结构信息。 2. **LDF文件的作用**:LDF文件(事务日志文件)记录了所有对数据库进行的修改操作,用于支持事务处理和数据库恢复。 3. **备份与恢复策略**:通常情况下,为了保证数据的安全性,我们会同时备份MDF和LDF文件。但在某些特殊情况下,可能只保留了MDF文件。 #### 二、仅使用MDF文件恢复数据库 假设你只有一个MDF文件,没有LDF文件,那么可以通过以下几种方式尝试恢复数据库: 1. **使用`sp_attach_db`和`sp_attach_single_file_db`存储过程**: - 如果MDF文件是当前数据库产生的,并且没有进行过任何分离操作,可以尝试使用`sp_attach_db`或`sp_attach_single_file_db`来恢复数据库。 - 命令示例: ```sql EXEC sp_attach_db @dbname = N'test', @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'; -- 或者 EXEC sp_attach_single_file_db @dbname = N'test', @physname = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'; ``` - 注意:这种方式可能会遇到设备激活错误,因为系统会尝试查找对应的LDF文件但找不到。 2. **解决设备激活错误**: - 当使用上述方法恢复数据库时,可能会出现如下错误提示:“设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_Log.LDF' 可能有误。已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。” - 解决方案: - 重新创建一个LDF文件,使用`sp_detach_db`将数据库分离,然后使用`sp_attach_db`或`sp_attach_single_file_db`重新附加数据库。 - 示例命令: ```sql EXEC sp_detach_db @dbname = N'test'; -- 创建新的LDF文件 CREATE DATABASE test ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'); EXEC sp_attach_db @dbname = N'test', @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf', @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'; ``` 3. **其他注意事项**: - 使用`sp_attach_db`或`sp_attach_single_file_db`恢复数据库后,可能还需要执行一些额外的操作来确保数据库能够正常工作,比如更新数据库状态或执行检查命令。 - 示例命令: ```sql -- 更新数据库状态 UPDATE sys.databases SET status = -32768 WHERE name = N'test'; -- 检查数据库完整性 DBCC CHECKDB ('test'); ``` #### 三、案例分析与解决方案 1. **案例一:设备激活错误**: - 如前文所述,如果只保留了MDF文件,在尝试恢复数据库时可能会遇到设备激活错误。此时可以通过重新创建LDF文件并使用`sp_attach_db`或`sp_attach_single_file_db`重新附加数据库来解决。 - 特别注意:在重新创建LDF文件时,需要确保其与MDF文件中的信息相匹配,包括数据库名称等。 2. **案例二:数据库完整性问题**: - 在恢复数据库之后,可能会出现数据库完整性问题。此时可以使用`DBCC CHECKDB`命令来验证数据库的完整性,并根据结果进行相应的修复操作。 - 示例命令: ```sql DBCC CHECKDB ('test') WITH NO_INFOMSGS; ``` 3. **案例三:数据库状态问题**: - 在某些情况下,恢复后的数据库可能会处于不正常的状态,例如只能由DBO使用等。这时可以使用`sp_dboption`命令来调整数据库的状态。 - 示例命令: ```sql EXEC sp_dboption @dbname = N'test', @option = 'dbouseonly', @value = 'false'; ``` 通过上述方法,即使只有MDF文件,也可以尽可能地恢复数据库,并解决在恢复过程中可能遇到的各种问题。当然,在实际操作过程中还需要根据具体情况灵活应对,确保数据的完整性和系统的稳定性。
发布时间:2007.08.15 05:06 来源:赛迪网 作者:shuijing
首先:如果备份的数据库有两个文件,分别是.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','
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- asm-西电微机原理实验
- Arduino-arduino
- C语言-leetcode题解之70-climbing-stairs.c
- C语言-leetcode题解之68-text-justification.c
- C语言-leetcode题解之66-plus-one.c
- C语言-leetcode题解之64-minimum-path-sum.c
- C语言-leetcode题解之63-unique-paths-ii.c
- C语言-leetcode题解之62-unique-paths.c
- C语言-leetcode题解之61-rotate-list.c
- C语言-leetcode题解之59-spiral-matrix-ii.c