您的位置:首页 > 数据库 > Oracle

undo系列学习之undo段及区的状态和使用概述

2012-07-31 11:32 169 查看
    undo表空间只做一件事:保存旧值。在AUM下,段是自动生成,区是自动分配与回收,且是不连续的。每个段至少有2个区。oracle自动使用undo段,在某种意义上,我们只要关注undo表空间的大小就可以了。

    查询当前哪个undo表空间被激活:

sys@ORCL> show parameter undo_tablespace

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1


    查询undo表空间里面有多少个数据文件:

sys@ORCL> col file_name for a72
sys@ORCL> select file_name,bytes/1024/1024 m from dba_data_files where tablespace_name like '%UNDOTBS%';

FILE_NAME                                                                         M
------------------------------------------------------------------------ ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf              100
/u01/app/oracle/oradata/ORCL/datafile/thinkundo.dbf                              30


    查询undo表空间里面在线有多少个段:

sys@ORCL> select * from v$rollname;

USN NAME
---------- ------------------------------
0 SYSTEM
1 _SYSSMU1$
2 _SYSSMU2$
3 _SYSSMU3$
4 _SYSSMU4$
5 _SYSSMU5$
6 _SYSSMU6$
7 _SYSSMU7$
8 _SYSSMU8$
9 _SYSSMU9$
10 _SYSSMU10$

11 rows selected.


    查询段有多少个区和块:

sys@ORCL> select segment_name,extents,blocks from dba_segments where segment_name='_SYSSMU3$';

SEGMENT_NAME       EXTENTS     BLOCKS
--------------- ---------- ----------
_SYSSMU3$               17        256


    查询区有多少个块:

sys@ORCL> select file_id,tablespace_name,segment_name,extent_id,block_id,blocks from dba_extents where
2  segment_name='_SYSSMU3$';

FILE_ID TABLESPACE_NAME                SEGMENT_NAME     EXTENT_ID   BLOCK_ID     BLOCKS
---------- ------------------------------ --------------- ---------- ---------- ----------
2 UNDOTBS1                       _SYSSMU3$                0         41          8
2 UNDOTBS1                       _SYSSMU3$                1         49          8
2 UNDOTBS1                       _SYSSMU3$                2         17          8
2 UNDOTBS1                       _SYSSMU3$                3         33          8
2 UNDOTBS1                       _SYSSMU3$                4        161          8
2 UNDOTBS1                       _SYSSMU3$                5        169          8
2 UNDOTBS1                       _SYSSMU3$                6        177          8
2 UNDOTBS1                       _SYSSMU3$                7        185          8
2 UNDOTBS1                       _SYSSMU3$                8        201          8
2 UNDOTBS1                       _SYSSMU3$                9        209          8
2 UNDOTBS1                       _SYSSMU3$               10        217          8
2 UNDOTBS1                       _SYSSMU3$               11        225          8
2 UNDOTBS1                       _SYSSMU3$               12        233          8
2 UNDOTBS1                       _SYSSMU3$               13        241          8
2 UNDOTBS1                       _SYSSMU3$               14        249          8
2 UNDOTBS1                       _SYSSMU3$               15        257          8
7 UNDOTBS1                       _SYSSMU3$               16        521        128

17 rows selected.


    从这里我们也可以看出,undo段中的区的分配是不连续的。

    undo段中区的状态:

    1)free:没有分配给任何一个段

    2)active:区中有事务没有提交

    3)inactive:区中的事务提交了

    4)expired:事务提交而且达到了undo_retention

    注:我们可以通过设定undo_retention来保住inactive的区,若没有free,则自动扩展;若扩展不了,则优先使用expired;若还不够,则就会使用inactive,但如果此时retention是guarantee保证的,则无法使用inactive,会报ORA-30036.

sys@ORCL> select extent_id,bytes,status from dba_undo_extents where segment_name='_SYSSMU3$';

EXTENT_ID      BYTES STATUS
---------- ---------- ---------
0      65536 EXPIRED
1      65536 EXPIRED
2      65536 EXPIRED
3      65536 EXPIRED
4      65536 EXPIRED
5      65536 EXPIRED
6      65536 EXPIRED
7      65536 EXPIRED
8      65536 EXPIRED
9      65536 EXPIRED
10      65536 EXPIRED
11      65536 EXPIRED
12      65536 EXPIRED
13      65536 EXPIRED
14      65536 EXPIRED
15      65536 EXPIRED
16    1048576 EXPIRED

17 rows selected.

    undo段上默认只有一个事务,当有多个事务时,会优先选择空闲的undo段,只有在没有了空闲undo段时,oracle才会选择在一个undo段上建立多个事务。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息