CREAR UNA APPLICATION PDB DATABASE
Los «contenedores de aplicación» es una característica de la versión 12 versión 2 (12.2). Un «application container» es un componente CDB opcional para almacenar datos y metadatos para una aplicación. Un CDB tiene 0 o varios contenedores de aplicaciones. Cada aplicación está compuesta por una configuración, metadatos y objetos compartidos. Podemos por tanto definirlo como un contenedor de aplicaciones compartidas, donde se pueden albergar diferentes versiones de la misma.
Applicantion Containers pueden ser creado de diferentes formas: desde PDBD seed, clonando PDBS, pluggind or unplugged de PDB, pero en todos los casos se usa el comando CREATE PLUGGABLE DATABASE, incluyendo la cláusula «APPLICATION CONTAINER». Para crear una Application container, debes de estar conectado al CDB root, y este debe estart abierto en modo «read write», y el nombre de la applicaton container debe de ser único.
1) Sentencia para crear la base de datos como Application Container.
A modo de ejemplo crearemos una Application Container de juguetes a la que llamaremos «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) Con la siguiente consulta, podemos comprobar qué tipo de PDBs hemos creado en nuestra arquitectura.
El resultado mostrará nuestra Application PDB como «Application root» a YES.
3) Abrimos la base de datos que acabamos de crear.
alter pluggable database TOYS_ROOT open;
Una vez creada Application Container PDB, ya podemos realizar una prueba de cómo se gestionan las versiones de APP y cómo estas versiones se pueden replicar entre las diferentes PDBS.
4) Creamos una versión de aplicación de la PDB.
Conectados a la PDB TOYS_ROOT ejecutamos.
ALTER PLUGGABLE DATABASE application TOYS_APP begin install ‘1.0’;
Con ello le estamos indicando que se cree una versión de una applicación a la que llamaremos TOYS_APP y cuya versión será la 1.0.
5) Comprobamos si la CDB se ha creado correctamente.
select app_name, app_version, app_status
from dba_applications
where app_name=’TOYS_APP’;
6) Creamos un tbs de prueba, un usuario y damos los permisos necesarios:
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;
Creamos una nueva tabla con el fin de comprobar que se replica correctamente. Será la versión 1.0. de nuestra aplicación TOYS_APP.
SQL> CREATE TABLE toys_owner.raul (uno number, dos varchar(2));
Table created.
SQL> insert into toys_owner. raul values(1,’r’);
1 row created.
SQL> commit;
Commit complete.
7) Cerramos la instalación de la «aplicación»
ALTER PLUGGABLE DATABASE application TOYS_APP end install ‘1.0’;
8) Comprobamos ahora el estado de la aplicación
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) Replicación entre contenedores
Para realizar la prueba, vamos a crear dos nuevas PDBS, en este caso «robots» y muñecas «dolls».
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
Ahora nos vamos a los contenedores recientemente recreados para realizar la sincronización de nuestra aplicación.
Cambiamos al contenedor ROBOTS y refrescamos la aplicación, en este caso tst_app
SQL> ALTER SESSION SET CONTAINER=ROBOTS;
Session altered.
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Pluggable database altered.
Comprobamos que la tabla se ha refrescado
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
Vamos a realizar la misma operación de sincronización en la otra PDB.
SQL> ALTER SESSION SET CONTAINER=DOLLS;
Session altered.
Y realizamos la misma operativa. Sincronizamos la aplicación:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Pluggable database altered.
Comprobamos que la tabla se ha replicado:
SQL> desc toys_owner.raul
Name Null? Type
UNO NUMBER
DOS VARCHAR2(2)
SQL> select * from toys_owner.raul;
UNO DO
1 r
En todo momento podrás conocer el estado de tú APP, cómo son el estado en el que se encuentra y su versión
Puedes chequarlo con una query similar a la siguiente, donde se indica el nombre de la APP, su id, su estado, si es o no implícita, 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) Subir de versión nuestra APP.
Una vez que hemos creado y comprobado el funcionamiento de las Application Container, podemos crear diferentes versiones de la misma, o borrar una versión de APP cuando ya no nos sea válida.
Para subir la versión de nuestra APP, tenemos que usar los comandos begin upgrade / end upgrade, por supuesto dentro de la 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;
Pluggable database altered.
SQL> alter session set container=DOLLS;
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP1 SYNC;
Pluggable database altered.
SQL> SELECT * FROM TOYS_OWNER.RAUL; UNO DOS ---------- -- 1 r 2 d
11) Desistalar una aplicación
Para desinstalar una aplicación debemos realizar las siguientes acciones:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP BEGIN UNINSTALL; Pluggable database altered. SQL> drop user toys_owner cascade; user dropped. SQL> drop tablespace TOYS_TBS INCLUDING CONTENTS AND DATAFILES; tablespace dropped SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP END UNINSTALL; Pluggable database altered.
En definitiva, Oracle nos permite tener «versiones» de diferentes aplicaciones, que pueden ser sincronizadas a través de las PDB, actualizadas, clonadas, etc.