出于某种原因,我必须卸载SQL Server 2008 R2但在此之前我从
复制了我的数据库的两个文件(.mdf
和.ldf
)
C:\ Program Files(x86)\ Microsoft SQL Server \ MSSQL10_50.MSSQL2008 \ MSSQL \ DATA
现在,问题是,我是否可以在新安装的SQL Server 2008 R2中从这些文件中恢复数据库。
如果是:那我该怎么做?
答案 0 :(得分:98)
是的,有可能。 步骤是:
首先将.mdf
和.ldf
文件放入C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\
文件夹
然后转到sql软件,右键单击“数据库”并单击“附加”选项以打开“附加数据库”对话框
点击“添加”按钮打开并从C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\
文件夹中找到数据库文件
单击“确定”按钮。 SQL Server Management Studio从.MDF
文件加载数据库。
答案 1 :(得分:10)
首次谷歌搜索让我得到了这个答案。所以我想用更新版本的attach,detach来更新它。
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.attach-and-detach操作都禁用数据库的跨数据库所有权链接 2.Database trustworthy设置为off 3.Dachaching只读数据库会丢失有关差异备份的差异基础的信息。
最重要的是..您无法将最新版本的数据库附加到早期版本
<强>参考文献:强>
https://msdn.microsoft.com/en-in/library/ms190794.aspx
答案 2 :(得分:9)
从脚本(有效的脚本):
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所在的位置。
答案 3 :(得分:7)
我有一个答案给你 是的,有可能。
转到
SQL Server Management Studio&gt;选择数据库&gt;点击附件
然后选择并添加.mdf和.ldf文件。单击“确定”。
答案 4 :(得分:1)
这就是我所做的
首先执行create database x
。 x是旧数据库的名称,例如mdf的名称。
然后打开sql服务器配置并停止sql服务器。
浏览到新创建的数据库之后,该文件应该位于程序文件下,对于我来说是
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQL\MSSQL\DATA
并使用旧文件/数据库补充新创建的mdf和Idf。
然后只需重新启动sql server和walla:)
答案 5 :(得分: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'
答案 6 :(得分:0)
CREATE DATABASE MyDatabase
ON (FILENAME = 'C:\SQLServer\MyDatabase_Data.mdf'),
(FILENAME = 'C:\SQLServer\ MyDatabase _Log.ldf')
FOR ATTACH;