none
sql server 日志何时被写如磁盘? RRS feed

答案

  • Possible, that's why sql has to do undo/redo before bring db online.
    • 已标记为答案 Jacky_shen 2012年1月7日 3:05
    • 取消答案标记 Jacky_shen 2012年1月7日 3:15
    • 已标记为答案 Jacky_shen 2012年1月7日 3:27
    2012年1月7日 3:02
  • 虽然如楼上所说,是有可能的。但是一般地,log is certain percent full 很少发生,reaches recovery interval setting就是checkpoint。

    另外,只是sql把数据写入磁盘控制器,由于磁盘一般自带cache,所以数据并不一定实际写入了磁盘。我平均每年会遇到一次磁盘控制器掉电或故障引起数据丢失的情况。


    想不想时已是想,不如不想都不想。
    • 已标记为答案 Jacky_shen 2012年1月8日 5:08
    2012年1月8日 3:43
    版主

全部回复

  • 1. changes will write to disk once transaction committed or checkpoint happens, so you'll lose changes in step4 in this case.

    2. it's to make sure transactions committed before crashing are present in the db.

    2012年1月6日 14:44
  • Hi rmiao,非常感谢,

    1,你说的 changes will write to disk 指的是dirty pages被写入磁盘还是LOG被写入磁盘? 不过我在此处问的是LOG何时被写入磁盘,而不是dirty pages何时被写日磁盘。另外上面的Step1~Step4是在同一个transaction里的。

    2,上面的Step1~Step4是在同一个transaction里的,既然这个事务在系统崩溃前的状态是 UNcommitted 的,为什么在灾难恢复的时候还需要对那个UNcommitted 的事务做REDO?直接UNDO掉它已经写入磁盘的dirty pages不就得拉?









    2012年1月6日 15:35
  • 1. refreshes log to disk when log is certain percent full or reaches recovery interval setting.

    2. redo and undo are db wise process when bring db online, not for specific transaction.

    2012年1月6日 18:11
  • 谢谢。

    在系统崩溃前,Step4对应的那个操作(update tableA set column1=4)的日志有没有可能已经被写了磁盘了?虽然我知道那个日志被写入磁盘不是必须的,因为Step4操作对应的dirty pages还没有机会被写入磁盘,我只是想知道有没有这种可能性。



    2012年1月7日 2:30
  • Possible, that's why sql has to do undo/redo before bring db online.
    • 已标记为答案 Jacky_shen 2012年1月7日 3:05
    • 取消答案标记 Jacky_shen 2012年1月7日 3:15
    • 已标记为答案 Jacky_shen 2012年1月7日 3:27
    2012年1月7日 3:02
  • Possible, that's why sql has to do undo/redo before bring db online.


    非常的感谢!

    这也说明了日志写入磁盘的时机并不完全基于checkpoint 跟 commit ,比如说你上面的提到的“refreshes log to disk when log is certain percent full or reaches recovery interval setting.”,也会写入日志到磁盘,是这样的吧?

    2012年1月7日 3:05
  • That's correct.
    2012年1月8日 0:29
  • 虽然如楼上所说,是有可能的。但是一般地,log is certain percent full 很少发生,reaches recovery interval setting就是checkpoint。

    另外,只是sql把数据写入磁盘控制器,由于磁盘一般自带cache,所以数据并不一定实际写入了磁盘。我平均每年会遇到一次磁盘控制器掉电或故障引起数据丢失的情况。


    想不想时已是想,不如不想都不想。
    • 已标记为答案 Jacky_shen 2012年1月8日 5:08
    2012年1月8日 3:43
    版主
  • 非常感谢两位,另外对于在system crash之前的uncommitted的事务在灾难恢复期间是否要一定做REDO操作的必要性,下面的帖子进行了一下讨论。

    http://social.msdn.microsoft.com/Forums/en-US/sqldisasterrecovery/thread/d043e0be-a256-42c9-95e1-86fa910fca94/#f9416f6e-4a97-4d9c-ad34-af52d489d0c3





    2012年1月8日 4:57