create table SPACE_TEMP ( TABLESPACE_NAME CHAR(30), CONTIGUOUS_BYTES NUMBER) / declare cursor query is select * from dba_free_space order by tablespace_name, block_id; this_row query%rowtype; previous_row query%rowtype; total number; begin open query; fetch query into this_row; previous_row := this_row; total := previous_row.bytes; loop fetch query into this_row; exit when query%notfound; if this_row.block_id = previous_row.block_id + previous_row.blocks then total := total + this_row.bytes; insert into SPACE_TEMP (tablespace_name) values (previous_row.tablespace_name); else insert into SPACE_TEMP values (previous_row.tablespace_name, total); total := this_row.bytes; end if; previous_row := this_row; end loop; insert into SPACE_TEMP values (previous_row.tablespace_name, total); end; . / set pagesize 60 set newpage 0 set echo off ttitle center 'Contiguous Extents Report' skip 3 break on "TABLESPACE NAME" skip page duplicate spool contig_free_space.lis rem column "CONTIGUOUS BYTES" format 999,999,999,999 column "COUNT" format 999 column "TOTAL BYTES" format 999,999,999,999 column "TODAY" noprint new_value new_today format a1 rem select TABLESPACE_NAME "TABLESPACE NAME", CONTIGUOUS_BYTES "CONTIGUOUS BYTES" from SPACE_TEMP where CONTIGUOUS_BYTES is not null order by TABLESPACE_NAME, CONTIGUOUS_BYTES desc; select tablespace_name, count(*) "# OF EXTENTS", sum(contiguous_bytes) "TOTAL BYTES" from space_temp group by tablespace_name; spool off drop table SPACE_TEMP /
example output:
SQL> @TFSTSFRM Table created. PL/SQL procedure successfully completed. Contiguous Extents Report TABLESPACE NAME CONTIGUOUS BYTES ------------------------------ ---------------- EXAMPLE 32,768,000 Contiguous Extents Report TABLESPACE NAME CONTIGUOUS BYTES ------------------------------ ---------------- SYSAUX 3,211,264 Contiguous Extents Report TABLESPACE NAME CONTIGUOUS BYTES ------------------------------ ---------------- SYSTEM 371,130,368 SYSTEM 393,216 Contiguous Extents Report TABLESPACE NAME CONTIGUOUS BYTES ------------------------------ ---------------- UNDOTBS1 13,500,416 UNDOTBS1 524,288 UNDOTBS1 458,752 UNDOTBS1 458,752 UNDOTBS1 327,680 UNDOTBS1 262,144 UNDOTBS1 196,608 UNDOTBS1 131,072 UNDOTBS1 131,072 UNDOTBS1 131,072 UNDOTBS1 65,536 UNDOTBS1 65,536 UNDOTBS1 65,536 UNDOTBS1 65,536 UNDOTBS1 65,536 UNDOTBS1 65,536 UNDOTBS1 65,536 Contiguous Extents Report TABLESPACE NAME CONTIGUOUS BYTES ------------------------------ ---------------- USERS 10,995,367,936 USERS 1,048,576 USERS 393,216 USERS 262,144 USERS 196,608 26 rows selected. Contiguous Extents Report TABLESPACE_NAME # OF EXTENTS TOTAL BYTES ------------------------------ ------------ ---------------- EXAMPLE 1 32,768,000 UNDOTBS1 17 16,580,608 USERS 7 10,997,268,480 SYSAUX 1 3,211,264 SYSTEM 2 371,523,584 Table dropped.
非常谢谢博主,顶一下