oracle undo详解

undo其实就是rollback,用来确保数据的一致性。

 

undo中数据的特点:

1、是数据修改前的备份,主要是保证用户的读一致性

2、在事务修改数据时产生

3、至少保存到事务结束

下面小实验

SQL> alter user scott identified by tiger account unlock;

User altered.

使用scott账户连接

SQL> conn scott/tiger

Connected.

SQL> select * from emp;

 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7369 SMITH      CLERK           7902 17-DEC-80        800

        20

      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300

        30

      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500

        30

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7566 JONES      MANAGER         7839 02-APR-81       2975

        20

      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400

        30

      7698 BLAKE      MANAGER         7839 01-MAY-81       2850

        30

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7782 CLARK      MANAGER         7839 09-JUN-81       2450

        10

      7788 SCOTT      ANALYST         7566 19-APR-87       3000

        20

      7839 KING       PRESIDENT            17-NOV-81       5000

        10

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0

        30

      7876 ADAMS      CLERK           7788 23-MAY-87       1100

        20

      7900 JAMES      CLERK           7698 03-DEC-81        950

        30

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7902 FORD       ANALYST         7566 03-DEC-81       3000

        20

      7934 MILLER     CLERK           7782 23-JAN-82       1300

        10

14 rows selected.

SQL> update emp set sal=4000 where empno=7788

  2  ;

1 row updated.

SQL> select * from emp where empno=7788;

 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7788 SCOTT      ANALYST         7566 19-APR-87       4000

        20

另外连接一个账户或者session

oracle:/# su - oracle

$ sqlplus / as sysdba

SQL> select * from scott.emp where empno=7788;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM

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

    DEPTNO

----------

      7788 SCOTT      ANALYST         7566 19-APR-87       3000

        20

可以看到未commit,通过oracle的前镜像(old image)进行一致性读,将3000回复出来提供给用户,这就是传说中的一致性读。

    当然这里提交了,数据就永久被更改了,那无论那个用户看到的都是4000了。

 

undo数据的作用:

1rollback           

   当用户执行DML操作修改数据时,UNDO数据被存放到UNDO段,而新数据被放到数据段里。

2recovery        

3consistent reads  

      

        上面的小实验可以看到一致性读,这里面包含着scn的关系,)

用户检索数据库数据时,Oracle总是使用户只能看到被提交的数据(读取提交)或特定时间点的数据(select语句的时间点),这样可以确保数据的一致性。

        假定查询开始的时间为t1,则在查询获取的数据块中,如果数据块提交scn小于t1,则oracle获得该数据;当然如果数据块的提交scn大于t1或者数据被锁定修改尚未记录commit scn,则oracle需要从undo段构造前镜像返回结果,这才是一致性读的本质含义。

4.flashback

通过undo段闪回   

  

undo回滚段的特点:

1.回滚段是由实例自动创建用于支持事务运行的专用段,同样是区和块组成,回滚顶会按实际需要自动进行增长或收缩,是一段可以给指定事务循环使用的存储缓冲区。

2.每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务

3.当一个事务开始的时候,会指定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。

4。在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不够用,事务会在段中请求扩展下一个盘区,如果所有已分配的盘区都被用完,事务会覆盖最初的盘区或者在回滚段允许的情况下扩展新的盘区来使用.

5。回滚段存在于undo表空间中,在数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值