Activation/désactivation d’indexe

Avant quand je voulais désactivé un indexe, je le supprimai car il me semblait que s’était impossible de le désactiver (comme une contrainte avec l’option DISABLE).

Et puis finalement il y avait bien une option pour ne pas avoir à supprimer un indexe juste pour le désactiver.

Voici la méthode pour par exemple désactiver les indexes d’une table avant insertion dans cette dernière (ce qui permet d’accélérer les traitements) :

1
2
3
4
5
6
7
8
9
10
11
12
13
BEGIN
    FOR C1 IN (
        SELECT INDEX_NAME
        FROM user_indexes
        WHERE TABLE_NAME = 'MA_TABLE'
        AND INDEX_NAME LIKE 'IDX%'
    ) LOOP

        EXECUTE IMMEDIATE 'ALTER INDEX ' || C1.INDEX_NAME || ' UNUSABLE';

    END LOOP;

END;

Ensuite pour les réactiver :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BEGIN

    FOR C1 IN (
        SELECT INDEX_NAME
        FROM user_indexes
        WHERE TABLE_NAME = 'MA_TABLE'
        AND INDEX_NAME LIKE 'IDX%'
    ) LOOP

        EXECUTE IMMEDIATE 'ALTER INDEX ' || C1.INDEX_NAME || ' REBUILD';

    END LOOP;

END;

Laisser un commentaire