Oracle : maintenance des tables et des index
L’objet de la procédure stockée que je vais vous présenter est de réduire les tables et reconstruire les index d’un schéma. Ainsi, vous disposerez d’un accès plus rapide à vos données !
La procédure ne fonctionne pas pour les tables mises en cluster !
Réduction des tables et reconstruction des index
CREATE OR REPLACE PROCEDURE maintenance (user VARCHAR2) IS cursor cTables IS SELECT table_name FROM dba_tables WHERE owner=user; cursor cIndexes IS SELECT index_name FROM dba_indexes WHERE owner=user; sql_stmt VARCHAR2(1024); BEGIN FOR rTable in cTables LOOP sql_stmt := 'ALTER TABLE ' || user || '.'|| rTable.TABLE_NAME || ' ENABLE ROW MOVEMENT'; EXECUTE IMMEDIATE sql_stmt; sql_stmt := 'ALTER TABLE ' || user|| '.' || rTable.TABLE_NAME || ' SHRINK SPACE COMPACT'; EXECUTE IMMEDIATE sql_stmt; sql_stmt := 'ALTER TABLE ' || user || '.'|| rTable.TABLE_NAME || ' DISABLE ROW MOVEMENT'; EXECUTE IMMEDIATE sql_stmt; END LOOP; FOR rIndex in cIndexes LOOP sql_stmt := 'ALTER INDEX ' || user || '.' || rIndex.index_name || ' REBUILD'; EXECUTE IMMEDIATE sql_stmt; END LOOP; END;
Utilisation de la procédure
Vous devez passer en paramètre le nom du schéma – le nom de l’utilisateur – auquel appartiennent tables et index ! L’utilisateur qui exécute la procédure stockée doit disposer des droits sur les objets de l’utilisateur. Il peut s’agir de SYS ou de SYSTEM !
EXEC maintenance('CRM');