当前位置:Gxlcms > 数据库问题 > 数据库日志redo和undo

数据库日志redo和undo

时间:2021-07-01 10:21:17 帮助过:11人阅读

  • 记录当前删除记录的系统列
  • 记录当前删除记录的主键
  • 记录当前删除记录的所有索引
  •  

    Update操作

    Update的操作分为三种情况,对于不同的操作情况,redo log和undo log中记录的信息也是不一样的。

    Section 1:未修改索引,修改的属性列长度不变

    在这种update场景中,只是对非索引列的值进行了修改,并未修改该列的长度,所以在redo log中,会进行定点的update,会记录的是update log;而在undo log中,需要记录的是update操作的系统列、操作记录的主键、操作记录该列的原值,如果该update列中包含二级索引,二级索引的原值,也需要记录到undo log中。综上:

    Redo log:记录update redo log,如果更新列中包含二级索引,则需要对二级索引进行delete mark操作,然后重新insert一条新的二级索引;同时对undo 页面的修改,同步也要写入到redo log中。

    Undo log:记录update的系统列、操作记录的主键、操作记录该列的原值。如果该update列中包含二级索引,二级索引的原值,也需要记录到undo log中

    Section 2:未修改索引,修改了属性列长度

    这种update场景和section 1中的场景类似,唯一的区别是属性列长度发生了变化,这中变化,在undo log中记录的信息,和section 1中的信息形同,而redo log中记录的信息会发生变化,这个时候记录的不再是定点的update,应该是先delete原始的信息,然后insert一条信息。

    undo log:记录信息和section 1中的undo log信息相同

    redo log:不能定点的update了,会记录delete+insert redo log

    section 3:修改索引列值

    在数据库中,修改某条记录的索引列值,实际上的操作是将该记录delete,然后重新插入一条新的记录,然后生成索引,更新索引表。在这一连串的操作过程中,redo log实际上是要记录一个delete和一个insert的redo log,而undo log上是要记录原始的记录(delete操作)和insert的操作记录。

     

     

    LSN:log sequence number

    日志序列号,递增产生,一个LSN可以唯一标识一个redo log,其中有一个叫checkpoint LSN,用来标识数据库crash的redo 起始点,LSN和日志文件位置意义对应。

    数据库日志redo和undo

    标签:style   删除   属性   个数   nsis   空间   恢复   sql 语句   tran   

    人气教程排行