AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 54067
Accepted
BVernon
BVernon
Asked: 2013-11-28 11:17:48 +0800 CST2013-11-28 11:17:48 +0800 CST 2013-11-28 11:17:48 +0800 CST

恢复到 SQL Server 中的特定时间点

  • 772

编辑:问题原来是,虽然每晚都进行备份,但我试图恢复到尚未备份的时间点。如果我正在编写恢复脚本,我会更快地意识到这一点,但因为我使用的是 GUI,它只是选择了最新的日志文件,而没有费心通知我所选的日志文件实际上并不包含时间点我在指定。

在我对数据库和事务日志进行当前备份后,它就可以正常工作了。

话虽如此,我仍然不明白在下面描述的场景中如何恢复时间为'2013-11-27 12:52:08.240'的记录。但现在我只是将其归因于应用程序记录了错误的时间。


我再一次被 SQL Server 恢复到特定时间点的能力搞糊涂了。

有时,当我过去尝试过此操作时,SQL Server 似乎已恢复到我要求的时间点附近,但不完全是我指定的时间点。我把这归结为我的误解,因为我知道数据库中记录的日期源自应用程序,因此可能与实际写入记录的时间略有不同。差异实际上比“轻微”多一点,但这仍然是我能想到的最好的解释。

今天中午 12 点 55 分左右,我将数据库恢复到 30 分钟后到中午 12 点 25 分。现在,当我查询日志并按日期/时间排序时,我看到一条日期为“2013-11-26 18:21:49.200”的记录,紧接着是一条日期为“2013-11-27”的记录12:52:08.240' 紧挨着彼此。

所以我的第一个观察是,从今天开始到我恢复到(12:25pm)的所有记录都不存在。我的第二个观察是,在 12:52pm 有一条记录,这是我尝试恢复到的时间之后的 27 分钟(方式,方式很大,因为应用程序选择时间和记录实际时间之间的时间略有差异写好了)。

还有其他人遇到过这个吗?我不知道为什么会发生这种情况,如果能帮助我弄清楚如何备份我的数据库,以便在我需要时将它们正确恢复到某个时间点,我将不胜感激,因为这是我转而使用的全部原因备份的完整恢复模型。

sql-server-2008 restore
  • 1 1 个回答
  • 1137 Views

1 个回答

  • Voted
  1. Best Answer
    Mike Walsh
    2013-11-28T16:31:37+08:002013-11-28T16:31:37+08:00

    这里的快速回答是:你所描述/暗示的是一件大事,我没有经历过,这不是 SQL Server 的默认或预期行为。

    恢复能力是 RDBMS 的一项基本功能。恢复到某个时间点的能力是该基本功能的基本部分。而这种能力的基础是关系数据库管理系统的日志机制。

    这不仅使我们能够恢复到某个时间点,而且能够在崩溃或重启期间恢复到一致的状态。它与那里使用的是同一个事务日志。

    简而言之(有很多资源描述了这个过程。这是一个很好的开始)——SQL Server 使用预写日志记录机制。这意味着在该事务被认为是持久的并且您的事务可以被视为完成之前,所有内容都已写入您的事务日志并确认已写入那里。如果这不起作用,我们永远不会相信 SQL Server 的可靠性和您应用程序中的数据,因为数据可能会因 IO 问题、内存问题、重启等而变得不一致。我们无法保证保持 ACID数据库的属性了。

    所以考虑到这个警告,这里发生了三件事之一:

    1. 恢复期间的错误/故障- 我猜这里不是这种情况。为什么?因为您能够在恢复后恢复和查询数据库,并且您没有处理损坏的数据库或恢复失败。
    2. 错误- 我并不是说这是不可能的,但我怀疑情况是否如此。特别是你的评论更新表明你正在查看的应用程序日志中应该包含哪些内容存在一些不确定性。
    3. 误解- 这是对您正在经历的事情的最有可能的猜测。您可以通过对开发服务器或测试服务器执行相同的过程来稍微确认一下。可能正在恢复错误的数据库,您正在查询的表没有向您显示您期望看到的数据并且没有正确记录数据,或者没有您期望看到的事务。
      1. 您实际上并没有进行事务日志备份/恢复-我想您所做的事情也可能有些混乱。要清楚 - 要恢复到某个时间点,您必须使用 NORECOVERY 恢复完整备份,然后在上次完整备份和要恢复到的时间之间应用必要的事务日志,在最终事务日志上指定 WITH STOPAT恢复并在最后一个上指定 WITH RECOVERY .. 此外,如果您要返回的时间是在上次事务日志备份之后,您需要先最后一次备份日志的尾部以便能够恢复到那个时间点。(这篇文章讲的是如何恢复事务日志备份,这篇讲的是备份日志的尾部。)

    (**注意:**我还要确认时区设置,进行备份的服务器上的时区是您在还原时使用的时区,因为这个问题进入了。因此,如果您要从一台服务器还原到其他 - 检查您的时区和所有时区。)

    一种简单的方法可以证明这一点?

    在正常活动后查询您正在查看的表以进行日志记录。根据您对今天活动的理解,您是否看到了您期望看到的内容?好吧,如果您做了一些不同的事情,请执行正常的恢复过程或上面链接的文档中指示的过程。将此恢复到另一台机器/开发机器,这样你就不会影响你的主服务器!恢复到您在此表中运行查询的时间。查看您的表格 - 如果您正确执行了上述步骤,您应该会看到数据看起来应该是正确的。如果不行,我先看看你的流程,重新看说明书,确认数据库,确认两台服务器的时区和时间,如果还是有问题,你 是否完全排除了过程中遗漏了什么?我会立即与 Microsoft 通话,但如果您遇到错误或问题,我真的会感到惊讶。

    • 3

相关问题

  • 连接不同地理区域的数据库的最佳实践

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve