Oracle 10g中 system 回滚段的作用 |
发布时间: 2012/8/24 17:19:27 |
在Oracle10g中依然存在一个回滚段,名叫system,它是有Oracle在创建数据库的时候创建的,并且这个回滚段存在于SYSTEM表空间中。它存在的目的就是为了回滚系统事物,也就是说数据字典修改之后的镜像就存在于system回滚段。
SEGMENT_NAME OWNER TABLESPACE_NAME SEGMENT_ID FILE_ID --------------- ------ --------------- ---------- ---------- SYSTEM SYS SYSTEM 0 1
为了探究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回滚段是用了记录Oracle内部操作的,也就是数据字典更改。 看见某本书上面写system回滚段在Oracle创建之后,就永远不会被使用,恩其实是错误的. 本文出自:亿恩科技【www.enkj.com】 |