Se aplica a:
Bases de datos Oracle: Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Sistemas operativos: Oracle Linux 6.4 con kernel 2.6.39-400.109.17.1.el6uek.x86-64 y
Red Hat Enterprise Linux con kernel 2.6.32-431.el6.x86_64
Plataformas de almacenamiento: Dell EqualLogic PS 5000 y Dell EqualLogic PS 6110
Problema:
¿Cómo conectarse a las bases de datos que se pueden conectar en Oracle RAC 12cR1?
Solución:
Existen cuatro formas en las que se puede establecer una conexión con las bases de datos que se pueden conectar (PDB).
- Mediante el servicio predeterminado con el mismo nombre que el nombre de PDB, que se crea automáticamente en el software de la base de datos.
- Mediante el uso de servicios definidos por el usuario, creados con la propiedad de PDB a través de la utilidad SRVCTL que asocia el servicio con las bases de datos que se pueden conectar
- Mediante el uso del comando “alter session” y la configuración del contenedor que se desea usar
- Mediante el uso de Enterprise Manager Express
1. Uso del servicio predeterminado para conectarse a la PDB
Para establecer una conexión con la PDB mediante el servicio predeterminado, se debe realizar lo siguiente.
- Se debe realizar una entrada en el archivo tnsnames.ora que define las direcciones de las bases de datos que nos permiten establecer una conexión con la base de datos.
- El estado de la PDB debe cambiarse de montada al modo de lectura/escritura.
Entrada que se realizará en el archivo tnsnames.ora:
En el caso de Oracle RAC 12c, aunque el software de la base de datos crea automáticamente un servicio predeterminado con el mismo nombre que el nombre de la base de datos que se puede conectar, el archivo tnsnames.ora se genera únicamente con una sola entrada, la cual pertenece a la base de datos global. Por ejemplo, en el caso de un Oracle RAC 12c de dos nodos, donde cpdb es la base de datos global, pdb1 y pdb2 son las dos bases de datos conectables creadas y cpdb1 y cpdb2 son las dos instancias, la entrada predeterminada en el archivo tnsnames.ora es como se muestra a continuación:
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
por lo tanto, se deben crear entradas relevantes para el nombre de servicio predeterminado de las bases de datos conectables en el archivo tnsnames.ora como se muestra a continuación:
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.dbase.lab)
)
)
PDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb2.dbase.lab)
)
)
Cambio del estado de la base de datos conectable:
Cuando se crean las pdb, de manera predeterminada, el open_mode es solo “Mounted”. Esto se puede verificar de la siguiente manera:
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
El siguiente comando abre todas las bases de datos conectables en un modo de lectura y escritura.
SQL> Alter pluggable database all open;
Después de esto,
se puede establecer una conexión con la base de datos mediante sqlplus de la siguiente manera:
[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Tue Oct 8 11:23:32 2013
Copyright (c) 1982, 2013, Oracle. Todos los derechos reservados.
Connected to:
Oracle Database 12c Enterprise Edition versión 12.1.0.1.0 - Producción de 64 bits con partición, Real Application Clusters, Automatic Storage Management, OLAP, análisis avanzados y opciones de prueba en aplicaciones reales
2. Uso del servicio definido por el usuario para conectarse a la PDB
El servicio predeterminado descrito anteriormente solo debe utilizarse para fines administrativos y no debe utilizarse para aplicaciones. Siempre se deben utilizar los servicios definidos por el usuario para las aplicaciones, ya que los servicios definidos por el usuario pueden personalizarse para adaptarse a los requisitos de las aplicaciones. El establecimiento de una conexión mediante los servicios definidos por el usuario implica los siguientes pasos:
- Cree un servicio de base de datos con la propiedad de PDB mediante la utilidad SRVCTL
- Cree una entrada en el archivo tnsnames.ora para el servicio creado
- Inicie el servicio
- Conéctese a la base de datos mediante el servicio que tiene la propiedad de PDB, creada en el paso "a"
a. Crear un servicio de base de datos con la propiedad PDB mediante la utilidad SRVCTL
Los siguientes comandos utilizados mediante la utilidad SRVCTL crean dos servicios de base de datos hr1 y sales1 que se asociarán con la base de datos conectable pdb1 :
[[oracle@node1 bin]$ srvctl add service -db cpdb -service hr1 -pdb pdb1 -preferred cpdb1 -available cpdb2
[oracle@node1 bin]$ srvctl add service -db cpdb -service sales1 -pdb pdb1 -preferred cpdb1 -available cpdb2
La propiedad pdb se puede ver desde la vista del diccionario de datos all_services.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
El comando $ srvctl config service –db <databasename> también enumera los servicios disponibles.
b. Crear una entrada en el archivo tnsnames.ora para el servicio de base de datos creado
Podemos crear los nombres de servicio de red HR_PDB1 y SALES_PDB1 que la aplicación hr y la aplicación de ventas pueden utilizar, respectivamente, para conectarse a la base de datos que se puede conectar, pdb1, de la siguiente manera:
HR_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hr1.dbase.lab)
)
)
SALES_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales1.dbase.lab)
)
)
c. Inicie el servicio
[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1
El servicio hr1 no se está ejecutando
[oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1
El inicio del servicio asociado con una pdb abre automáticamente la pdb en un modo de lectura y escritura.
d. Conéctese al servicio de base de datos
Un usuario se conecta a la pdb mediante un servicio de base de datos que tiene la propiedad pdb.
Por ejemplo, el usuario SYS puede conectarse a la pdb1 mediante el servicio de base de datos HR_PDB1 asociado con pdb1 de la siguiente manera:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Uso del comando “Alter Session” para conectarse a la PDB
De manera predeterminada, cuando se conecta a la instancia de RAC, se conecta a CDB$ROOT. Cada instancia de RAC abre la PDB en su totalidad, y se encuentra disponible una sola imagen del sistema. Cuando desea cambiar la sesión a una pdb, puede hacerlo mediante la modificación de la sesión y la configuración del contenedor en el contenedor deseado. La consulta show con_name se puede usar para verificar el nombre del contenedor actual.
[oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:56:27 2013
Copyright (c) 1982, 2013, Oracle. Todos los derechos reservados.
Conectado a:
Oracle Database 12c Enterprise Edition versión 12.1.0.1.0 - Producción de 64 bits
Con partición, Real Application Clusters, Automatic Storage Management, OLAP,
análisis avanzados y opciones de prueba en aplicaciones reales
SQL> show con_name;
CON_NAME
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME
PDB1
SQL> ALTER SESSION SET CONTAINER = PDB2;
Session altered.
SQL> SHOW CON_ID;
CON_ID
4
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME
CDB$ROOT
Las siguientes son las descripciones de ID del contenedor:
ID del contenedor |
Descripción |
0 |
CDB completa |
1 |
CDB$ROOT |
2 |
PDB$SEED |
De 3 a 254 |
PDB |
Tabla 1: Descripciones de ID de contenedor
En este ejemplo específico, con_id 3 representa pdb1 y con_id 4 representa pdb2.
[grid@node1 bin]$ echo $ORACLE_HOME
/u01/app/12.1.0/grid
[grid@node1 bin]$ echo $ORACLE_SID
+ASM1
[grid@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:51:39 2013
Copyright (c) 1982, 2013, Oracle. Todos los derechos reservados.
Conectado a:
Oracle Database 12c Enterprise Edition versión 12.1.0.1.0 - Producción de 64 bits
Con las opciones Real Application Clusters y Automatic Storage Management,
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4. Uso de Enterprise Manager (EM) Express para conectarse a la PDB
Cuando la base de datos se crea mediante Database Configuration Assistant (DBCA), este último proporciona la dirección URL para EM Express en el momento de la finalización. La dirección URL tiene el formato http://<hostname>:portnumber/em con 5500 como el ID de puerto predeterminado.
Antes de ir a esa URL para acceder a EM Express, se debe emitir la siguiente declaración de SQL a fin de confirmar el puerto para EM Express:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Si la salida es como se muestra anteriormente, se puede conectar a la URL que muestra DBCA.
Sin embargo, si la salida es nula, como
GETHTTPSPORT
Entonces, se debe ejecutar el procedimiento PL/SQL DBMS_XDB_CONFIG.SETHTTPSPORT a fin de establecer el puerto HTTPS para EM Express. Por ejemplo:
SQL> exec dbms_xdb_config.sethttpsport(5500);
PL/SQL procedure successfully completed.
Después de esto, intente acceder a EM Express mediante la URL.
También se puede configurar un puerto HTTP para EM Express como se indica a continuación:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
A fin de configurar el puerto EM Express para las pdb, se debe cambiar el contenedor a las respectivas pdb y ejecutar el procedimiento PL/SQL a fin de configurar el puerto para ese contenedor.
Después de hacer eso, se puede comprobar el puerto HTTP para cpdb,pdb1 y pdb2 de la siguiente manera:
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8080
SQL> alter session set container = pdb1;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8081
SQL> alter session set container = pdb2;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8082
NOTA: Si aún no puede conectarse a la URL de EM Express, vuelva a cargar el control de escucha como un usuario de cuadrícula y, a continuación, vuelva a intentarlo.