Files
oracle/vdh/segment_space_usage.sql
2026-03-12 21:23:47 +01:00

131 lines
6.5 KiB
SQL

set serveroutput on
set verify off
DECLARE
l_segment_owner varchar2(30);
l_segment_name varchar2(30);
l_partition_name varchar2(30);
l_segment_type varchar2(30);
l_unformatted_blocks number;
l_unformatted_bytes number;
l_fs1_blocks number; -- Number of blocks that has at least 0 to 25% free space
l_fs1_bytes number; -- Number of bytes that has at least 0 to 25% free space
l_fs2_blocks number; -- Number of blocks that has at least 25 to 50% free space
l_fs2_bytes number; -- Number of bytes that has at least 25 to 50% free space
l_fs3_blocks number; -- Number of blocks that has at least 50 to 75% free space
l_fs3_bytes number; -- Number of bytes that has at least 50 to 75% free space
l_fs4_blocks number; -- Number of blocks that has at least 75 to 100% free space
l_fs4_bytes number; -- Number of bytes that has at least 75 to 100% free space
l_full_blocks number; -- Total number of blocks that are full in the segment
l_full_bytes number; -- Total number of bytes that are full in the segment
l_total_blocks number;
l_total_bytes number;
l_unused_blocks number;
l_unused_bytes number;
l_last_used_extent_file_id number;
l_last_used_extent_block_id number;
l_last_used_block number;
l_free_blks number;
l_segment_space_management varchar2(30);
BEGIN
select ts.segment_space_management
into l_segment_space_management
from dba_segments seg, dba_tablespaces ts
where seg.owner = '&&segment_owner'
and seg.segment_name = '&&segment_name'
and ( '&&partition_name' is null
or seg.partition_name = '&&partition_name'
)
and seg.tablespace_name = ts.tablespace_name;
if l_segment_space_management = 'AUTO'
then
dbms_space.space_usage
( segment_owner => '&&segment_owner',
segment_name => '&&segment_name',
segment_type => '&&segment_type',
partition_name => '&&partition_name',
unformatted_blocks => l_unformatted_blocks,
unformatted_bytes => l_unformatted_bytes,
fs1_blocks => l_fs1_blocks,
fs1_bytes => l_fs1_bytes,
fs2_blocks => l_fs2_blocks,
fs2_bytes => l_fs2_bytes,
fs3_blocks => l_fs3_blocks,
fs3_bytes => l_fs3_bytes,
fs4_blocks => l_fs4_blocks,
fs4_bytes => l_fs4_bytes,
full_blocks => l_full_blocks,
full_bytes => l_full_bytes
);
dbms_output.put_line('blocks');
dbms_output.put_line(' unformatted : ' || to_char(l_unformatted_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' 0 to 25% free space : ' || to_char(l_fs1_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' 25 to 50% free space : ' || to_char(l_fs2_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' 50 to 75% free space : ' || to_char(l_fs3_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' 75 to 100% free space : ' || to_char(l_fs4_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' full : ' || to_char(l_full_blocks, '9G999G999G999G999G999'));
dbms_output.new_line;
dbms_output.put_line('bytes');
dbms_output.put_line(' unformatted : ' || to_char(l_unformatted_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' 0 to 25% free space : ' || to_char(l_fs1_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' 25 to 50% free space : ' || to_char(l_fs2_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' 50 to 75% free space : ' || to_char(l_fs3_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' 75 to 100% free space : ' || to_char(l_fs4_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' full : ' || to_char(l_full_bytes, '9G999G999G999G999G999'));
else
dbms_space.free_blocks
( segment_owner => '&&segment_owner',
segment_name => '&&segment_name',
segment_type => '&&segment_type',
freelist_group_id => 0,
free_blks => l_free_blks
);
dbms_output.put_line('free blocks : ' || to_char(l_free_blks, '9G999G999G999G999G999'));
end if;
dbms_space.unused_space
( segment_owner => '&&segment_owner',
segment_name => '&&segment_name',
segment_type => '&&segment_type',
partition_name => '&&partition_name',
total_blocks => l_total_blocks,
total_bytes => l_total_bytes,
unused_blocks => l_unused_blocks,
unused_bytes => l_unused_bytes,
last_used_extent_file_id => l_last_used_extent_file_id,
last_used_extent_block_id => l_last_used_extent_block_id,
last_used_block => l_last_used_block
);
dbms_output.put_line('blocks');
dbms_output.put_line(' total : ' || to_char(l_total_blocks, '9G999G999G999G999G999'));
dbms_output.put_line(' unused : ' || to_char(l_unused_blocks, '9G999G999G999G999G999'));
dbms_output.new_line;
dbms_output.put_line('bytes');
dbms_output.put_line(' total : ' || to_char(l_total_bytes, '9G999G999G999G999G999'));
dbms_output.put_line(' unused : ' || to_char(l_unused_bytes, '9G999G999G999G999G999'));
dbms_output.new_line;
dbms_output.put_line('last used extent');
dbms_output.put_line(' file id : ' || to_char(l_last_used_extent_file_id, '9G999G999G999G999G999'));
dbms_output.put_line(' starting block id : ' || to_char(l_last_used_extent_block_id, '9G999G999G999G999G999'));
dbms_output.put_line(' last block : ' || to_char(l_last_used_block, '9G999G999G999G999G999'));
END;
/
undefine segment_owner
undefine segment_name
undefine segment_type
undefine partition_name