Comment créer une application PDB

CRÉER UNE BASE DE DONNÉES PDB D'APPLICATION

Les "conteneurs d'application" sont une fonctionnalité de la version 12 version 2 (12.2). Un conteneur d'application est un composant optionnel de la CDB permettant de stocker les données et les métadonnées d'une application. Une CDB possède 0 ou plusieurs conteneurs d'application. Chaque application est composée d'une configuration, de métadonnées et d'objets partagés. Nous pouvons donc le définir comme un conteneur d'application partagé, où différentes versions de la même application peuvent être hébergées.

Les conteneurs d'application peuvent être créés de différentes manières : à partir de PDBD seed, en clonant PDBS, pluggind ou unplugged de PDB, mais dans tous les cas, la commande CREATE PLUGGABLE DATABASE est utilisée, y compris la clause "APPLICATION CONTAINER". Pour créer un conteneur d'application, vous devez être connecté à la CDB racine, qui doit être ouverte en mode "lecture-écriture", et le nom du conteneur d'application doit être unique.

1) Déclaration de création de la base de données en tant que conteneur d'application.

À titre d'exemple, nous allons créer un conteneur d'application pour les jouets que nous appellerons "toys_root".

CREATE PLUGGABLE DATABASE toys_root AS APPLICATION CONTAINER
ADMIN USER admin identified by ****
ROLES=(CONNECT)
CREATE_FILE_DEST='/u02/app/oracle/oradata/ORCL/toys_root' ;
/

2) Avec la requête suivante, nous pouvons vérifier quel type de PDB nous avons créé dans notre architecture.

Le résultat montrera que notre PDB d'application est "Application root" (racine de l'application) à OUI.

3) Nous ouvrons la base de données que nous venons de créer.

alter pluggable database TOYS_ROOT open ;

Une fois le PDB du conteneur d'application créé, nous pouvons tester la gestion des versions de l'APP et la réplication de ces versions entre différents PDBS.

4) Nous créons une version d'application du PDB.

Connecté à la PDB TOYS_ROOT que nous exécutons.

ALTER PLUGGABLE DATABASE application TOYS_APP begin install '1.0' ;

Nous lui demandons ainsi de créer une version d'une application que nous appellerons TOYS_APP et dont la version sera 1.0.

5) Nous vérifions que le CBD a été créé correctement.

select app_name, app_version, app_status
from dba_applications
where app_name='TOYS_APP' ;

6) Nous créons un tbs de test, un utilisateur et lui donnons les permissions nécessaires :

set echo on
create tablespace toys_tbs datafile size 100M autoextend on next 10M maxsize 200M ;
create user toys_owner identified by **** container=all ;
grant create session, dba to toys_owner ;
alter user toys_owner default tablespace toys_tbs ;

Nous créons une nouvelle table afin de vérifier qu'elle se réplique correctement. Il s'agira de la version 1.0. de notre application TOYS_APP.

SQL> CREATE TABLE toys_owner.raul (one number, two varchar(2)) ;
Table créée.
SQL> insert into toys_owner. raul values(1,'r') ;
1 ligne créée.
SQL> commit ;
Commit complete.

7) Fermez l'installation de l'"application".

ALTER PLUGGABLE DATABASE application TOYS_APP end install '1.0' ;

8) Nous vérifions maintenant l'état de la demande

select app_name, app_version, app_status
from dba_applications
where app_name='TOYS_APP';

APP_NAME APP_VERSION APP_STATUS
-------------------------------
TOYS_APP 1.0 NORMAL

9) Réplication entre conteneurs

Pour le test, nous allons créer deux nouveaux PDBS, en l'occurrence "robots" et "poupées".

CREATE PLUGGABLE database robots
admin user admin identified by ***
CREATE_FILE_DEST=
'/u02/app/oracle/oradata/ORCL/toys_root/robots'
Pluggable database created.

SQL> alter pluggable database robots open;
Pluggable database altered.

CREATE PLUGGABLE database dolls
admin user admin identified by ***
CREATE_FILE_DEST=
'/u02/app/oracle/oradata/ORCL/toys_root/dolls' ;

SQL> alter pluggable database dolls open ;
Pluggable database altered.

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 TOYS_ROOT READ WRITE NO
4 PDB1 READ WRITE NO
5 TOYS_ROOT$SEED READ WRITE NO 6 ROBOTS READ WRITE NO
7 DOLLS READ WRITE NO

Nous allons maintenant dans les conteneurs nouvellement recréés pour effectuer la synchronisation de notre application.

Nous passons au conteneur ROBOTS et rafraîchissons l'application, dans ce cas tst_app

SQL> ALTER SESSION SET CONTAINER=ROBOTS;

Session altered.

SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;

Pluggable database altered.

Nous vérifions que le tableau a été actualisé

SQL> show con_name

CON_NAME
------------------------------
ROBOTS

SQL> DESC TOYS_OWNER.RAUL
Name                               Null?    Type
---------------------------------- -------- -----------------------
UNO                                         NUMBER
DOS                                         VARCHAR2(2)


SQL> select * from toys_owner.raul;

       UNO DO
---------- --
	 1 r

Nous allons effectuer la même opération de synchronisation sur l'autre PDB.

SQL> ALTER SESSION SET CONTAINER=DOLLS ;
Session modifiée.

Et nous effectuons la même opération. Nous synchronisons l'application :

SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Base de données enfichable modifiée.

Nous vérifions que la table a été répliquée :

SQL> desc toys_owner.raul
Nom Null ? Type
UNO NUMBER
DOS VARCHAR2(2)

SQL> select * from toys_owner.raul ;
UNO DO
1 r

A tout moment vous pourrez connaître l'état de votre APP, son état et sa version

Vous pouvez le vérifier avec une requête similaire à la suivante, où vous indiquez le nom de l'APP, son id, son état, si elle est implicite ou non, etc.

select app_name, app_version, app_id, app_status,
app_implicit implicit
from dba_applications ;

APP_NAME APP_VERSION APP_ID APP_STATUS I
---------------------------------------- ------------------------------ ---------- ------------ -
TOYS_APP 1.0 2 NORMAL N

10) Mettre à jour notre APP.

Une fois que nous avons créé et vérifié le fonctionnement du conteneur d'application, nous pouvons créer différentes versions de celui-ci, ou supprimer une version de l'APP lorsqu'elle n'est plus valide.

Pour mettre à jour la version de notre APP, nous devons utiliser les commandes begin upgrade / end upgrade, bien sûr à l'intérieur de l'APP_ROOT.

SQL> alter pluggable database application TOYS_APP1 begin upgrade '1.0' to '1.1' ;
Pluggable database altered.

SQL> insert into toys_owner. raul values(2,'d') ;
1 row created.
SQL> commit ;
Commit complete.

SQL> alter pluggable database application TOYS_APP1 end upgrade ;
Base de données enfichable modifiée.

SQL> alter session set container=DOLLS ;
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP1 SYNC ;
Base de données enfichable modifiée.

 SQL> SELECT * FROM TOYS_OWNER.RAUL ;
   ONE TWO
---------- --
     1 r
     2 d

11) Désinstallation d'une application

Pour désinstaller une application, il faut effectuer les opérations suivantes :

SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP BEGIN UNINSTALL ;
Base de données enfichable modifiée.

SQL> drop user toys_owner cascade ;
utilisateur supprimé.

SQL> drop tablespace TOYS_TBS INCLUANT CONTENU ET DATAFILES ;
tablespace abandonné

SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP END UNINSTALL ;
Base de données enfichable modifiée.

En bref, Oracle nous permet d'avoir des "versions" de différentes applications, qui peuvent être synchronisées par le biais de PDB, mises à jour, clonées, etc.

Défiler vers le haut