sábado, 23 de mayo de 2020

Oracle Container Database 19c: Creando un nuevo servicio a una Pluggable Database

La arquitectura de contenedor de base de datos, viene a revolucionar el mundo de las bases de datos de Oracle.

Desde la versión 12c, es posible poder consolidar hasta 252 bases de datos, compartiendo las mismas estructuras de memoria y procesos de background, optimizando así el uso de recursos físicos de un servidor.

El concepto de instancia de base de datos en una arquitectura NON-CDB ( No contenedor de base de datos ), se vuelve obsoleta a partir del conjunto de características que obtenes con la gestión de los contenedores de base de datos.

Las bases de datos acopladas o Pluggable Database, son las homólogas de las instancias de base de datos en la arquitectura acostumbrada hasta la versión 11g.

Como lo mencioné anteriormente, un contenedor de base de datos, puede consolidar una gran cantidad de instancias de bases de datos y administrarlas como si fueran una sola.

En la versión de Oracle Database 19c, tenemos los siguientes límites asociados a una instancia de base de datos:
  1. Cantidad ilimitada de índices por tabla
  2. 1000 columnas máximo por tabla
  3. Máximo 30 columnas en un índices tipo bitmap
  4. Ilimitada cantidad de políticas de restricción (constraints)
  5. Máximo 255 suconsultas en la cláusula WHERE
  6. Máximo 16 columnas en una partición llave
  7. Máximo 1024K-1 (más de un millón) particiones por tabla o índices
  8. Cantidad ilimitada de registros por tabla
  9. Máximo apróximado de 6 millones de líneas de código en paquetes almacenados
  10. Máximo 2.147 millones de usuarios y roles por base de datos.
  11. Cantidad ilimitada de tablas por base de datos.
  12. En versión Standard Edition máximo 3 PDBs (no requiere licenciamiento adicional)
  13. En versión Enterprise Edition máximo 252 PDBs
  14. En versión Oracle Database Cloud Service SE/EE máximo 3 PDBs
  15. En versión Oracle Database Cloud Service EE-HP (High Performance),EE-ES (Enginneered Systems) y EE-EP (Extreme Performance) y ExaCS (Exadata Cloud Service) limite de 4096 PDBs
En una base de datos Oracle Database 19c, es posible utilizar el paquete DBMS_SERVICE para crear, eliminar, activar y desactivar servicios para una instancia de base de datos.

Los servicios, permiten definir un punto distinto de conexión y agrupar de forma lógica las sesiones que se conectan a la base de datos.

En el ejemplo a continuación, vamos a crear un servicio nuevo para una base de datos PDB ya existente en nuestro contenedor de base de datos.


[oracle@instancia-oracledbacr-ol7 ~]$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Sun May 17 00:25:35 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         5 PDB2                           MOUNTED

Como observan, tenemos creadas dos instancias PDB en este contenedor. Vamos a crear un nuevo servicio para atender conexiones de usuarios, para la instancia PDB1.

Para ello, primero que todo, vamos a cambiar al área de contenedor en donde se encuentra corriendo la instancia PDB1.

SQL> alter session set container=pdb1;

Session altered.


SQL> col name format a20
SQL> col pdb format a10
SQL> show con_id


SERVICE_ID NAME                 PDB            CON_ID
---------- -------------------- ---------- ----------
         7 PDB1                 PDB1                3

A través del paquete DBMS-SERVICE, vamos a crear un servicio que tenga como nombre "prodpdb1".

Para la creación del servicio, es suficiente con pasar dos parámetros al paquete:

  1. El nombre del servicio, cuya longitud no puede exceder los 64 caracteres
  2. El nombre de la red del servicio utilizado en el descriptor de la conexión del SQLNet.


SQL> exec dbms_service.create_service('prodpdb1','prodpdb1');

PL/SQL procedure successfully completed.

Una vez creado, es necesario inicar el servicio.

SQL> exec dbms_service.start_service('prodpdb1');

PL/SQL procedure successfully completed.

Posteriormente, debemos verificar que el servicio se encuentre publicado en el estado del LISTENER.

SQL>  !lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 00:27:15

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-MAY-2020 21:28:56
Uptime                    9 days 2 hr. 58 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/instancia-oracledbacr-ol7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "CDB1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a5267bb51fc44546e0530200000ab31d" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a527364c23c85543e0530200000a9a19" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "prodpdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
The command completed successfully


Ahora que confirmamos que el servicio se encuentra siendo atendido por el servicio LISTENER, vamos a proceder a cerrar la instancia PDB y volverla a reiniciar.

SQL> connect / as sysdba
Connected.
SQL> alter pluggable database pdb1 close;

Pluggable database altered.

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> alter session set container=pdb1;

Session altered.


Seguidamente, conectados en la PDB1 vamos a solicitar al servicio PMON, que haga el registro del nuevo servicio de base de datos con Listener. Durante el registro del servicio, el PMON proporciona al LISTENER la siguiente información:

  • Nombre de la instancia asociada
  • Carga actual y carga máxima en la instancia
  • Nombres de servicios de DB proporcionados por la base de datos.
  • Información sobre servidores dedicados y despachadores (depende del modo del servidor de la base de datos, es decir, el modo conexión al servidor dedicado/compartido)

El proceso PMON se activa cada 60 segundos y proporciona información al LISTENER. Si surge algún problema y el proceso PMON falla, entonces no es posible registrar información al LISTENER periódicamente. Cuando esto sucede,  se puede hacer el registro de servicio de manera manual, usando el comando:

SQL>  alter system register;

System altered.


Ahora podemos validar que el servicio que hemos creado, se encuentre disponible a nivel del contenedor de la base de datos.

Observe, que el ID de servicio es distinto tanto para el servicio original, como para el nuevo creado, sin embargo, el CON_ID que es el indentificar del servicio en el contenedor, es el mismo.

SQL> select service_id,name,pdb,con_id from cdb_services order by con_id;

SERVICE_ID NAME                 PDB            CON_ID
---------- -------------------- ---------- ----------
         7 PDB1                 PDB1                3
         1 prodpdb1             PDB1                3

Ahora procedo a arrancar el servicio.

SQL> exec dbms_service.start_service('prodpdb1');

PL/SQL procedure successfully completed.

SQL> !lsnrctl status;

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 00:31:52

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-MAY-2020 21:28:56
Uptime                    9 days 3 hr. 2 min. 55 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/instancia-oracledbacr-ol7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "CDB1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a5267bb51fc44546e0530200000ab31d" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a527364c23c85543e0530200000a9a19" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "prodpdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
The command completed successfully

Luego es necesario salvar el estado de configuración en la instancia PDB1 y reiniciar la base de datos.

SQL> alter pluggable database save state;

Pluggable database altered.

SQL> alter pluggable database close;

Pluggable database altered.

SQL> alter pluggable database open;

Pluggable database altered.

SQL>  !lsnrctl status;

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 17-MAY-2020 00:32:45

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                07-MAY-2020 21:28:56
Uptime                    9 days 3 hr. 3 min. 48 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/instancia-oracledbacr-ol7/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instancia-oracledbacr-ol7.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "CDB1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a5267bb51fc44546e0530200000ab31d" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "a527364c23c85543e0530200000a9a19" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
Service "prodpdb1" has 1 instance(s).
  Instance "CDB1", status READY, has 1 handler(s) for this service...
The command completed successfully

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0


Por último, debemos probar que es posible conectarnos a la base de datos, con el nuevo servicio creado.

[oracle@instancia-oracledbacr-ol7 ~]$ sqlplus hr/hr@127.0.0.1:1521/prodpdb1

SQL*Plus: Release 19.0.0.0.0 - Production on Sun May 17 00:35:18 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Sat May 16 2020 23:39:30 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show user
USER is "HR"
SQL> show con_id

CON_ID
------------------------------
3
SQL>

Comprobación exitosa y caso cerrado, como dicen por ahí.

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar