[ 2018-02-09 ]

Oracle Database 12.2: Acceso con EM Express a múltiples PDBs utilizando un único puerto

Una de las mejoras introducidas en Oracle Enterprise Manager Database Express ("EM Express") a partir de 12.2, particularmente para ambientes multitenant,  es la posibilidad de utilizar un único puerto o URL para acceder a cualquiera de las PDBs dentro de un CDB.
Cuando realizamos un inicio de sesión en "EM Express",  ahora podemos especificar  el nombre de una “pluggable database” lo cual nos permite ingresar directamente a la misma. El principal beneficio de esta nueva opción, es no tener que configurar más un puerto diferente por cada una de las PDB de la base de datos. En el caso que no indiquemos ninguna PDB durante el "logging", entraremos directamente al root container.

Veamos como funciona:
Usamos para ejemplificar un CDB (cdb12cr2) con una PDB (pdb12cr2) a la cual accederemos por "EM Express".

1) Primero identificamos el puerto utilizado por "EM Express" y verificamos el acceso “default” luego de la creación de una base.

Por defecto, el uso de esta nueva característica (único puerto para acceder a las "pluggables databases") viene deshabilitado. Por lo tanto no podremos acceder a la PDB hasta que no lo habilitemos.
Veamos qué pasa entonces cuando el acceso está deshabilitado e intentamos ingresar a la consola.

Como primer paso averiguamos cual es el puerto que está utilizando "EM Express". La URL de acceso tendrá la siguiente forma:

https://{database-hostname}:{portnumber}/em/

Para obtener el puerto utilizamos la siguiente consulta:

SQL> select dbms_xdb_config.gethttpsport() from dual;

DBMS_XDB_CONFIG.GETHTTPSPORT()
------------------------------
                          5500
Está utilizando el 5500. Si la consulta devuelve un valor distinto de 0 (en este caso el 5500) ese es el puerto configurado y el que debemos utilizar para conectarnos. Por el contrario, si retorna 0 significa que no hay configurado ningún puerto HTTPS para acceder al CDB.  Debemos entonces establecerlo utilizando DBMS_XDB_CONFIG.SETHTTPSPORT.

El acceso a distintas PDBs por único puerto es controlado por la propiedad GLOBALPORTENABLED. Sus valores pueden ser TRUE (habilitado) y FALSE (deshabilitado).

Con el siguiente código PL/SQL podemos ver cual es configuración actual:

SQL> WITH
  2  FUNCTION b2vc (in_bool_expr VARCHAR2) RETURN VARCHAR2 IS
  3     l_bool  BOOLEAN;
  4     l_plsql VARCHAR2(32767);
  5     l_ret   VARCHAR2(5);
  6  BEGIN
  7     l_plsql := 'BEGIN :l_bool := ' || in_bool_expr || '; END;';
  8     EXECUTE IMMEDIATE l_plsql USING OUT l_bool;
  9     IF l_bool IS NOT NULL THEN
 10        IF l_bool THEN
 11           l_ret := 'TRUE';
 12        ELSE
 13           l_ret := 'FALSE';
 14        END IF;
 15     END IF;
 16     RETURN l_ret;
 17  END b2vc;
 18  SELECT b2vc('DBMS_XDB_CONFIG.ISGLOBALPORTENABLED') FROM dual;
 19  /

B2VC('DBMS_XDB_CONFIG.ISGLOBALPORTENABLED')
--------------------------------------------------------------------------------
FALSE

En este caso está en "FALSE" (deshabilitado) que es el valor por defecto.

Si intentamos acceder a la consola, utilizando la URL https://<IP_ADDRESS>:5500/em indicando el nombre de la PDB en el campo “nombre del contenedor”, recibimos una nueva ventana de inicio de sesión XDB, pero aúnque probamos con varios usuarios diferentes, como SYS, SYSTEM y otros, ninguno nos permite acceder. Esto justamente de debe a que está deshabilitada la opción.



2- Habilitamos el acceso

Para habilitar el acceso a las PDBs por puerto único ejecutamos la siguiente sentencia:

SQL> exec dbms_xdb_config.setglobalportenabled(TRUE);

PL/SQL procedure successfully completed.

Verificamos luego con el código que utilizamos anteriormente:

SQL> WITH
  2  FUNCTION b2vc (in_bool_expr VARCHAR2) RETURN VARCHAR2 IS
  3     l_bool  BOOLEAN;
  4     l_plsql VARCHAR2(32767);
  5     l_ret   VARCHAR2(5);
  6  BEGIN
  7     l_plsql := 'BEGIN :l_bool := ' || in_bool_expr || '; END;';
  8     EXECUTE IMMEDIATE l_plsql USING OUT l_bool;
  9     IF l_bool IS NOT NULL THEN
 10        IF l_bool THEN
 11           l_ret := 'TRUE';
 12        ELSE
 13           l_ret := 'FALSE';
 14        END IF;
 15     END IF;
 16     RETURN l_ret;
 17  END b2vc;
 18  SELECT b2vc('DBMS_XDB_CONFIG.ISGLOBALPORTENABLED') FROM dual;
 19  /

B2VC('DBMS_XDB_CONFIG.ISGLOBALPORTENABLED')
--------------------------------------------------------------------------------
TRUE

Ahora se encuentra habilitado ("TRUE").

Probamos entonces nuevamente el acceso por la consola de "EM Express":


Ahora si podemos ingresar sin problemas.


En el "dashboard" principal se indica que se trata de la PDB12CR2 en el CDB con nombre CDB12CR2. 
Como comenté anteriormente, si no especificamos una PDB en particular en el momento de logging, vamos a ingresar directamente al "roor container":



Para tener en cuenta,  si queremos ingresar por consola a una PDB en estado "close", recibiremos el siguiente mensaje de error:

“Error:
Fallo en la conexión con la base de datos. La instancia de base de datos podría estar inactiva. Vuelva a intentarlo cuando esté activo.”


Para poder entrar debemos entonces abrir la PDB. Podemos hacerlo de la siguiente manera:

SQL> alter pluggable database pdb12cr2 open;

Pluggable database altered.

Espero que esta información les resulte de utilidad.

Referencias: 
Martin Berger        https://www.martinberger.com/?p=4131
Philipp Salvisberg https://www.salvis.com/blog
Note 2170770.1

No hay comentarios:

Publicar un comentario