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:
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/
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":
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