58

.mdf出于某种原因,我必须卸载 SQL Server 2008 R2,但在此之前,我.ldf

C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQL2008\MSSQL\DATA

现在,问题是,我是否可以在新安装的 SQL Server 2008 R2 中从这些文件中恢复数据库。

如果是:那我该怎么做?

4

7 回答 7

111

对的,这是可能的。步骤是:

  1. 首先将.mdfand.ldf文件 放入文件C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\

  2. 然后进入sql软件,右击“Databases”,点击“Attach”选项,打开Attach Databases对话框

  3. 单击“添加”按钮打开并从 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\文件夹中找到数据库文件

  4. 单击“确定”按钮。SQL Server Management Studio 从.MDF文件加载数据库。

于 2014-02-19T10:24:58.653 回答
13

从一个脚本(一个有效的):

CREATE DATABASE Northwind
ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind.mdf' )
LOG ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind_log.ldf')
GO

显然更新路径:

C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA

到您的 .mdf 和 .ldf 所在的位置。

于 2016-01-24T17:13:24.253 回答
10

首先谷歌搜索给了我这个答案。所以我想用更新版本的附加、分离来更新它。

Create database dbname 
On 
(   
Filename= 'path where you copied files',   
Filename ='path where you copied log'
)
For attach; 

此外,如果您的数据库完全关闭(数据库关闭时没有活动事务)并且您没有日志文件,您可以使用以下方法,SQL Server 将创建一个新的事务日志文件。

Create database dbname 
    On 
    (   
    Filename= 'path where you copied files'   
    )
    For attach; 

如果您不指定事务日志文件,SQL 将尝试查找默认路径并尝试使用它,而不管数据库是否已完全关闭。

这是MSDN对此的看法。

如果读写数据库有一个日志文件并且您没有为日志文件指定新位置,则附加操作会在该文件的旧位置中查找。如果找到,则使用旧的日志文件,而不管数据库是否被干净地关闭。但是,如果未找到旧的日志文件,并且数据库已完全关闭并且没有活动的日志链,则附加操作会尝试为数据库构建新的日志文件。

这种方法有一些限制,也有一些副作用。

1.附加和分离操作都禁用数据库的跨数据库所有权链接
2.Database trustworthy 设置为关闭
3.分离只读数据库会丢失有关差异备份的差异基础的信息。

最重要的是..您不能将具有最新版本的数据库附加到早期版本

参考资料:
https ://msdn.microsoft.com/en-in/library/ms190794.aspx

于 2015-03-14T20:08:45.693 回答
8

我有一个答案给你是的,这是可能的。

SQL Server Management Studio > 选择数据库 > 单击附加

然后选择并添加 .mdf 和 .ldf 文件。单击确定。

于 2017-02-05T05:07:02.973 回答
2

这就是我所做的

先执行create database x。x 是旧数据库的名称,例如 mdf 的名称。

然后打开 sql sever 配置并停止 sql sever。

浏览到新创建的数据库的位置后,它应该在程序文件下,在我的情况下是

C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQL\MSSQL\DATA

并用旧文件/数据库替换新创建的 mdf 和 Idf。

然后只需重新启动 sql server 和 walla :)

于 2018-10-14T00:02:15.923 回答
0
use test
go
alter proc restore_mdf_ldf_main (@database varchar(100), @mdf varchar(100),@ldf varchar(100),@filename varchar(200))
as
begin 
begin try
RESTORE DATABASE @database FROM DISK = @FileName
with norecovery,
MOVE @mdf TO 'D:\sql samples\sample.mdf',
MOVE @ldf TO 'D:\sql samples\sample.ldf'
end try
begin catch
SELECT ERROR_MESSAGE() AS ErrorMessage;
print 'Restoring of the database ' + @database + ' failed';
end catch
end

exec restore_mdf_ldf_main product,product,product_log,'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\product.bak'
于 2016-05-11T08:44:04.577 回答
0
CREATE DATABASE MyDatabase 
ON (FILENAME = 'C:\SQLServer\MyDatabase_Data.mdf'), 
(FILENAME = 'C:\SQLServer\ MyDatabase _Log.ldf') 
FOR ATTACH; 
于 2021-07-13T10:06:36.157 回答