Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 Connected as SYSSQL> SHOW PARAMETER UNDO_MANAGEMENTNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO
考虑到系统开销,对于undo表空间,oracle同样不会实时收缩,而是由参数undo_retention指定时间去释放,默认是10800秒(3小时)释放一次。 DBA_UNDO_EXTENTS中记录的是undo表空间中的extents的使用情况。其中status有三个可能的值: ACTIVE,当前正在使用 UNEXPIRED ,已经不再使用,但还没有超出参数undo_retention的时间 EXPIRED,已经不再使用,且超出了undo_retention的时间设置,在oracle指定时间点释放时,这部分会被释放掉。 至于说查询方式是否正确,这主要取决于你希望得到的结果,如果你想知道当前active的undo extents被哪些进程使用,可以使用下面的查询: select max(used_ublk) FROM V$TRANSACTION;另外,你可以使用如下查询得到表空间的使用率: select f.tablespace_name tablespace_name, round((d.sumbytes / 1024 / 1024)) total_m, round((d.sumbytes - f.sumbytes) / 1024 / 1024) used_m, round(f.sumbytes / 1024 / 1024, 2) free_m, round((d.sumbytes - f.sumbytes) * 100 / d.sumbytes, 2) || '%' used_percent, round((f.sumbytes) * 100 / d.sumbytes, 2) || '%' free_percent from (select tablespace_name, sum(bytes) sumbytes from dba_free_space group by tablespace_name) f, (select tablespace_name, sum(bytes) sumbytes from dba_data_files group by tablespace_name) d where f.tablespace_name = d.tablespace_name(+) order by (d.sumbytes - f.sumbytes) * 100 / d.sumbytes desc;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as SYSSQL> SHOW PARAMETER UNDO_MANAGEMENTNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
DBA_UNDO_EXTENTS中记录的是undo表空间中的extents的使用情况。其中status有三个可能的值:
ACTIVE,当前正在使用
UNEXPIRED ,已经不再使用,但还没有超出参数undo_retention的时间
EXPIRED,已经不再使用,且超出了undo_retention的时间设置,在oracle指定时间点释放时,这部分会被释放掉。
至于说查询方式是否正确,这主要取决于你希望得到的结果,如果你想知道当前active的undo extents被哪些进程使用,可以使用下面的查询:
select max(used_ublk) FROM V$TRANSACTION;另外,你可以使用如下查询得到表空间的使用率:
select f.tablespace_name tablespace_name,
round((d.sumbytes / 1024 / 1024)) total_m,
round((d.sumbytes - f.sumbytes) / 1024 / 1024) used_m,
round(f.sumbytes / 1024 / 1024, 2) free_m,
round((d.sumbytes - f.sumbytes) * 100 / d.sumbytes, 2) || '%' used_percent,
round((f.sumbytes) * 100 / d.sumbytes, 2) || '%' free_percent
from (select tablespace_name, sum(bytes) sumbytes
from dba_free_space
group by tablespace_name) f,
(select tablespace_name, sum(bytes) sumbytes
from dba_data_files
group by tablespace_name) d
where f.tablespace_name = d.tablespace_name(+)
order by (d.sumbytes - f.sumbytes) * 100 / d.sumbytes desc;