帮助撤消 SQL Server 2014 上的意外还原

Mar*_*377 4 sql-server ssms restore

昨天我犯了一个严重的错误¹:恢复错误的数据库。

背景(您可以跳过本节):

我右键单击Test数据库并像往常一样进入“恢复数据库”部分。然后,在为源选择媒体(文件)时,我浏览了我最新的生产数据库备份(在上午 01:00 执行)。这不是一个错误。我确实需要有关于测试数据库的最新信息才能......测试。

但是,只要我在“添加媒体”对话框上点击“确定”,SSMS 就会检测到我的备份是从生产数据库制作的,并“悄悄地”更改了“目的地”字段以反映这一点。直到为时已晚,我才意识到这一点。从上午 1 点到下午 6 点 30 分的所有数据库更改都丢失了。

经过几个小时的挣扎,我如何接近我的经理并传达这些不愉快的消息,我决定尽我所能以任何可能的方式修复损害,并且在某种程度上,我幸运地成功了。

现在,采取的步骤:

  1. 首先,我确保已执行今天的备份,因为它包含下午 06:30 到晚上 10:00 之间的数据库条目,这些条目不会丢失。
  2. 转到生产数据库的“恢复”对话框,然后单击“时间轴”选项,希望在下午 6:29 精确执行时间点恢复。
  3. 将前一天的备份(与我之前不小心恢复的相同)解压缩到我的默认备份位置,并确保我的系统上存在合适的“日志备份”。
  4. 设置所需的时间点,单击“验证备份媒体”并继续备份。

现在,我对它的工作感到宽慰,但正如预期的那样,我的所有表都包含截至下午 6:29 的记录,而其他所有内容都丢失了。这是一个拥有 100 多个表的大型数据库,手动检查和插入所有内容需要数天时间。

问题:是否可以仅“恢复”出现在我最新备份中的丢失记录,但不能“恢复”我当前状态数据库中的丢失记录?如果是这样,需要哪些步骤?

¹ “我担心不像你那么严重” -贝恩

编辑回应詹姆斯·安德森的担忧:

  • 关于备份链:实际上我有一个备份文件,从 06:30PM 到 10PM 都有变化。它是由我设置的工作创建的。事实上,为了确定起见,我什至将此备份恢复到一个新的临时数据库。
  • 关于让更多人参与帮助:我的经理接下来几周要出差,我的团队很小(3 人),现在我是负责人。也就是说,我会通知他们,但我一个人负责处理。即使手动。如果有任何工具可以提供帮助,请提出建议。谢谢大家。

小智 5

首先......我认为最好在此类问题上向您的经理坦白。企业会注意到丢失的数据,他不会感激被蒙蔽双眼和手头没有所有事实。在那种情况下,事情对你来说会更糟。如果您没有正式的 DBA 背景,您就没有业务从事 DBA 任务和/或真正的生产 DBA(如果他们存在)应该确保业务免受此类人为错误的影响。

简单地说,没有办法自动恢复单个行。有可用的工具集(红门数据比较会浮现在脑海中)允许您比较数据集并构建差异的脚本,但由您决定哪些更改是好的。


Jam*_*son 5

尽快清理干净。越早做这件事越好。

如果我正确阅读了时间线,那么当您FULL通过生产数据库恢复备份时,您就破坏了备份链。这意味着您将无法将 06:30PM 至 10:00PM 的数据获取到您当前的数据库中,该数据库包含 01AM 至 06:30PM 的数据以及自RESTORE.

我建议您RESTORE使用下午 6:30 至晚上 10:00 数据的数据库,并找出一种基于 T-SQL 代码的方法将这些数据移动到您的实时数据库中。您可能会遇到IDENTITY列问题,因为两个数据库中的新行可能采用相同的 ID。

IMO 越快让其他人参与制定解决此问题的计划越好。

祝你好运