Bonjour à tous!
Je souhaiterais mettre en œuvre une base de données Oracle contenant une table partitionnée, et dont chaque partition serait distribuée sur des instances distinctes.
Un exemple simple : une table CLIENT dont le champ ville contient deux valeurs possibles : 'Marseille' ou 'Paris'.
Physiquement : on a une instance Oracle à Marseille et une autre à Paris.
Logiquement : on a une seule table CLIENT qui serait une sortie de vue sur les deux partitions, nommées CLIENT_M et CLIENT_P.
Objectif : effectuer des requêtes de manières transparente (par exemple, lors d'un insert, ne pas préciser la partition de destination) tout en ayant la possibilité de faire des select sur une seule partition (les clients de la partition à Marseille, pour ne pas consulter inutilement la partition à Paris).
Après avoir bien parsé la doc Oracle et divers forum, état des lieux de ce qui est possible :
- le partitionnement par valeur est très bien intégré dans Oracle. J'ai pu créer une table CLIENT avec deux partitions, mais dans une même base. Les insert/update/delete se font de manière transparente (sans spécifier explicitement la partition de destination), et les select des manières suivantes :
Ou, si l'on ne souhaite interroger qu'une partition :
SELECT * FROM CLIENT PARTITION(CLIENT_M);
Pour ce qui est de la distribution, là aussi y'a plein de doc qui explique comment faire des liens (database links) d'une base vers une autre.
Par exemple, je peux créer deux tables (CLIENT_M et CLIENT_P) dans deux instances et y accéder assez simplement lors des requêtes CRUD via les liens.
Par contre ici, tout doit être géré manuellement côté applicatif (enfin, si j'ai bien compris), ce qui implique par exemple :
SELECT * FROM CLIENT@PARIS_LINK;
Et surtout :
INSERT INTO CLIENT@PARIS_LINK VALUES(...);
Par conséquent, je voudrais savoir si une personne qui s'y connaît plus que moi en DBA Oracle a déjà rencontré ce problème... où une piste pour contourner ce problème.
Un moyen de "faker" le SGBD serait (je n'ai pas encore essayé) de faire une view dans chaque instance qui référencerait le contenu de la table locale et de la table distante.
Pour les insert, update et delete, à l'aide de triggers on doit pouvoir intercepter les requêtes et les "orienter".
C'est hyper crado je sais mais c'est juste pour savoir si c'est possible en théorie!
Désolé pour le message un peu long, j'espère que c'était clair au moins 
Merci par avance pour les éventuelles réponses.
Guigouz
Partager