Attributs par défaut des index et tables partitionnés

Je ne surprendrai personne en disant que Oracle Partitioning est de loin l’option la plus utile d’Oracle 11g (quoique…). Et après bientôt 3 ans à écrire sur ce blog, rien sur le sujet !

Etonnante façon, de rendre la monnaie de ma pièce, le partitioning nous a probablement évité d’arrêter une application pendant plusieurs dizaines de minutes aujourd’hui suite à une corruption du BITMAP d’un « Locally Managed Tablespace ». Pour faire court, voici l’histoire : la table principale de l’application de quelques dizaines de Giga-Octets, reçoit des nouvelles demandes tous les jours. Pour faciliter son archivage/purge, elle est partitionnée sur une séquence qui contient l’identifiant de jour, ainsi on peut facilement archiver les données ou les supprimer. Bref, après ce qui semble être un bug référencé mais non reproduit de 9.2, impossible d’allouer de nouveaux extents dans ce tablespace (Ne serait-ce pas le signe qu’il est urgent de fuir 9.2 ?) ; d’après Metalink, la table d’allocation des extents dans ce LMT est corrompue, il faut la reconstruire ! Petit problème, ça risque de prendre un long moment pour relire le tablespace en entier et reconstruire ce bitmap. Bonne nouvelle ! Les données sont toujours accessibles en lecture. 10 minutes plus tard, un nouveau tablespace créé et les partitions de la table et des index du jour dedans ; l’application est de nouveau opérationnelle. Okay ! Je vais écrire 2 ou 3 trucs sur le Partitioning prochainement, c’est promis.

D’abord, une colle : « La base a une standby ! Pensez-vous que le tablespaces est corrompu sur la standby aussi ? Je n’ai pas vraiment d’idée ; on verra ce que le VALIDATE datafiles donnera demain mais je ne m’attends pas vraiment a voir un bloc corrompu ». Remarquez qu’à priori la seule façon de vérifier, c’est d’ouvrir la Standby en écriture et que ma base fait largement plus d’1 Tera-Octets…

Ensuite, puisqu’il s’agit encore de prendre des bonnes résolutions pour 2008, si ma table était dans plusieurs tablespaces, je pourrais en cas de nécessité de restaurer, redémarré avec seulement une partie des données alors que pour l’instant…

C’est noté, je vais commencer un post un peu fouillé à propos d’Oracle Partitioning. Avant ça, qu’au moins ce post soit utile… voici comment changer les attributs par défaut de vos partitions !

Sans parler de 11g qui va, grâce au partitionnement par intervalle, jusqu’à éliminer la nécessité d’ajouter des partitions dans un tel cas, ajouter une partition à une table partitionnée par plage de valeurs est aussi simple que ce qui suit :

alter table MYTABLE
add partition P20080108
values less than (to_date('09/01/2008','DD/MM/YYYY'));

Et pourtant…

On peut imaginer que cette table a des index qui sont partitionnés selon le même critère ou que vous vouliez que la nouvelle partition soit ajoutée dans un tablespace bien spécifique. Dans un tel cas, les valeurs utilisées sont les attributs par défaut positionnés au niveau de l’index ou de la table partitionnées. Vous pouvez accéder/visualiser ces attributs par défaut dans les colonnes DEF_xxx des vues DBA_PART_INDEXES et DBA_PART_TABLES. Par exemple, les requêtes ci-dessous qui affichent les tablespaces dans lesquels sont générées les nouvelles partitions pour la table et les index de MYTABLE :

select table_name
, def_tablespace_name
from user_part_tables
where table_name='MYTABLE';

TABLE_NAME DEF_TABLESPACE_NAME
---------- -------------------
MYTABLE TABLESPACE0

select index_name
, def_tablespace_name
from user_part_indexes
where table_name='MYTABLE';

INDEX_NAME DEF_TABLESPACE_NAME
------------ -------------------
MYTABLE_IDX1 TABLESPACE1
MYTABLE_IDX2 TABLESPACE2

Remarque :
Ne pas confondre DBA_PART_INDEXES et DBA_PART_TABLES d’une part et DBA_IND_PARTITIONS/DBA_IND_SUBPARTITIONS et DBA_TAB_PARTITIONS/DBA_TAB_SUBPARTITIONS d’autre part. Les vues DBA_PART_xxx affichent les propriétés des index ou des tables qui sont spécifiques aux objets partitionnés, comme le tablespace par défaut des prochaines partitions/sous-partitions ; Les vues DBA_xxx_PARTITIONS affichent pour les index ou tables partitionnés les informations relatives aux partitions/sous-partitions déjà créées.

Pour modifier ces attributs, utilisez les commandes ALTER TABLE MODIFY DEFAULT ATTRIBUTES et ALTER INDEX MODIFY DEFAULT ATTRIBUTES comme ci-dessous :

alter table MYTABLE
modify default attributes
tablespace TABLESPACE3;

alter index MYTABLE_IDX1
modify default attributes
tablespace TABLESPACE4;

N’oubliez pas de vérifier :

select table_name
, def_tablespace_name
from user_part_tables
where table_name='MYTABLE';

TABLE_NAME DEF_TABLESPACE_NAME
---------- -------------------
MYTABLE TABLESPACE3

select index_name
, def_tablespace_name
from user_part_indexes
where table_name='MYTABLE';

INDEX_NAME DEF_TABLESPACE_NAME
------------ -------------------
MYTABLE_IDX1 TABLESPACE4
MYTABLE_IDX2 TABLESPACE2

1 réflexion sur “Attributs par défaut des index et tables partitionnés”

  1. bonjour ,
    on attend avec impatience l’article sur le partionnement;je compte partitionner une grosse table sur une sequence en base 36
    est ce que le hash partitioning est la meilleure solution ?
    merci pour tes articles et ton blog qui sans cesse nous aide à nous améliorer sur Oracle

Les commentaires sont fermés.