Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

LAMI DBA

Hello,


Je vais vous parler aujourd'hui de quelque chose qui a été introduit avec la version 12c R2 : Automatic List Partitioning.
Vue le nom, je pense que tout le monde a compris ce que cela fait, mais histoire que l'article ne s'arrête pas la, la preuve par l'exemple avec évidemment un petit case de test.

SQL>
SQL> create table clients (idclient number, departement number, nomclient varchar2(50)) partition by list (departement)
  2  (
  3  partition p78 values (78),
  4  partition p75 values (75),
  5  partition p95 values (95)
  6  );

Table created.

SQL>


Nous avons donc notre table clients partitionnée par département. Insérons quelques clients.

 

SQL>
SQL> insert into clients values (1,78,'rasta');

1 row created.

SQL> insert into clients values (2,95,'romeo');

1 row created.

SQL> insert into clients clients values (3,75,'jumbo');

1 row created.

SQL> commit;

Commit complete.

SQL>


Tout se passe bien. Mes lignes sont insérées. Que se passe t-il maintenant si je veux insérer une ligne avec un client provenant du 92.

SQL>
SQL> insert into clients values (4,92,'prettyboy');
insert into clients values (4,92,'prettyboy')
            *
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition


SQL>


Patatra ! Ma table est partitionnée par liste, et je n'ai pas prévu la partition pour le département 92. Cela a pu être fait à raison. Il n'y a aucune raison de créer des partitions si a priori il n'y aura rien dedans. Mais Oracle dans sa bonté inégalable a pensé à nous avec le "Automatic List Partitioning"

SQL>
SQL> alter table clients set PARTITIONING AUTOMATIC;

Table altered.

SQL>
SQL>  insert into clients values (4,92,'prettyboy');

1 row created.

SQL> commit;

Commit complete.

SQL>


Et voila plus d'erreur ! Evidemment, si l'objectif est de ne pas avoir de plantage, il aurait fallu créer la table le partitioning Automatic activé. Pour le bon déroulement de l'article, j'ai d'abord voulu être bloqué dans l'insertion.
La confiance n'excluant pas le contrôle.On peut vérifier rapidement ce qu'il s'est passé au niveau de mes partitions.


La colonne num_rows n'est pas renseigné et j'en suis le seul coupable ;) Les stats n'ont pas été calculé sur ma table. Qu'à cela ne tienne..

SQL>
SQL> exec dbms_stats.gather_table_stats('LAO','CLIENTS',cascade=>TRUE);
PL/SQL procedure successfully completed.
SQL>


Et hop


Nous avons bien nos trois partitions créées initialement plus la partition crée à la volée par notre ami Oracle. Oracle n'a pas poussé l'IA jusqu'à la nommer correctement mais c'est quand même mieux qu'un plantage. Il conviendra de prévoir des temps de maintenance pour eventuellement renommer, merger, splitter nos partitions... Mais cela fera l'objet de nouveaux articles.

ATTENTION : Pour utiliser le partitioning, il faut :

  1. Disposer d'une version Oracle Enterprise
  2. Disposer de l'option ("Extra Cost) Oracle Partitioning.

Enjoy ;)

 

commentaires

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

A propos de LAMI-DBA

Le Blog LAMI-DBA est la fusion de deux blogs existants, celui de LAurent (laodba) et celui de MIckael (dbafaq), deux DBA passionnés des sgbd, et particulièrement d'Oracle.

 

Laurent, 47 ans, Expert Oracle & MS SQL Server, Team Leader, dit "Le Taz", Certifié Expert RAC 11G, Exadata Implementation Specialist, OCA 11G, 

Profil Linkdin

 

 

 

Mickael, 37 ans, Expert Oracle, dit "Batman", Certifié Expert RAC 11G, OCP 11G, OCP 10G,

Profil Linkdin      

 

Hébergé par Overblog