在写入数据库之前,为什么使用事务日志作为分段

时间:2016-07-29 00:21:04

标签: sql-server logging transactional

在SQL Server中,我知道事务日志是一个可以在事务最终进入DB文件(或MDF)之前记录事务的地方。为什么我们不能直接原子地将事务写入DB文件,如果发生电源故障,我们可以回滚到上一个已知的一致状态。

2 个答案:

答案 0 :(得分:0)

每个SQL Server数据库都有一个事务日志,用于记录每个事务所做的所有事务和数据库修改。 事务日志是数据库的关键组件。

Update to revision...

这确实发生了,但首先是事务日志,然后当提交时,到达mdf文件,如果回滚,它们不会存储在mdf中。

提交/回滚由连接到数据库的应用程序控制。

如果系统出现故障,您将需要该日志才能使数据库恢复到一致状态。

事务日志存储对SQL Server数据库进行的每个事务,除了一些像BULK IMPORT或SELECT INTO这样最少记录的事务。

SQL Server数据库可以在没有事务日志的情况下工作吗? 不,由于SQL Server设计,这是不可能的。

SQL Server备份和还原操作发生在数据库的恢复模型的上下文中。

有三种恢复模式:简单,完整和批量记录。

通常,数据库使用完整恢复模型。 您可以随时切换到其他恢复模式。

如果选择“完全恢复模式”,则表示安全,因为您可以在系统停机前最后一分钟恢复。

了解更多详情:

Recovery Models

The Transaction Log

答案 1 :(得分:-1)

预写日志记录(非特定于SQL Server)主要用于性能原因。

首先,事务日志是仅附加的,因此对它们进行更改不会导致在数据文件中定位特定块的代价,这对于大型表来说可能是昂贵的。

其次,事务日志记录不一定包含整个更改的块,而是包含旧记录和新记录之间的差异。数据文件I / O在整个块甚至扩展区(块组)中执行,因此更改记录中的单个字节将需要将整个块(扩展区)写入数据文件,从而显着增加传输的数据量每笔交易。

第三,事务日志可用于重放自上次备份以来对数据库所做的更改,允许您将数据库还原到上次备份时或之后的任意时间点。如果您直接将更改写入数据文件并突然丢失这些文件(例如,由于磁盘故障),则唯一的选择是将数据库状态还原到上一次备份时。当然,这意味着您的事务日志驻留在单独的设备上,理想情况下是多路复用的。

相关问题