从同一数据库进行时间点恢复 - 这意味着什么?

Nev*_*ing 2 sql-server transaction-log

我有两个问题。我有一个处于完全恢复模式的数据库。让我们将事务日志简称为 LDF 文件。

  1. SQL Server 允许我在从数据库恢复到自身时恢复到过去的时间点。这甚至有意义吗?当我尝试它没有产生预期的结果。如果它不起作用,为什么甚至允许这样做?它有什么实际用途吗?

  2. 在玩 LDF 文件时,我发现了一个好奇心:考虑在简单模式下使用数据库。然后我将其切换到完全恢复模式。然后我在数据库中插入了一些 10000 行,检查 LDF 并发现 LDF 文件大小没有增加。当我进行完整备份然后再次将 10000 行插入数据库时​​,LDF 文件才会增加。这是某种优化吗?注意:我在两次操作之前都缩小了 LDF 文件。

感谢所有的解释。

Jon*_*gel 5

  1. 恢复数据库的过程只会在时间上向前推进,永远不会向后1。因此,将数据库恢复到某个时间点涉及从完整备份开始,然后将事务日志备份应用到/包含您希望恢复到的时间点。

    这个想法是存在将数据库恢复到以前存在的特定状态的能力。如果整个数据库丢失(灾难)并且必须从备份中重新构建,则可能需要这样做;或者,“坏事”可能已经发生,无论是恶意的,还是由于腐败,必须就地恢复。

    如果您在使用此功能时遇到问题,我们将需要有关您将如何操作的更多信息。

  2. 正如评论中所提到的,在进行完整备份之前,数据库在内部处于FULLBULK_LOGGED保持在SIMPLE模式中,这提供了可以从中恢复数据库的“基础”。我见过这种叫做“伪简单”的模式。

    您看到的有关日志文件大小的行为可能是由于上述原因,尽管这取决于行的INSERT编辑方式。在SIMPLE(和伪简单)恢复中,如果日志文件开始变满,aCHECKPOINT将启动,这将在内部释放日志文件中的空间作为进程的一部分。因此,如果INSERTs 在单独的事务中完成,则不会增加日志。INSERT在单个事务中执行所有s增加日志,因为在事务提交或回滚之前无法清除回滚整个事务所需的日志记录。

1不包括STANDBY模式恢复、崩溃恢复等。