Translate

mercredi 18 février 2015

Survol d'une Pluggable database 12c

Je m'amuse à vous montrer une note que j'avais écrit il y a quelques mois, que j'espère sera encore utile pour ceux qui n'ont pas encore commencé à travailler avec la version 12c

Cette fois-ci je vais vous parler de la fonctionnalité Multitenant de Oracle12c et voici quelques petits détails que j’ai réussi à vérifier.

En principe le multitenant a besoin d’une licence, donc, ces essais ont été faits localement et juste pour des fins démonstratives dans un environnement Windows 64bits.

En principe, une base de donné container a été créée «CDB1 » celle-ci contient une base de données pluggable appelée «PDB1».

Avant de commencer, est-ce que vous vous rappelez des vues de système « USER » , « ALL » et « DBA » ? et que des fois, certaines de ces vues ont de problèmes de performance? 

Bon, dorénavant avec 12c et cette fonctionnalité de pluggable database on aura de vues préfixées « CDB_ »  et ces vues comportent de colonnes additionnelles telles que «con_id »  qui sert principalement à identifier l’appartenance d’un objet à un PDB ou à un CDB.



Cela dit, pour être plus clair avec l’explication, dès le début vous avez un container root qui s’appelle CDB$ROOT.

Pour ceux qui connaissent SQL Server, le container ressemble un peu (en gardant ses distances) à une installation SQL Server avec son « master » et « msysdb » et ses bases de données des utilisateurs.

Ci-dessous vous voyez la liste de containers ID avec leur respective base de données ou service.



·         Le con_id 1 est réservé pour le vrai CDB, nommé « CDB1 »
·         Le con_id 2 est réservé pour PDB$SEED qui est un «template » d’un PDB
·        Les con_id suivants sont assignés à tous les PDB créés sur le CDB. Dans mon exemple le con_id 3 correspond à « PDB1 »

Dès que vous ouvrez une session en tant que sys «sqlplus / as sysdba »  vous êtes dirigé automatiquement sur le container de CDB1  soit CDB$ROOT, vous pouvez valider cela avec les commandes ci-dessous.



 
·       Mais, allons voir comment est-elle vraiment enregistrée. La fenêtre ci-dessous montre les datafiles de notre base de données, mais juste de ceux qui font partie de notre CDB, n’oubliez pas que je suis sur un environnement Windows sans ASM.
 



Donc, pour aller voir la liste complète il va falloir recourir à la vue « CDB_ » respective. Ci-dessous on peut voir la liste complète des « datafiles » où on peut remarquer qu’on a effectivement d’autres « datafiles » pour la PDB appelée PDB1




La chose la plus intéressant c’est de remarquer qu’il y a un system et un sysaux pour la CDB et des autres pour le PDB. Mais à quel point sont-ils indépendants? On va le voir après.

·       Une autre chose à remarquer selon la documentation, il a juste un jeu de controlfile (bien sûr on peut en créer d’autres par sécurité) mais en fait, le seul controlfile existant est celui géré par le CDB; donc, comment sont gérés les datafiles de nos PDB’s ?
Pour cela on va créer un fichier de texte de notre controlfile





Voici une partie du résultat, comme on peut apprécier, il contient la liste complète de tous les datafiles ( CDB et PDB y compris), On peut voir aussi, les redologs partagés. Une fonctionnalité et un risque à noter.



On voit aussi, un undo pour l’ensemble de bd’s ou plus en cas d’un RAC CDB.

Qu’est-qui arrive avec le CONTROL_FILE_RECORD_KEEP_TIME? Si jamais on a plusieurs PDB, étant donné ce qu’on voit, on ne serait pas capable de conserver un délai différent par PDB.  Se servir d’un catalogue est presque une règle partout...presque. En plus, il faudrait configurer la valeur en fonction de la plus longue besoin de rétention parmi toutes les PDB. À noter que ces modifications on peut les faire seulement si on est connecté sur le CDB1.

·         Avez-vous pensé aux TEMP’s ?  il y en a juste un au moment de la création, cependant on peut créer un temp pour chaque PDB ce qu’à mon avis serait mieux, pour qu’il soit assigné comme son DEFAULT_TEMPORARY_TABLESPACE. Des autres temp’s pour les usagers ? Oui bien sûr.

Vous avez vécu certainement des problèmes avec le nombre grandissant des datafiles chez les clients, ceci ajouté à un manque de prévision au moment de créer la base de données ? Donc, il serait bon de bien choisir le MAXDATAFILES pas juste en fonction des datafiles d’une bd sinon de toutes les PDB’s qu’on pense y ajouter.
Il reste à voir aussi l’impact du MAXINSTANCES avec un environnement de plusieurs PDB’s, théoriquement il limite le nombre d’instances ouvertes, donc, aussi à surveiller.

·         Et comment accède-t-on à notre PDB ? Pour ça il y a quelques alternatives.
Soit, ouvrir la connexion directement ou changer la session, mais, il faut faire attention avec quelques petits détails.




        Qu’est-ce qui est arrivé dans ce cas?, on voit que le container actif est le PDB1 mais le nombre de la base de données est celle du container CDB1. Plus mêlés encore si on voit juste la liste des datafiles de PDB1?.



Même cas si on ouvre la connexion directement sur PDB1



Pourquoi? La réponse est simple, le V$CONTROLFILE montre l’information contenue dans le controlfile, et état donné qu’il y en a juste un…
Donc, si jamais vous avez des client où on fait cette validation dans les procédures, il faudra changer ça plutôt pour une lecture du SYS_CONTEXT.



Dans ce cas, on peut confirmer qu’on est bel et bien sur la base de données correcte.

·         Arrêt et démarrage? Pour arrêter une pluggable database vous avez une façon élégante et l’autre un peu plus connue, il faudrait quand même valider si les deux méthodes sont supportées par Oracle.
Dès qu’on est dans la session d’une pluggable database on peut faire ceci, veuillez noter le message très court à la fermeture et démarrage.



     Dès qu’on est dans la session de la CDB, on doit faire plutôt :

Mais, … il y a toujours un « mais », est-ce que notre pluggable database est vraiment fermée?



La réponse est non, ceci est compréhensible étant donné qu’un seul controlfile existe et qu’il est utilisé par le CDB, et qui pourtant il continue à accéder sur les datafiles de toutes les PDB’s existantes et ceux de la CDB.


·         Et l’alertlog ? Bon, il y en a juste un. Moins de complications pour gérer la rotation des logs?, oui probablement, mais plus compliqué à retracer les erreurs. Quand tout va bien, c’est bien beau :)




Bon, j’espère vous que cette information sera toujours utile pour quelques uns.



Bonne journée.