Seit 30 Jahren warte ich auf dieses Feature, aber wie sagt man besser spät als nie …
Ab 23ai kann nun endlich ein Tablespace reorganisiert werden. Es gibt da nur ein paar Einschränkungen:
- Es muss ein Bigfile Tablespace sein
- Es dürfen keine exotischen und schreibgeschützten Objekte dort liegen wie z.B.
aud$unified
Zuerst prüfen wir mal, welche Tablespaces sich den lohnen bzgl eines Reorg?
set serveroutput on linesize 400
set long 9999999
WITH function analyze_tbs(tbs_name In VARCHAR2) RETURN CLOB
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_result CLOB:=empty_clob();
BEGIN
dbms_output.put_line('### '||tbs_name||' ###:');
DBMS_SPACE.TABLESPACE_SHRINK(tbs_name,
SHRINK_MODE => DBMS_SPACE.TS_MODE_ANALYZE,
SHRINK_RESULT => v_result);
RETURN tbs_name||':'||chr(10)||v_result;
END;
select analyze_tbs(tablespace_name)
from dba_tablespaces
where bigfile='YES'
and contents='PERMANENT';
Nun können wir einen Tablespace von Oracle shrinken/reorganisieren …
BEGIN
DBMS_SPACE.TABLESPACE_SHRINK('SYSAUX',
SHRINK_MODE => dbms_space.ts_mode_shrink,
target_size => dbms_space.ts_target_max_shrink);
END;
/
Viel Spaß mit dem neuen gewonnen Speicherplatz. Die Einsparung kann man ja nun in eine Schulung stecken :-)