在另一台机器上从.bak文件中恢复数据库

12

我对SQL不是很熟悉,还比较新手,所以请原谅我可能提出的基础问题。

有人要求我研究创建一个SQL作业来备份我们的数据库,并将.bak文件存储在另一台计算机上,然后将它们恢复到第二个服务器上。我进行了一些研究和使用SSMS进行了一些实验,并通过设置共享并运行备份作业将数据库备份到了我的个人电脑上。现在我正在尝试通过还原.bak文件(但为正在创建的数据库指定新名称等)来创建一个新的数据库(在与我备份的同一台服务器上),但无法指定从共享中还原,就像我备份时所做的那样/我找不到如何指定其他网络位置,当我尝试查找文件时,只是浏览服务器的C驱动器。

目前,我只是使用内置向导尝试实现此目的(打开SSMS->连接到服务器->右键单击DataBases->还原DataBases,然后选择从设备并浏览查找文件)。

这不是最终的过程,只是我试图弄清楚这是如何工作的。正如我所说的,最终的想法是定期备份从server1到.bak的DB,例如,到我的个人电脑,然后将其恢复到server2上的DB(不同的网络,不同的城市),并且可能使用一系列SQL命令而不是每次都使用向导(最终需要备份几个DBs)。

非常抱歉,也许我的问题很冗长和复杂-本质上,我只需要知道是否可以/如何在SSMS中从另一台计算机上的.bak文件还原DB?非常感谢


1个回答

31
您可以使用以下脚本来进行数据库恢复,它会从文件系统中还原一个名为"MyDB"的数据库,并在此过程中将文件移动到您选择的新位置以覆盖现有的同名数据库。
RESTORE DATABASE
    MyDB
FROM DISK = '\\MyShare\MyBackup.bak'
WITH 
    MOVE 'DataFile' TO 'D:\myNewDBLocation\DataFile.mdf',
    MOVE 'LogFile' TO 'E:\\myNewDBLocation\LogFile.ldf'
, REPLACE
要查找逻辑文件的名称(即上述中称为和的文件),可以运行以下命令:
RESTORE FILELISTONLY 
FROM DISK = '\\MyShare\MyBackup.bak'
关于不同选项和参数的更多信息,请访问以下链接:RESTORE (Transact-SQL)

感谢您的迅速回复。有几个问题,1)DataFile和LogFiles是什么?如果将数据库恢复到同一服务器/位置(只是在我掌握它的过程中,除非我真的需要,否则不想访问第二个服务器),它们是否仍需要移动? 2)我尝试进行还原, RESTORE DATABASE MyDB FROM DISK ='\MyShare\MyDir\backup.bak WITH REPLACE' 但出现错误: “媒体集有2个媒体系列,但只提供了1个。必须提供所有成员。” 我无法理解这个错误,请帮忙解决,非常感谢。 - cprlkleg
数据文件是包含实际数据的文件。日志文件是事务日志,它类似于交易日志,可以用来在崩溃情况下恢复数据到特定时间点。尝试运行RESTORE FILELISTONLY命令以确定数据库实际使用哪些文件。是的,在将数据库还原到同一服务器时,您需要移动文件。否则,新数据库将尝试使用第一个数据库相同的文件,这是不可能的。 - SchmitzIT
1
非常感谢。现在已经可以运行了 :-) 想点赞,但还不能。 - cprlkleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接