var*_*ble 2 sql-server transaction-log recovery-model bulk-insert
我有一个完全恢复模式的数据库。
下周需要完成一百万行的计划插入。
为了不增加日志大小,我被告知有 2 个选项。
选项 1 是切换到批量模型,执行插入,然后切换到完整模型。这是完全有道理的。
选项 2 是切换到简单恢复模式,执行插入,然后切换到完整模式。这是真的吗?简单恢复模型在批量插入期间不会增加日志大小吗?我知道每个检查点都会清除日志,但是在批量插入期间会发生检查点吗?
在某些情况下,可以最低限度地记录 INSERT。请参阅:批量导入中最少日志记录的先决条件。
请注意,如果您切换到SIMPLE
恢复模式,您的日志链已损坏,并且您需要在切换回FULL
恢复模式后从新的完整备份开始。
如果切换到,BULK_LOGGED
则插入的页面将复制到下一个日志备份中。切换到BULK_LOGGED
不会破坏链条——这就是它存在的原因。
有关更多详细信息,请参阅Sunil Agarwal 的批量导入优化(最小日志记录)。一些引用:
在
FULL
恢复模式下,顾名思义,所有操作都被完整记录。在最少日志记录下,SQL Server 不会记录单个行而只记录页面和范围分配。所以如果每个页面可以容纳 100 行,我们用 100 条日志记录交换 1 条日志记录,这是一个显着的改进。
当批量导入事务提交时...... SQL Server 将所有数据页(这些页的一个子集可能已作为检查点的一部分刷新)到磁盘以保证事务的原子性。
在进行 [下一个] 事务日志备份时,SQL Server 还会备份数据页,包括适用的索引页,作为事务日志的一部分。这通过恢复数据库备份和零个或多个事务日志备份来启用数据库恢复。最小日志记录的唯一缺点是它不支持时间点恢复……如果您担心这一点,您可以在批量操作之前/之后进行事务日志备份。
因此,您通常切换回FULL
恢复模式,并在执行最少日志记录操作后立即进行日志备份。
归档时间: |
|
查看次数: |
47 次 |
最近记录: |