【问题标题】:Writing to transaction log when log comes to full size当日志达到完整大小时写入事务日志
【发布时间】:2015-04-30 08:35:41
【问题描述】:

假设我们有一个数据库,其中定义了事务日志initial size 到 100MB,maxsize 是 UNLIMITED。

SQL Server 会从头到尾顺序写入日志。我在一本书中找到了下一句话:

当 SQL Server 到达由大小定义的文件末尾时 当它设置好后,它会重新回到开头, 寻找可用空间。 SQL Server 可以在没有 当有空闲虚拟时增加物理日志文件的大小 交易空间。 SQL 时虚拟事务日志空间变得可用 服务器可以将事务日志中的数据写入底层 数据库中的表。

最后一部分让我很困惑。最后一句是什么意思?这是否意味着 SQL Server 会用新事务覆盖旧的、已提交的事务?

据我所知,情况并非如此,因为在备份完成之前必须呈现所有事务。

我不知道我是否足够清楚,如果需要一些解释,我会更新。

【问题讨论】:

    标签: sql-server transaction-log


    【解决方案1】:

    这仅适用于简单事务日志记录:

    当 SQL Server 可以将事务日志中的数据写入数据库中的基础表时,虚拟事务日志空间变得可用。

    这意味着,一旦事务实际写入物理表,事务日志中就不再需要它们。因为此时,断电或其他灾难性故障不再导致事务“丢失”,因为它们已经持久化到磁盘上。

    无需等到备份完成。但是,如果您需要完整的时间点恢复,您将使用 FULL 事务日志,在这种情况下,不会覆盖任何事务日志。

    【讨论】:

      【解决方案2】:

      如果满足以下所有条件,则事务日志中不再需要日志记录:

      它所属的事务已提交。 它更改的数据库页面都已通过检查点写入磁盘。 备份(完整、差异或日志)不需要日志记录。 任何读取日志的功能(例如数据库镜像或复制)都不需要日志记录。

      进一步阅读,

      https://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx

      https://technet.microsoft.com/en-us/library/jj835093%28v=sql.110%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多