Dba recompile invalid objects
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script SQL*Plus générateur de script |
| Domaine | Administration (objets PL/SQL invalides) |
| Voir aussi | Dba registry · Dba table info |
Dba recompile invalid objects génère dynamiquement, puis exécute, une commande ALTER ... COMPILE pour chaque objet en statut INVALID dans dba_objects (procédures, fonctions, packages, corps de package, vues...). Pratique après un import, un DDL massif sur une table référencée par des vues/packages, ou une migration de version.
Script
-- Recompile tous les objets INVALID de la base : génère un script
-- de commandes ALTER ... COMPILE puis l'exécute immédiatement.
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET LINESIZE 180
SET PAGESIZE 0
SET TRIMSPOOL ON
SET VERIFY OFF
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
SPOOL compile.sql
SELECT 'ALTER ' ||
DECODE(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) ||
' ' || object_name ||
' COMPILE' ||
DECODE(object_type, 'PACKAGE BODY', ' BODY;', ';')
FROM dba_objects
WHERE status = 'INVALID'
/
SPOOL OFF
@compile
SET FEEDBACK 6
SET HEADING ON
Fonctionnement
- Le
DECODEgère le cas particulier des corps de package (PACKAGE BODY) : Oracle attendALTER PACKAGE ... COMPILE BODYet nonALTER PACKAGE BODY ... COMPILE. - Le script généré (
compile.sql) est exécuté juste après sa génération avec@compile.
Limites
- Une seule passe : en cas de dépendances croisées (un objet A invalidé par un objet B qui vient d'être recompilé), il peut rester des objets
INVALIDaprès exécution — relancer le script une seconde fois suffit en général à les purger. - Ne gère pas les objets nécessitant un schéma qualifié différent de l'utilisateur connecté (pas de préfixe
owner.dans leALTERgénéré) : à exécuter connecté avec les privilèges adéquats, ou à adapter en ajoutantowner || '.'devantobject_name. - Sur les versions récentes,
UTL_RECOMP.RECOMP_SERIALouRECOMP_PARALLEL(fournis par Oracle) offrent une alternative plus robuste, avec parallélisation et meilleure gestion des dépendances.
Voir aussi
- Dba registry — statut des composants installés, première étape avant d'investiguer des objets invalides après un patch
- Dba table info — détail complet d'une table (colonnes, contraintes, index, triggers)