Using the LDF File and Old Backup File to Restore the Data Base in SQL SERVER 2005

本文介绍了一种利用旧备份文件和LDF日志文件恢复SQL Server数据库的方法。首先需启动数据库服务并创建同名数据库,然后通过一系列步骤,包括修改数据库文件、运行特定SQL语句等来逐步恢复数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用旧备份和日志文件还原数据库

 

仅仅有一个LDF日志文件是无法恢复数据库的. 但可以利用旧的备份文件进行恢复.
但是要求LDF文件是完整的,且旧的备份文件应该是完整备份(full)且最近的一次备份,不能太旧.

 

如过是从别的地方找来的LDF文件和BAK文件,请先执行以下1-5步:

 

(1)启动数据库服务。
    在SQL Server Configuration Manager (管理器内) 启动数据库服务

 

(2)新建同名的数据库(数据库文件名,日志文件名 也要相同 )。

 

(3)停止数据库服务。

 

(4)破坏MDF文件
    删除MDF文件, 新建一个TXT文件,改名为 MDF文件名,注意要和删除的MDF文件名相同,注意文件后缀名.

 

(5)复制 LDF
    复制并覆盖, 第二步建立的数据库的LDF文件.


(6)启动数据库服务。

 

(7) (在查询窗口)运行 SQL,
    执行如下:


    backup log WMS TO DISK='D:/BakLog.bak' WITH NO_TRUNCATE  
    go  

 

    可能会出现错误, 请重复执行,直到成功.
   
    因为数据库损坏,所一要用 WITH NO_TRUNCATE, 具体的用法参看MSDN

 

(8) 还原旧的数据库
    执行如下:


    RESTORE DATABASE  DataBaseName FROM DISK='D:/DataBasebak.bak' WITH NORECOVERY  
    go  

 

(9) 还原新数据库
    执行如下:


    RESTORE LOG DataBaseName FROM DISK='D:/BakLog.bak' WITH RECOVERY  
    go  

 

<think>我们正在处理用户关于如何在SQL Server中附加或打开.MDF文件的问题。根据提供的引用,我们可以总结出几种方法,特别是通过SQL Server Management Studio (SSMS) 和 T-SQL命令,以及处理可能出现的错误。 ### 步骤总结: 1. **使用SQL Server Management Studio (SSMS) 图形界面附加数据库**: - 打开SSMS,连接到SQL Server实例。 - 在“对象资源管理器”中,右键单击“数据库”,选择“附加”。 - 在“附加数据库”对话框中,点击“添加”按钮,然后浏览并选择要附加的.MDF文件。 - 确保相应的.LDF文件也存在(通常在同一目录下),然后点击“确定”。 2. **使用T-SQL命令附加数据库**: - 在SSMS中,新建查询,然后使用`sp_attach_db`存储过程(注意:该存储过程在后续版本中可能被废弃,推荐使用`CREATE DATABASE ... FOR ATTACH`): ```sql EXEC sp_attach_db @dbname = N'YourDatabaseName', @filename1 = N'Path_To_Your_MDF_File.mdf', @filename2 = N'Path_To_Your_LDF_File.ldf'; ``` 或者使用: ```sql CREATE DATABASE YourDatabaseName ON (FILENAME = 'Path_To_Your_MDF_File.mdf'), (FILENAME = 'Path_To_Your_LDF_File.ldf') FOR ATTACH; ``` 3. **处理附加过程中可能出现的错误**: - **错误5120(拒绝访问)**:通常是因为SQL Server服务账户没有访问.MDF和.LDF文件的权限。解决方法: - 找到.MDF和.LDF文件,右键单击选择“属性”。 - 转到“安全”选项卡,点击“编辑”以更改权限。 - 点击“添加”,输入“Everyone”(或具体的SQL Server服务账户),然后赋予“完全控制”权限。 - 确保两个文件(.MDF和.LDF)都设置了正确的权限。 4. **在Docker环境中附加数据库**(如果适用): - 将.MDF和.LDF文件放入Docker容器内的目录(例如`/var/opt/mssql/data/`)。 - 使用`docker cp`命令将文件复制到容器中。 - 在容器内使用上述T-SQL命令附加数据库。 ### 具体操作指南: #### 方法1:通过SSMS图形界面附加 1. 打开SQL Server Management Studio并连接到目标SQL Server实例。 2. 在“对象资源管理器”中,展开服务器节点,右键单击“数据库”,然后选择“附加”。 3. 在“附加数据库”对话框中,单击“添加”按钮。 4. 浏览到.MDF文件所在的位置,选择该文件,然后单击“确定”。 5. 在“要附加的数据库”列表中,确认.MDF和.LDF文件路径正确。 6. 单击“确定”开始附加过程。如果成功,数据库将出现在数据库列表中。 #### 方法2:通过T-SQL命令附加 1. 在SSMS中,单击“新建查询”打开查询编辑器。 2. 输入以下命令(根据实际情况替换数据库名和文件路径): ```sql EXEC sp_attach_db @dbname = 'TestDB', @filename1 = 'C:\Data\TestDB.mdf', @filename2 = 'C:\Data\TestDB_log.ldf'; ``` 或者 ```sql CREATE DATABASE TestDB ON (FILENAME = 'C:\Data\TestDB.mdf'), (FILENAME = 'C:\Data\TestDB_log.ldf') FOR ATTACH; ``` 3. 执行查询。如果成功,数据库将被附加。 #### 处理错误5120(权限问题) 1. 找到.MDF和.LDF文件所在的文件夹。 2. 右键单击文件,选择“属性”,然后转到“安全”选项卡。 3. 单击“编辑”按钮以更改权限。 4. 单击“添加”按钮,在输入框中输入“Everyone”,然后单击“检查名称”并确认。 5. 在“组或用户名”列表中选择“Everyone”,然后在下方权限列表中勾选“完全控制”。 6. 单击“应用”和“确定”保存更改。 7. 重复以上步骤为两个文件设置权限。 8. 重新尝试附加数据库。 ### 注意事项: - 如果.LDF文件丢失或损坏,可以尝试只附加.MDF文件,并在附加时删除.LDF条目,然后让SQL Server重新生成日志文件。但这种方法可能导致数据不一致,需谨慎使用。 - 确保SQL Server服务账户有权限访问这些文件。如果文件位于网络路径,可能需要额外的权限设置。 - 在Docker环境中,确保文件已复制到容器内部,并且路径使用容器内的路径(如`/var/opt/mssql/data/`)。 ### 相关问题 1. 如何将.MDF文件导入到Docker容器中的SQL Server? 2. 附加数据库时出现“文件正在使用”错误,如何解决? 3. 如何分离数据库以获取.MDF和.LDF文件? 4. SQL Server中附加和还原数据库有什么区别?</think>### 在SQL Server中附加.MDF文件的完整指南 在SQL Server中打开或附加.MDF文件(主数据文件)有两种主要方法,以下为详细步骤: --- #### **方法1:通过SQL Server Management Studio (SSMS) 图形界面附加** 1. **连接SQL Server实例** 打开SSMS → 登录到目标SQL Server实例(本地或远程)。 2. **启动附加流程** 在"对象资源管理器"中: `右键单击"数据库" → 选择"附加"` 3. **添加数据库文件** - 点击"添加"按钮 → 浏览选择.MDF文件 - 系统自动关联同目录下的.LDF日志文件(若不存在会自动创建) - 确认文件路径正确后点击"确定" ![附加界面示意图](https://docs.microsoft.com/en-us/sql/relational-databases/databases/media/attach-database.png?view=sql-server-ver15) 4. **验证附加结果** 附加成功后,数据库会出现在数据库列表中,状态为"在线"。 --- #### **方法2:使用T-SQL命令附加** ```sql -- 使用系统存储过程 (推荐) EXEC sp_attach_db @dbname = 'YourDatabaseName', @filename1 = 'C:\Path\To\YourFile.mdf', @filename2 = 'C:\Path\To\YourFile.ldf'; -- 或使用CREATE DATABASE语法 CREATE DATABASE YourDatabaseName ON (FILENAME = 'C:\Path\To\YourFile.mdf'), (FILENAME = 'C:\Path\To\YourFile.ldf') FOR ATTACH; ``` > 📌 **关键参数说明** > - `@dbname`:自定义的数据库显示名称 > - `@filename1`:.MDF文件的**完整物理路径** > - `@filename2`:.LDF文件的完整路径(必须同时存在) --- #### ⚠️ **常见错误解决方案** 1. **错误5120(拒绝访问)** **原因**:SQL Server服务账户无文件访问权限 **解决**: - 右键.MDF/.LDF文件 → 属性 → 安全 → 编辑 - 添加`Everyone`或`SQL Server服务账户`(如`NT SERVICE\MSSQLSERVER`) - 勾选"完全控制"权限 → 应用[^3][^4] 2. **文件路径错误** - Docker容器内路径格式:`/var/opt/mssql/data/YourFile.mdf`[^1][^2] - Windows路径需使用双反斜杠:`'C:\\Folder\\File.mdf'` 3. **日志文件丢失** 附加时删除LDF条目,系统会自动重建日志文件: ```sql CREATE DATABASE YourDB ON (FILENAME = 'C:\path.mdf') FOR ATTACH_REBUILD_LOG; ``` --- #### **特殊场景:Docker环境** 1. 将.MDF/.LDF文件复制到容器数据卷: ```bash docker cp School_Data.MDF container_id:/var/opt/mssql/data/ ``` 2. 在容器内执行附加命令: ```sql EXEC sp_attach_db @dbname = 'SchoolDB', @filename1 = '/var/opt/mssql/data/School_Data.MDF', @filename2 = '/var/opt/mssql/data/School_Log.LDF'; ``` 3. 通过Navicat等工具验证连接[^1][^2] --- ### 📚 最佳实践建议 1. **文件权限预配置**:将数据库文件放在专用目录,提前授予SQL Server服务账户"完全控制"权限 2. **版本兼容性**:确保.MDF文件版本不高于当前SQL Server版本(低版本文件可附加到高版本服务器) 3. **定期备份**:附加后立即执行完整备份,避免原始文件损坏风险 > ⚠️ **注意**:`sp_attach_db`在SQL Server 2012后标记为弃用,建议改用`CREATE DATABASE ... FOR ATTACH`语法。 --- ### 相关问题 1. 如何将.MDF文件迁移到另一台SQL Server服务器? 2. 附加数据库时出现"版本852不兼容"错误如何解决? 3. SQL Server在Docker容器中如何持久化存储数据库文件? 4. 分离数据库和备份数据库有什么区别? 5. 如何修复损坏的.MDF文件?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值