UNDO作用

  • 数据的回滚
  • 一致性读
  • 表的闪回(事务,查询的闪回....)
  • 失败会话的恢复
      • 数据的回滚

SQL> rollback;

回滚的过程就是从回滚段里拿到刚刚执行的这条语句产生的回滚,然后应用到以前的数据块上.

回滚的前提是没有commit.一旦提交了,就不能回滚了.

如果网络中断,会话中断,oracle会强制回滚

SQL> insert into t1 values('b');

1 row created.

SQL> select * from t1;

X

-

a

b

SQL> rollback;

Rollback complete.

SQL> select * from t1;

X

-

a

      • 一致性读

为了保证数据读取的一致性,获取数据的结果是发出sql语句的时间一致。如果数据块上的数据已经被改变了,oracle就会用到回滚.

如:9点01分发出的sql查询,数据在9点03分已经修改了,但是这时候oracle返回的依然是9点01分时候的数据的值,这个值是从回滚段里面读取的.

      • 表的闪回(事务,查询的闪回....)

不小心把表的数据修改了,这是你可以去查询在某个时间数据块的值.

      • 失败会话的恢复

如果会话意外终止,可以使用undo将失败的会话恢复.

Undo的产生

  1. update一个数据块
  2. 从内存里找到数据块,在undo里面放上数据块修改之前的值(old data)
  3. 这时候会对undo回滚段数据块的修改,就会产生undo的redo.
  4. oracl将原始数据修改为新的数据值,新的值也会产生一个redo

Undo V.S. Redo

Undo

Redo

Record of

怎样去撤销一个改变How to undo a change

(有一个改变已经生效,要去将改变撤销)

怎样去重做一个改变How to reproduce a change

(有一个改变没有生效,要去重做)

Used of

Rollback(回滚), read consistency, flashback

Rolling forward(前滚,恢复) database changes

Stored in

Undo segments(Undo表空间)

Redo log files(重做日志文件)

Protects against

一致性读

Data loss(数据的丢失)

修改一个数据块时,oracle里纠结做了什么?

1、发出一条SQL语句,将员工1234的工资更新为10,从下面可以看出原来工资为5.

2、ORACLE会从内存里找1234员工的数据块,如果没有内存里没有,就从磁盘上读取数据块到内存中.

3、找回滚段数据块(来装之前的数据),同样,如果内存里面没有,就从回滚段数据文件里读取到内存中.

4、oracle将5这个数据块写到回滚段里.

5.因为我修改了回滚段数据块,产生了undo的redo.

6.将原始数据块从5改为10.

7.原始数据块修改后,产生了本身数据块的redo

Undo 表空间

  • 普通的数据表空间
  • 机制和数据表空间完全一致,只不过用途不同。

SQL> show parameter undo;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO--------------自动管理undo回滚段

undo_retention                       integer     900--------------undo数据默认保留的时间(过期的数据会被覆盖)

undo_tablespace                      string      UNDOTBS1

SQL> select file_name,bytes from dba_data_files where tablespace_Name='UNDOTBS1';

FILE_NAME

--------------------------------------------------------------------------------

BYTES

----------

/u01/app/oracle/oradata/gaga01/undotbs01.dbf

78643200

自动管理回滚段表空间

  • 动态改变回滚段的个数。
  • 自动调整回滚段的大小

Undo 数据的保留时间

Undo 表空间的损坏

  • 如果有活动的事务,需要恢复Undo表空间,如果没有备份,将导致数据库损坏。
  • 如果没有活动事务,可以重建一个undo表空间。

OracleUNDO的更多相关文章

随机推荐

  1. Android PagerSlidingTitleIconTabStrip 能够在title旁边加小图标的PagerSlidingTabStrip

    public class MainFragmentPagerAdapter extends FragmentPagerAdapter implements TitleIconTabProvider{ ...

  2. Intellij IDEA配置优化

    1. 在线激活 安装IntelliJ IDEA 2016.1.2版本后,在联网状态下激活.Help --> Register,选择lisence server,粘贴地址http://idea.i ...

  3. c++ 头文件循环引用解法

    A.h #include "B.h" class A{ public: B* m_b; } B.h #include "A.h" class B{ public ...

  4. 深度CTR预估模型中的特征自动组合机制演化简史 zz

    众所周知,深度学习在计算机视觉.语音识别.自然语言处理等领域最先取得突破并成为主流方法.但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像.语音.文本数据在空间和时间上具有 ...

  5. flink on yarn部分源码解析

    转发请注明原创地址:https://www.cnblogs.com/dongxiao-yang/p/9403427.html flink任务的deploy形式有很多种选择,常见的有standalone ...

  6. 阿里云ECS网站备案流程

    首先登录阿里云账号-->点击选项卡中的备案专区-->开始备案选项卡-->增加网站 然后是一大堆信息核查,之后填写网站备案信息,这里注意,有个文件审批号的选项可以不填(选择“请选择”) ...

  7. 关于 web中 使用 java.net.URLEncoder.encode 要编码两次呢 , js的encodeURIComponent 同理

    因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的原始编码格式(ISO-8859-1)自动 ...

  8. 如何使用Photoshop(PS)将图片的底色变为透明

    很多时候需要将一张图片的底色变得透明.本文描述了使用PS将图片的一部分变得透明的方法.本例将一段艺术字的背景去掉,将背景透明的文字单独保存成图片,这样以后将这段文字粘贴到其他素材上的时候,就不用担心它 ...

  9. 转载:ffmpeg 音视频合成分割

    http://blog.csdn.net/jixiuffff/article/details/5709976 当然先安装了 gentoo 下一条命令搞定 emerge  ffmpeg 格式转换 (将f ...

  10. TCP/IP详解读书笔记:链路层

    在TCP/IP协议族中,链路层主要有三个目的: 1)为IP模块发送和接受IP数据报: 2)为ARP模块发送ARP请求和接受ARP应答: 3)为RARP模块发送RARP请求和接受RARP应答: 以太网和 ...