PL/SQL
set serveroutput on
declare
segment_owner varchar2(30) := '&owner';
segment_name varchar2(30) := '&table';
segment_type varchar2(30) := 'TABLE';
unformatted_blocks number;
unformatted_bytes number;
fs1_blocks number;
fs1_bytes number;
fs2_blocks number;
fs2_bytes number;
fs3_blocks number;
fs3_bytes number;
fs4_blocks number;
fs4_bytes number;
full_blocks number;
full_bytes number;
begin
DBMS_SPACE.SPACE_USAGE(
segment_owner,
segment_name,
segment_type,
unformatted_blocks,
unformatted_bytes,
fs1_blocks,
fs1_bytes,
fs2_blocks,
fs2_bytes,
fs3_blocks,
fs3_bytes,
fs4_blocks,
fs4_bytes,
full_blocks,
full_bytes
);
dbms_output.put_line('空き領域が0-25% Blocks = ' || rpad(fs1_blocks, 15) || ' Bytes = ' || fs1_bytes);
dbms_output.put_line('空き領域が25-50% Blocks = ' || rpad(fs2_blocks, 15) || ' Bytes = ' || fs2_bytes);
dbms_output.put_line('空き領域が50-75% Blocks = ' || rpad(fs3_blocks, 15) || ' Bytes = ' || fs3_bytes);
dbms_output.put_line('空き領域が75-100% Blocks = ' || rpad(fs4_blocks, 15) || ' Bytes = ' || fs4_bytes);
dbms_output.put_line('一杯になったもの Blocks = ' || rpad(full_blocks, 15) || ' Bytes = ' || full_bytes);
end;
出力例
空き領域が0-25% Blocks = 0 Bytes = 0 空き領域が25-50% Blocks = 0 Bytes = 0 空き領域が50-75% Blocks = 0 Bytes = 0 空き領域が75-100% Blocks = 22 Bytes = 180224 一杯になったもの Blocks = 286 Bytes = 2342912
deleteでデータを削除した後の出力例
一杯になったBlockが空きが75から100のところに移動している。deleteなので使用済みのblockはそのままのこっている
空き領域が0-25% Blocks = 0 Bytes = 0 空き領域が25-50% Blocks = 0 Bytes = 0 空き領域が50-75% Blocks = 0 Bytes = 0 空き領域が75-100% Blocks = 308 Bytes = 2523136 一杯になったもの Blocks = 0 Bytes = 0
truncate後の出力例
HWMがリセットされている。空き領域が0-25% Blocks = 0 Bytes = 0 空き領域が25-50% Blocks = 0 Bytes = 0 空き領域が50-75% Blocks = 0 Bytes = 0 空き領域が75-100% Blocks = 0 Bytes = 0 一杯になったもの Blocks = 0 Bytes = 0