Migration des LOB dans un tablespace dédié

De manière unitaire, pour une colonne de type LOB dans une table non partitionnée, non temporaire :
ALTER TABLE t1 MOVE LOB(col1) STORE AS (TABLESPACE TBSLOB);

De manière unitaire, la colonne d'une partition de la table t1, non temporaire :
ALTER TABLE TEST MOVE PARTITION P1 LOB(TEST_NAME) STORE AS (TABLESPACE EXAMPLE);

ALTER TABLE TEST MOVE SUBPARTITION SP1 LOB(TEST_NAME) STORE AS (TABLESPACE EXAMPLE);

Il faut alors créer un script PL sur ces traitements :


SET serveroutput ON;

DECLARE
tbs_ok VARCHAR2(3 CHAR);
ordre_sql VARCHAR2(32000 CHAR);
nomTable VARCHAR2(200 CHAR);
nomColonne VARCHAR2(200 CHAR);

BEGIN
DBMS_OUTPUT.ENABLE(1000000);

SELECT 'OK' INTO tbs_ok FROM DBA_TABLESPACES WHERE tablespace_name = 'TBSLOB';

FOR lob_cols IN (
SELECT table_name nomTable, column_name nomColonne FROM ALL_TAB_COLS
WHERE data_type LIKE '%LOB%'
AND owner = 'ACP'
AND table_name IN (SELECT table_name FROM ALL_TABLES WHERE partitioned = 'NO' AND TEMPORARY = 'N')
)

LOOP
ordre_sql := 'ALTER TABLE '
|| lob_cols.nomTable
|| ' MOVE LOB('
|| lob_cols.nomColonne
|| ') STORE AS (TABLESPACE TBSLOB)';
EXECUTE IMMEDIATE ordre_sql;
DBMS_OUTPUT.PUT_LINE(ordre_sql);
END LOOP;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE('Il faut créer le tablespace TBSLOB avant d effectuer cette action');
END;
/


Voir également, la migration des index dans un tablespace dédié.




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories