テーブルを作成して、データを入力します。
create table tab
as
select 'value' || level val
from dual
connect by level <= 10000;
次に、すべての行を削除して同じデータを挿入した場合:
delete from tab;
insert into tab
select 'value' || level val
from dual
connect by level <= 10000;
commit;
テーブルサイズは、削除後挿入が実行されるたびに増加します。これらの操作を複数回実行すると、テーブルが元のサイズの何倍にも成長します。
サイズは(ほぼ)同じままであると思います。なぜこうなった?
削除はスペースを空きとしてマークし、実際にはセグメントを縮小しません。後続の挿入では、最初にHWMの下の使用可能な空のブロックを使用する必要があります。
alter table tab shrink space
を使用してスペースを回復できます。
Oracle 12およびOracle 18cでテストしました。
My Oracle Supportにアクセスできる場合:
テーブルが使用するスペースは、削除/挿入操作を繰り返しても再利用されません(Doc ID 1601805.1)
したがって、そこからコンテンツをコピーして貼り付けるだけでなく、上記のメモは次のように述べています。
削除を使用する代わりに、TRUNCATE TABLEコマンドを使用します。