Code:
SET SERVEROUTPUT ON
DECLARE
v_schema_owner VARCHAR2(128) := 'MYSCHEMA';
CURSOR outreach_tables IS
SELECT segment_name, segment_type, partition_name
FROM dba_segments
WHERE owner = v_schema_owner
AND segment_type NOT IN ('LOBINDEX','LOBSEGMENT')
ORDER BY segment_type, segment_name;
v_total_blocks NUMBER;
v_total_bytes NUMBER;
v_unused_blocks NUMBER;
v_unused_bytes NUMBER;
v_last_used_extent_file_id NUMBER;
v_last_used_extent_block_id NUMBER;
v_last_used_block NUMBER;
v_sum_total_bytes NUMBER := 0;
v_sum_total_unused_bytes NUMBER := 0;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
FOR p_row IN outreach_tables
LOOP
IF p_row.segment_type LIKE '%PARTITION%'
THEN
DBMS_SPACE.UNUSED_SPACE(
v_schema_owner,
p_row.segment_name,
p_row.segment_type,
v_total_blocks,
v_total_bytes,
v_unused_blocks,
v_unused_bytes,
v_last_used_extent_file_id,
v_last_used_extent_block_id,
v_last_used_block,
p_row.partition_name );
ELSE
DBMS_SPACE.UNUSED_SPACE(
v_schema_owner,
p_row.segment_name,
p_row.segment_type,
v_total_blocks,
v_total_bytes,
v_unused_blocks,
v_unused_bytes,
v_last_used_extent_file_id,
v_last_used_extent_block_id,
v_last_used_block );
END IF;
v_sum_total_bytes := v_sum_total_bytes
+ NVL(v_total_bytes, 0);
v_sum_total_unused_bytes := v_sum_total_unused_bytes
+ NVL(v_unused_bytes, 0);
DBMS_OUTPUT.PUT_LINE(
RPAD(p_row.segment_type, 20) || ' ' ||
RPAD(p_row.segment_name, 30) || ' ' ||
'Total KB' || TO_CHAR(v_total_bytes/1024, '999,999,990') ||
TO_CHAR(v_unused_bytes/1024, '999,999,990') ||
TO_CHAR((v_total_bytes
- v_unused_bytes)/1024, '999,999,990'));
END LOOP;
DBMS_OUTPUT.PUT_LINE(
'Total KB alocated: ' ||
TO_CHAR(v_sum_total_bytes/1024, '999,999,990') ||
' Total KB Free: ' ||
TO_CHAR(v_sum_total_unused_bytes/1024, '999,999,990') ||
' Total KB Used: ' ||
TO_CHAR((v_sum_total_bytes -
v_sum_total_unused_bytes)/1024, '999,999,990') );
END;
/
Bookmarks