列を削除して再度追加する代わりに、shrink space
条項
:
ALTER TABLE t MODIFY LOB (c) (SHRINK SPACE);
db <> fiddle
、これは18cですが、11gでも動作するはずです。 (後で:はい、それはretention none
で11gR2で行います とにかく省略。 SQL Fiddleはそれが好きではありません。)
その詳細を見逃しましたが、それでも機能します。 XMLType列をバックアップする非表示のBLOB列を見つけるには、追加の手順が必要です。alter
を作成しました その場でそれを拾うためだけに動的ですが、手動で見つけることができれば、明らかに自分でステートメントにプラグインすることができます:
DECLARE
l_name USER_TAB_COLUMNS.COLUMN_NAME%TYPE;
l_stmt VARCHAR2(100);
BEGIN
select column_name
into l_name
from user_tab_cols
where
table_name = 'T' and hidden_column = 'YES'
and
column_id = (
select column_id
from user_tab_cols
where table_name = 'T' and column_name = 'X'
);
l_stmt := 'ALTER TABLE t MODIFY LOB ("' || l_name || '") (SHRINK SPACE)';
dbms_output.put_line(l_stmt);
execute immediate l_stmt;
END;
/
おそらくこれがbasicfile
で機能することは注目に値します 最小限のデモに示されているように、ストレージですが、securefile
では機能しない可能性があります ストレージ-ORA-10635をスローする時間の少なくとも一部:無効なセグメントまたはテーブルスペースタイプ。