AIOps 一场颠覆传统运维的盛筵
729
2022-10-07
【每日一练】001-undo与redo
1、什么叫undoundo的引入是为了和update tansaction(事务)相关。transaction(事务)就是干一件事可能要申请很多个资源,做复杂的操作可能要很多步。事务有以下特点事务的四个特点:(ACID) 1、原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。失败了叫回滚,表示这个事情没有发生过 2、一致性(Consistence):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。 3、隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。 4、持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失。undo segment三个特点用来保存修改之前的数据。transaction rollback事务反转transaction recover事务恢复read consistency读一致性一个transaction从第一条修改数据的记录作为事务的开始,当transaction发送一条commit时,并且结束这个过程。但是,transaction(事务)还没有提交,有可能去做其它事情,当失败时,就产生了undo data回滚数据。undo data回滚数据标识就是事务返回修改该前的时候,相当于回到原来的数据值。而用来保存原来的数据值叫做undo segment。放在表空间里面tablespace 2、什么叫redoredo记录着对数据库的任何修改重做日志缓冲区刷新后的系统状态insert产生的undo数据最少delete产生的undo数据最多update产生的undo数据居中那么问题来了,什么时候才能将数据写入磁盘呢?LGWR主要负责将日志缓冲Redo log内容写到磁盘的在线重做日志文件或组中。DBWn将dirty块写到磁盘之前,所有与buffer修改相关的redo log都需要由LGWR写入磁盘的在线重做日志文件(组),如果未写完,那么DBWn会等待LGWR,也会产生一些相应的等待事件总之,这样做的目的就是为了当crash时,可以有恢复之前操作的可能,也是Oracle在保持交易完整性方面的一个机制。触发机制
DBWR启动时如果发现dirty块对应的redo entry还没写入联机日志文件,则DBWR触发LGWR进程并等待LGWR完成后继续。提交事务commitredo entry数量达到整个log buffer的1/3时,触发LGWR。redo entry的数量达到1M。每3秒LGWR启动一次。结论1:oracle写入数据进程,当我们对一个oracle数据进行增删改删除时,并不是立即的将数据写到磁盘上。oracle工作机制时先写redo log buffer,而redo log buffer有个LGWr进程,LGWR 进程的主要工作就是将LOG BUFFER 中的数据批量写入到REDO LOG 文件中。例如:当我们执行commit时,只是把redo log的数据写到磁盘上,真正的数据并没有写到磁盘上。因为redo log里面已经包含了对数据库做的所有改变信息,只要redo log将这个信息写到磁盘上,就能够保证数据的一致性。等后面发生检查点进程checkpoint时候才真正将数据写入磁盘。结论2:当数据丢失时。oracle根据redo信息可以恢复undo,根据Undo可以回滚数据
发表评论
暂时没有评论,来抢沙发吧~