.mdf
出于某种原因,我必须卸载 SQL Server 2008 R2,但在此之前,我.ldf
从
C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQL2008\MSSQL\DATA
现在,问题是,我是否可以在新安装的 SQL Server 2008 R2 中从这些文件中恢复数据库。
如果是:那我该怎么做?
.mdf
出于某种原因,我必须卸载 SQL Server 2008 R2,但在此之前,我.ldf
从
C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQL2008\MSSQL\DATA
现在,问题是,我是否可以在新安装的 SQL Server 2008 R2 中从这些文件中恢复数据库。
如果是:那我该怎么做?
对的,这是可能的。步骤是:
首先将.mdf
and.ldf
文件 放入文件C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\
夹
然后进入sql软件,右击“Databases”,点击“Attach”选项,打开Attach Databases对话框
单击“添加”按钮打开并从 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\
文件夹中找到数据库文件
单击“确定”按钮。SQL Server Management Studio 从.MDF
文件加载数据库。
从一个脚本(一个有效的):
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 所在的位置。
首先谷歌搜索给了我这个答案。所以我想用更新版本的附加、分离来更新它。
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
我有一个答案给你是的,这是可能的。
去
SQL Server Management Studio > 选择数据库 > 单击附加
然后选择并添加 .mdf 和 .ldf 文件。单击确定。
这就是我所做的
先执行create database x
。x 是旧数据库的名称,例如 mdf 的名称。
然后打开 sql sever 配置并停止 sql sever。
浏览到新创建的数据库的位置后,它应该在程序文件下,在我的情况下是
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQL\MSSQL\DATA
并用旧文件/数据库替换新创建的 mdf 和 Idf。
然后只需重新启动 sql server 和 walla :)
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'
CREATE DATABASE MyDatabase
ON (FILENAME = 'C:\SQLServer\MyDatabase_Data.mdf'),
(FILENAME = 'C:\SQLServer\ MyDatabase _Log.ldf')
FOR ATTACH;