zoukankan      html  css  js  c++  java
  • Oracle10g中 system 回滚段的作用

    在Oracle10g中依然存在一个回滚段,名叫system,它是有Oracle在创建数据库的时候创建的,并且这个回滚段存在于SYSTEM表空间中。它存在的目的就是为了回滚系统事物,也就是说数据字典修改之后的镜像就存在于system回滚段。

    SQL> select segment_name,owner,tablespace_name,segment_id,file_id from dba_rollback_segs where segment_id=0;

    SEGMENT_NAME    OWNER  TABLESPACE_NAME SEGMENT_ID    FILE_ID

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

    SYSTEM          SYS    SYSTEM                   0          1

    我们查询dba_rollback_segs这个视图就可以得到系统中回滚段/撤销段信息

    为了探究system回滚段的作用,我做如下实验:

    首先在一个session中创建一个测试表,然后运行一个过程,批量插入1百万条数据

    SQL> create table test(data varchar2(100));

    表已创建。

    SQL> begin

      2    for v_loop in 1 ..1000000 loop

      3        insert into test values('test!');

      4        commit;

      5    end loop;

      6  end;

      7  /

    PL/SQL 过程已成功完成。

    同时在另外一个session中运行下面的脚本

    SQL> declare

      2    v_cnt int :=0;

      3  begin

      4    for v_loop in 1 ..1000000 loop

      5        select count(*) into v_cnt from v$transaction where xidusn=0;---xidusn表示rollback segment_id

      6        if v_cnt>0 then

      7           dbms_output.put_line('Find it');

      8        end if;

      9    end loop;

     10  end;

     11  /

    Find it

    Find it

    Find it

    Find it

    ....省略之...................

    由此实验得出system回滚段依然会被系统利用,同时得出v$transaction视图也记录后台进程的事物

    system回滚段是用了记录Oracle内部操作的,也就是数据字典更改。

    看见某本书上面写system回滚段在Oracle创建之后,就永远不会被使用,恩其实是错误的.

  • 相关阅读:
    如何保证最少消费一次redis的list队列数据
    如果设置Redis客户端的超时时长?
    REdis一致性方案探讨
    Linux后台开发工具箱-葵花宝典
    REdis主从复制之repl_backlog
    C++之Lambda研究
    Redis-5.0.5集群配置
    REdis之maxmemory解读
    [转载]centos6.3安装启动使用PostgreSQL 9.2
    [转载]linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330594.html
Copyright © 2011-2022 走看看