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
