undo

oracle redo undo

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-01 03:11:35
redo--> undo-->datafile insert一条记录时, 表跟undo的信息都会放进 redo 中, 在commit 或之前, redo 的信息会放进硬盘上. 故障时, redo 便可恢复那些已经commit 了的数据. redo解释: 在Oracle数据库中,执行数据修改操作后, 并不是马上写入数据文件,而是首先生成重做信息 ,并写入SGA中的一块叫LOG_BUFFER的固定区域,LOG_BUFFER的空间并不是无限大,事实上它非常小,一般设置在3~5MB左右。LOG_BUFFER有一定的触发条件,当满足触发条件后,会有相应进程将LOG_BUFFER中的内容写入一个特定类型的文件,就是传说中的联机重做日志文件。 UNDO: undo->记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据 redo->记录所有操作, 用于恢复 (redo records all the database transaction used for recovery) undo->记录所有的前印象, 用于回滚 (undo is used to store uncommited data infor used for rollback) redo->已递交的事务,实例恢复时要写到数据文件去的 undo->未递交的事务. redo的原因是

How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1)

一世执手 提交于 2020-01-31 23:22:12
How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) To Bottom In this Document Goal Solution References APPLIES TO: Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.2.0.4 [Release 9.2 to 11.2] Oracle Database Cloud Schema Service - Version N/A and later Oracle Database Exadata Cloud Machine - Version N/A and later Oracle Cloud Infrastructure - Database Service - Version N/A and later Oracle Database Backup Service - Version N/A and later Information in this document applies to any platform. Oracle Server Enterprise Edition - Version: 9.2.0.1 to current

mysql undo log研究

梦想与她 提交于 2020-01-21 19:05:06
undo log基础 大家都知道,数据库的四个隔离级别。有一个情况大家也熟悉:即RC和RR两种隔离级别下的不同可见性,即不可重复读问题。 不可重复读的含义是事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取时数据不一致 在RC隔离级别下,伪代码 session1 start transaction; session2 start transaction; session1先读取一次,是1200 session2加了300,之后commit session1再读取一次,是1500 如果session1基于1200进行了操作,就可能造成数据紊乱的结果 而在RR隔离级别下,结果 会发现session1读取的结果一致都是第一次start transaction之前数据的值,在整个session过程中不变,比如说都是1200 而在RR隔离级别下,如果我就在这个基础上做修改,会存在问题吗? session2 1500 session1 read 仍是1200,但其执行 UPDATE account_innodb SET balance = balance - 100 WHERE id = 1; commit; 再查询,结果是1400,是正确的,而不是我们之前预想的1100 这个不可重复读的问题,或者说是RC、RR下innodb的快照读

How can I undo all changes to a block of text in vim?

馋奶兔 提交于 2020-01-21 11:48:28
问题 Is it possible to select some text with visual line and undo all changes made to it from the beginning ? 回答1: I actually do that by undoing everything yanking the block then redoing everything to the last modification and then replacing the block with the yanked text. 来源: https://stackoverflow.com/questions/2236099/how-can-i-undo-all-changes-to-a-block-of-text-in-vim

Oracle_Concept_undo

不想你离开。 提交于 2020-01-19 03:44:24
1. If the current extent has more free blocks then the next free block is allocated. 2. Otherwise, if the next extent expired then wrap in the next extent and return the first block. 3. If the next extent is not expired then get space from the UNDO tablespace. If a free extent is available then allocate it to the undo segment and return the first block in the new extent. 4. If there is no free extent available, then steal expired extents from offline undo segments. De-allocate the expired extent from the offline undo segment and add it to the undo segment. Return the first free block of the

MySQL事务的实现原理

[亡魂溺海] 提交于 2020-01-17 21:38:58
特点 原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability) 一、事务的目的 1、可靠性和并发处理 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有了undo log和redo log。 并发处理:也就是说当多个并发请求过来,并且其中有一个请求是对数据修改操作的时候会有影响,为了避免读到脏数据,所以需要对事务之间的读写进行隔离,至于隔离到啥程度得看业务系统的场景了,实现这个就得用MySQL 的隔离级别。 二、实现事务功能的三个技术 1、日志文件(redo log 和 undo log) 2、锁技术 3、MVCC 1.1 redo log 与 undo log介绍 1.1.1redo log 什么是redo log ? redo log叫做重做日志,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log),前者是在内存中,后者在磁盘中。 当事务提交之后会把所有修改信息都会存到该日志中。假设有个表叫做tb1(id,username) 现在要插入数据(3,ceshi) start transaction; select

Design Pattern for Undo Engine

 ̄綄美尐妖づ 提交于 2020-01-17 08:29:14
问题 I'm writing a structural modeling tool for a civil enginering application. I have one huge model class representing the entire building, which include collections of nodes, line elements, loads, etc. which are also custom classes. I have already coded an undo engine which saves a deep-copy after each modification to the model. Now I started thinking if I could have coded differently. Instead of saving the deep-copies, I could perhaps save a list of each modifier action with a corresponding

Oracle block cleanout 说明

 ̄綄美尐妖づ 提交于 2020-01-15 16:10:42
一. Block Cleanout 说明 文章的整理参考 : http://www.orawh.com/60.html 之前的相关测试参考: OraceITL(Interested Transaction List) 说明 http://blog.csdn.net/tianlesoftware/article/details/6573988 OracleBlock scn/commit scn/cleanout scn 说明 http://blog.csdn.net/tianlesoftware/article/details/6660530 block clean out 是指把一个块中的数据从 dirty 变为 clean,等于告诉后面的人,这个块里面的数据是干净的,可以放心的使用,本质上是更改 block header 中的一个标志位。 当commit 的时候,如果被commit 的数据块还在 data buffer 中也要被cleanout,因为 commit 的时候并不一定修改block header (delay block cleanout) 。 Clean out有2种: fast commitcleanout和delayed blockcleanout: oracle有一个modified block list结构

Oracle block cleanout 说明

耗尽温柔 提交于 2020-01-15 16:10:11
一. Block Cleanout 说明 文章的整理参考 : http://www.orawh.com/60.html 之前的相关测试参考: OraceITL(Interested Transaction List) 说明 http://blog.csdn.net/tianlesoftware/article/details/6573988 OracleBlock scn/commit scn/cleanout scn 说明 http://blog.csdn.net/tianlesoftware/article/details/6660530 block clean out 是指把一个块中的数据从 dirty 变为 clean,等于告诉后面的人,这个块里面的数据是干净的,可以放心的使用,本质上是更改 block header 中的一个标志位。 当commit 的时候,如果被commit 的数据块还在 data buffer 中也要被cleanout,因为 commit 的时候并不一定修改block header (delay block cleanout) 。 Clean out有2种: fast commitcleanout和delayed blockcleanout: oracle有一个modified block list结构

Oracle Undo的学习

戏子无情 提交于 2020-01-15 16:07:12
回滚段 可以说是用来保持数据变化前映象而提供一致读和保障事务完整性的一段磁盘存储区域。当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后把变化前的数据写入回滚段,最后才在数据缓冲区中修改(日志缓冲区内容在满足一定的条件后可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中的数据依赖于检查点的发生和DBWR进程的活动) Rollback是一个代价昂贵的操作,如果一个系统的事务回退率过高,应该检查系统是否正常或者程序设计思路是否存在问题。查询数据库启动依赖的 事务回退率,如果发现太高,一定要引起重视。 --查询回退率的sql SELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('user commits', 'transaction rollbacks'); 关于回滚段的数据,如果是delete操作,则回滚段将回记录整个行的数据;如果是update,则只记录被修改了的字段的变化前的数据(前映像);如果是insert,则只记录插入记录的rowid。所以,假如commit,那么回滚段中简单标记该事务已经提交;假如rollback,则操作是 delete的话,把回滚段中的数据重新写回数据块,操作是update的话则把变化前的数据修改回去,操作是insert的话则根据rowid把该记录删除