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