SQL Server 2012将备份还原到新的数据库名称


16

我似乎还记得,在2008年,您可以通过更改restore-wizard中“ Destination Database”字段中的名称来将备份还原到数据库的新副本。它将创建一个全新的数据库,该数据库是还原到所需时间点的原始数据库的副本。我一辈子都没有想过如何使SQL 2012做到这一点。

现在,我了解到(感谢Aaron Bertrand)这并没有真正改变,而2012年实际上让我更清楚地看到,这种策略首先是一个坏主意!

因此,我需要做的是:使用备份数据库从现有数据库“ MyDB”创建一个新数据库“ MyDB_Copy”。我们有每晚的完整备份(.bak)和每15分钟的TLogs(.trn)。我根本不希望现有的“ MyDB”受到影响/触动,因为它是“实时的”。

从主要的完整备份文件创建MyDB_Copy之后,我需要还原几十个TLog备份以使其到达某个时间点。


您或亚伦可以分享为什么这是一个坏主意吗?或链接到解释该问题的地方?
2013年

我认为这是关于逻辑名称不变的事情,因此您最终将在同一位置得到两个具有不同名称和物理文件但逻辑名称相同的数据库,这将导致依赖于维护计划的问题在逻辑名称上。在我的情况下,那些还原/复制的数据库从未使用超过几个小时,但是我可以理解为什么这不是一个好习惯。
NateJ

Answers:


18

大致基于文档中的示例E,打开一个新的查询窗口并运行:

RESTORE DATABASE MyDB_Copy FROM DISK = 'C:\blahblah\MyDB.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'MyDB' TO 'C:\blahblah\Data\MyDB_Copy.mdf',
---------------------------------------^^^^^
  MOVE 'MyDB_log' TO 'C:\blahblah\Data\MyDB_Copy.ldf';
-------------------------------------------^^^^^

逻辑名称并不重要;物理文件名是。假设您的逻辑文件名只有两个;运行EXEC MyDB..sp_helpfile;确定。

如果需要还原日志,请更改RECOVERYNORECOVERY

  WITH REPLACE, NORECOVERY,
----------------^^

然后,您可以发出一系列:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\file1.trn' WITH NORECOVERY;

在最后一个:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH RECOVERY;

或者,如果您只需要在某个时间点之前进行部分日志记录(我假设您已经检查了LSN和时间在哪里,以便您确切知道需要哪些文件):

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH 
  STOPAT = '<some point in time Friday>', RECOVERY;

您说的以前版本中的工作方式永远不会奏效,除非备份来自其他服务器。默认情况下,它将尝试将新的mdf和ldf文件放在完全相同的位置,这是不可能的。


好的,这有所帮助。现在,我需要还原几十个TRN文件,以使数据库恢复到星期五晚上的状态(完整备份仅每天进行一次; TLog备份每15分钟进行一次)。使用您的示例,我从主BAK文件创建了数据库,但是在尝试类似的语句来还原日志时遇到了新错误。它说:“由于没有文件可前滚,因此无法还原日志或差异备份”。
NateJ

@NateJ,那么您应该问一个完整的问题。:-)
亚伦·伯特兰

1
太好了,我现在要输入!非常感谢你的帮助。我为我在StackOverflow上遇到了一些负面代表而感到难过,但是如果这个工作奏效,那将是非常值得的。
NateJ

1
@NateJ您应该找回该代表,因为该问题在迁移时已被删除(或最终将被删除)。不是我,而是我怀疑这是因为您的指控,它只能在一个版本中起作用,但现在却不行,那显然是对正在发生的事情的误解……
亚伦·贝特朗

哦,我明白了。类似的东西过去曾经奏效-我可能记不清确切的内容/方式了,但我同意它被误解了。我的同事大声疾呼,但现在我考虑了一下,那没有道理。我们必须使用GUI做一些不同的事情。我觉得按照您的建议使用命令/脚本对我们会更好。:)日志现在可以成功还原了!
NateJ

0

多次还原同一数据库所需要做的就是更改该数据库的磁盘文件名。显然,您还需要给该数据库一个不同于SQL Server中其他任何数据库的名称。在选择了要还原的.bak文件并输入数据库名称后,在SSMS中,然后单击左侧“选择页面”部分中的“文件”,然后更改磁盘文件的名称。

干杯道格

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.