【每日一练】001-undo与redo

网友投稿 729 2022-10-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

【每日一练】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可以回滚数据

上一篇:运维体系建设(稳定性保障体系3)
下一篇:docker怎么设置开机不要启动
相关文章

 发表评论

暂时没有评论,来抢沙发吧~