system表空间急剧增大原因分析

system表空间增大是正常的,但急剧增大是不合理的。

1有可能是用户对象错误的放在系统表空间中

2也可能是system表空间的UNDO过大

3还有可能和高级复制的空间使用有关

可通过如下语句查看一下是不是有应用的段放到了SYSTEM中:
select OWNER,SEGMENT_NAME,SEGMENT_TYPE,BYTES
from DBA_SEGMENTSwhere TABLESPACE_NAME='SYSTEM' and OWNER not in ('SYS','SYSTEM')

通过如下查询语句查看找出系统表空间中占用空间最多的Top9对象

SELECT *
FROM (SELECT BYTES, segment_name, segment_type, owner
FROM dba_segments
WHERE tablespace_name = 'SYSTEM'
ORDER BY BYTES DESC)
WHERE ROWNUM < 10

高级复制会使用 sys.IDL_UB1$

摘自,Database Administrator’s Guide 第70页
If you use Advanced Replication and intend to set up a large number of replicated
objects, then you are required to monitor the following data dictionary tables with
the SQL SELECT command:
n ARGUMENT$
n IDL_CHAR$
n IDL_UB1$
n IDL_UB2$
n IDL_SB4$
n I_ARGUMENT1
n I_SOURCE1I$
n SOURCE$
n TRIGGER
If necessary, increase storage parameters to accommodate storage requirements of
large numbers of replicated objects.

请参考eygle的文章(http://www.eygle.com/archives/2007/01/idl_ub1_table.html)

系统对象IDL_UB1$表的含义及作用

在ITPUB上有朋友遇到SYSTEM表空间快速扩展的问题

系统表空间异常扩展的情况遇到过很多:
有的和用户表空间或对象分配不当有关
有的和高级复制的空间使用有关....

经过如下代码查询,可以找出系统表空间中占用空间最多的Top9对象:

col segment_name for a25
col owner for a10
SELECT *
  FROM (SELECT   BYTES, segment_name, segment_type, owner
            FROM dba_segments
           WHERE tablespace_name = 'SYSTEM'
        ORDER BY BYTES DESC)
 WHERE ROWNUM < 10
/


这个朋友的Top9对象为:

1    3082174464  IDL_UB1$	TABLE	SYS
2    63979520      SOURCE$	TABLE	SYS
3    12075008      IDL_UB2$	TABLE	SYS
4    7749632	      DEPENDENCY$	TABLE	SYS
5    7356416	      I_DEPENDENCY2	INDEX	SYS
6    6438912	      I_DEPENDENCY1	INDEX	SYS
7    5521408	      I_IDL_UB11  	INDEX	SYS
8    4341760	      IDL_SB4$	TABLE	SYS
9    3555328	      I_ACCESS1  	INDEX	SYS


我们注意到占用空间最大的对象是IDL_UB1$系统表,空间占用近3G,那么这个表是做什么用的呢?
从sql.bsq中我们可以找到这个表的创建语句:

create table idl_ub1$                            /* idl table for ub1 pieces */
( obj#          number not null,                            /* object number */
  part          number not null,
         /* part: 0 = diana, 1 = portable pcode, 2 = machine-dependent pcode */
  version       number,                                    /* version number */
  piece#        number not null,                             /* piece number */
  length        number not null,                             /* piece length */
  piece         long raw not null)                              /* ub1 piece */
  storage (initial 10k next 100k maxextents unlimited pctincrease 0)
/



idl_ub1$表是用来存储PL/SQL的代码单元的,包括DIANA等,IDL在这里代表Interface Definition Language.
这个对象的含义可以从Ixora找到一点
提示:

It is an intermediate language in which the structure of database tables and the logic of PL/SQL program units can be consistently represented as attributed trees. Oracle uses the DIANA IDL, which comes from compilers for the Ada programming language. DIANA stands for Descriptive Intermediate Attributed Notation for Ada. Anyway, this is one of four tables in the data dictionary used to store the DIANA for PL/SQL program units, and the database objects that they reference.



在高级复制中会用到这个表,所以可能导致这个表快速增长,在Oracle10g之前,高级复制需要考虑的事情的确很多。

请参考:

ITPUB论坛 http://www.itpub.net/showthread.php?s=&threadid=707073

IXORA网站 http://www.ixora.com.au/q+a/dd.htm

posted @ 2011-08-23 15:16  chaobj  阅读(5103)  评论(0编辑  收藏  举报