数据库建好以后自动有undo表空间,undo表空间里自动有undo段(这一点与普通表空间不同)。Undo段里的区是自动分配的(这一点和普通表空间一样),块也是自动使用的。
Undo表空间与普通表空间的不同:
1. undo段是自动生成的,自动维护的;
2. oracle自动使用undo段,普通表空间的段是手工创建的也是手工使用的;
查看undo表空间:
SQL> showparameter undo_tablespace;
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
undo_tablespace string UNDOTBS1
查看undo表空间由哪些数据文件组成:
SQL> selectfile_name, bytes/1024/1024 from dba_data_files where tablespace_name like'%UNDOTBS%';
FILE_NAME BYTES/1024/1024
-------------------------------------------------------------------------------- ---------------
/u01/app/oracle/oradata/JIAGULUN/datafile/o1_mf_undotbs1_7p5b155m_.dbf 35
查看undo表空间里有哪些段:
SQL> select * fromv$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.
有11个段,其中1到10段在UNDOTBS1表空间里,而0号段在系统表空间(system表空间)里面。
当创建一张表的时候,表的各种信息会写到数据字典里面,也就是记录到system表空间里。也就是说,对数据库的对象进行增加和删除的时候,oracle会操作数据字典,此时会用到system表空间,操作system表空间时oracle会用到system里的undo段(0号段)。如果undo表空间坏了,oracle可能会使用system的undo段。
查看一个undo段:
SQL> selectsegment_name, blocks, extents from dba_segments where segment_name='_SYSSMU1$';
SEGMENT_NAME BLOCKS EXTENTS
------------------ ------------------------- --------------
_SYSSMU1$ 24 3
_SYSSMU1$段有3个区,24个块
Oracle整个undo这块都是自动管理的。
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1