Jai une base de données Oracle 12c et une table partitionnée. Il existe une ancienne partition de 68734 Mo, soit 27% du total.

Jai besoin de supprimer cette partition. Ceci est une base de données de production et je nai pas de fenêtre de temps darrêt pour cela.

Je veux savoir si je supprime cette partition, les index de cette table seront-ils inutilisables ou reconstruits? Quelle serait la meilleure stratégie pour supprimer cette partition avec un impact minimal sur le trafic en direct?

Commentaires

  • Dépend des index. Les index globaux devront être reconstruits.

Réponse

Lorsque vous supprimez une ou plusieurs partitions, les index locaux sont a également chuté. Vous devez reconstruire les index globaux sauf si la clause UPDATE INDEXES ou UPDATE GLOBAL INDEXES est spécifiée dans la ALTER TABLE DROP PARTITION instruction.

Par exemple, jai une table appelée TBL1 avec une partition de plage et des index globaux.

SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE SQL> alter table tbl1 drop partition p0 UPDATE GLOBAL INDEXES; Table altered. SQL> select p.index_name, p.partition_name,p.status from dba_ind_partitions p, dba_indexes i where i.index_name=p.index_name and table_name="TBL1"; INDEX_NAME PARTITION_ STATUS ---------- ---------- -------- T_INDEX GI3 USABLE T_INDEX GI2 USABLE T_INDEX GI1 USABLE 

Comme vous pouvez le voir, si je spécifie la clause UPDATE GLOBAL INDEXES, les index globaux ne deviennent pas inutilisables.

Après avoir supprimé la partition, les entrées dindex appartiennent à ces partitions restent. Lorsquune requête utilise ces index, ils ignorent simplement ces entrées (orphelines). Vous pouvez nettoyer ces entrées orphelines dans votre fenêtre de maintenance régulière. Des détails sont également donnés dans les documentations suivantes.

Les opérations de maintenance de partition DROP PARTITION et TRUNCATE PARTITION sont optimisées en faisant la maintenance dindex pour les métadonnées uniquement.

Dans tous les cas, la suppression ou la troncature dune partition se termine immédiatement, lindex est toujours av utilisable et la maintenance de lindex est différée

Documentation:

  • Maintenance dindex global asynchrone pour supprimer et tronquer des partitions
  • Sur Oracle Database 12c

    Commentaires

    • Ces informations sont très utiles. Avez-vous une idée de la durée de cette opération, étant donné que cette partition contient le plus de données? Cela prendra-t-il plusieurs heures ou la perte de partition se produira-t-elle dans un délai raisonnable? (avec en secondes ou minutes)
    • Selon la dernière phrase citée ci-dessus, la suppression réelle dune partition est une opération de méta-données et nimpliquera donc que les mises à jour dune poignée denregistrements. En gros, ce sera rapide.
  • Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *