假设我们有以下sql代码:
BEGIN TRAN
UPDATE checking
SET Balance = Balance - 1000
WHERE Account = 'Sally' // original balance is 2000
--------------a checkpoint occurs ---------
--------------System Failure---------------
UPDATE savings
SET Balance = Balance + 1000
WHERE Account = 'Sally'
COMMIT TRAN
比方说,检查sally为负-1000之后会出现一个检查点,让我们将更新后的记录放在第4页(在内存中),因为尚未提交,因此不会有日志记录在日志缓冲区中,因此disk(.ldf)中将没有相应的日志记录。并立即发现系统故障。 SQL Server重新启动后,由于.ldf文件中没有日志记录,它如何知道如何将记录的余额(当前为1000)恢复到其原始值(余额为2000)?因为需要提交才能在内存dba.stackexchange.com/a/76080/184172中创建日志记录,答案是:
提交会在内存中将描述COMMIT的新日志记录添加到日志中