Está en la página 1de 24

Israel Lucas Torrijos Bases de datos

UNIDAD 0. PRIMEROS PASOS CON ORACLE XE............................................................................................... 2


1. Preámbulo.............................................................................................................................................................................. 2

2. Conexión a una CBD de Oracle ............................................................................................................................................... 7

3. Conexión a una PBD de Oracle ............................................................................................................................................... 9

4. Creación de un usuario ......................................................................................................................................................... 11


4.1. Conexión a la CDB ................................................................................................................................................................ 11
4.2. Conexión a la PDB................................................................................................................................................................. 16

5. Creación de conexión con usuario normal ............................................................................................................................ 17

6. Cambio entre contenedores (CDB y PDB) ............................................................................................................................. 18

7. Consultar servicios de la base de datos ................................................................................................................................ 20

8. Ver el nombre actual del contenedor ................................................................................................................................... 21

9. Ver información de conexión................................................................................................................................................ 22

10. Creación de una base de datos de contenedores (CDB)....................................................................................................... 23

11. Crear una base de datos conectable (PDB) .......................................................................................................................... 23

P á g i n a 1 | 24
Israel Lucas Torrijos Bases de datos

Unidad 0. Primeros pasos con Oracle XE


1. Preámbulo
Procedemos a la instalación de Oracle XE, lo configuramos conforme a nuestra necesidad, hasta que finalice la
instalación.
En la siguiente ventana, introducimos la contraseña que será empleada con las cuentas SYS, SYSTEM y PDBADMIN.

Al finalizar, el instalador de Oracle nos dará información importante que debemos apuntar y que podemos ver en la
siguiente captura:

P á g i n a 2 | 24
Israel Lucas Torrijos Bases de datos

Las rutas de acceso de conexión que se han establecido:


• localhost:1521
• localhost:1521/XEPDB1
• https://localhost:5500/em

Si accedemos a cualquiera de las rutas el navegador nos advierte de un riesgo potencial de seguridad.

Aceptamos y continuamos. El navegador nos mostrará la siguiente ventana:

P á g i n a 3 | 24
Israel Lucas Torrijos Bases de datos

Para acceder insertamos el usuario y la contraseña:

Si no especificamos un nombre de contenedor, en el campo Container Name, estaremos accediendo a la base de datos
contenedora multiinquilino (Container DataBase o CDB). Un CDB incluye cero, una o muchas bases de datos
conectables (PDB) creadas por el cliente y contenedores de aplicaciones.
En la captura podemos observar que dice: Single Instance (xe) CBD (1 PDB(s)). Lo que significa que en el navegador
estamos dentro de la instancia CBD de Oracle XE, denominada xe, y que contiene 1 PDB (Pluggable DataBase o Base
de Datos Conectable).

P á g i n a 4 | 24
Israel Lucas Torrijos Bases de datos

Un PDB es un contenedor compuesto por una colección de esquemas y objetos que actúan como una base de datos
"normal" para aplicaciones e IDE.
Tipos de PDB

• PDB estándar: Este tipo de PDB se crea tras ejecutarse sin especificar el PDB como inicial
• Application Root
• Seed PDB
• ProxyPDB

Por defecto, cada CDB tiene los siguientes contenedores:


• Un contenedor raíz CDB (también llamado simplemente CDB$ROOT)
La raíz CDB es una colección de esquemas, objetos de esquema y objetos que no son de esquema a los que
pertenecen todos los PDB (consulte "CDB y PDB"). Contiene metadatos de Oracle y usuarios comunes.
• Una semilla PDB (PDB$SEED)
El PDB semilla es una plantilla suministrada por el sistema que el CDB puede utilizar para crear nuevos PDB.
• Un contenedor del sistema
El contenedor del sistema incluye la CDB raíz y todos los PDB de la CDB. Por lo tanto, el contenedor del sistema
es el contenedor lógico para el propio CDB.
Y pueden ampliarse con:
• Cero o más contenedores de aplicaciones
Un contenedor de aplicaciones consta exactamente de una raíz de aplicación y los PDB conectados a esta
raíz. Mientras que el contenedor del sistema contiene la raíz CDB y todos los PDB dentro del CDB, un
contenedor de aplicación incluye sólo los PDB conectados a la raíz de la aplicación. Una raíz de aplicación sólo
pertenece a la raíz de CDB y a ningún otro contenedor.
• Cero o más PDB creados por el usuario
Un PDB contiene los datos y el código necesarios para un conjunto específico de características
(consulte "PDB"). Un PDB pertenece exactamente a cero o a un contenedor de aplicaciones. Si un PDB
pertenece a un contenedor de aplicaciones, entonces es un PDB de aplicación.
Los PDB pueden ser creados por usted (suponiendo que tenga los privilegios correctos).
Aquí hay un diagrama que muestra la misma base de datos con un nuevo PDB creado, llamado PDB1.

P á g i n a 5 | 24
Israel Lucas Torrijos Bases de datos

Si está ejecutando Oracle XE (también conocido como Oracle Express), ya tiene una PDB creada, llamada XEPDB1.

Ahora volveremos a loguearnos en localhost:1521 pero esta vez con insertando los datos del PDB (XEPDB1).

En la ventana que se abrirá observaremos como nos indica que estamos dentro del PDB.

P á g i n a 6 | 24
Israel Lucas Torrijos Bases de datos

2. Conexión a una CBD de Oracle


Podemos conectarnos a una base de datos de contenedor de Oracle (CDB) de la misma manera que se conecta a
cualquier otra base de datos. Aunque es posible que no lo hagamos a menudo, ya que muchas de las conexiones y
trabajo se realizarán en un PDB. En SQL Developer esto se realiza al crear una conexión:

En la ventana de configuración de la conexión rellenaremos los siguientes campos:


• Nombre de la conexión: admin_CDB
• Usuario: un nombre de usuario que existe en la base de datos, como SYSTEM o SYS (con el rol SYSDBA).
• Contraseña: la contraseña de esos usuarios.
• Nombre del servicio: esto dependerá de su base de datos.
a. Si usa la imagen de Docker: ORCLCDB.localdomain
b. Si utiliza Oracle Express: XE (sí, el nombre de servicio para la base de datos de contenedores en Oracle
Express es XE)
Estas son las pantallas de conexión en SQL Developer si desea conectarse a Oracle Express, según usemos el usuario
SYSTEM o SYS.
SYSTEM

P á g i n a 7 | 24
Israel Lucas Torrijos Bases de datos

SYS

La creación de usuarios desde una conexión a la CDB, implica que las restricciones a los esquemas y demás datos en
la CDB son mayores. Por ejemplo, podemos obtener errores al crear un nombre de usuario de longitud amplia o si
empleamos minúsculas al definirlo.
Más adelante, explicaré como crear un usuario desde una CDB y PDB.

P á g i n a 8 | 24
Israel Lucas Torrijos Bases de datos

3. Conexión a una PBD de Oracle


La conexión a una base de datos conectable de Oracle (PDB), se realiza de manera similar a una CDB.
Hay un par de cosas para recordar:
• Debemos especificar el Nombre del servicio en lugar del SID. El SID solo se usa si necesitamos una forma
alternativa de conectarnos a una base de datos contenedora.
• El PDB debe existir para poder conectarse a él. Si usa Oracle XE o la imagen de Docker Hub, se ha creado una.
• La conexión al PDB se realiza especificando el servicio, no el PDB en sí. A menudo pueden tener los mismos
nombres, pero pueden tener nombres diferentes.
En SQL Developer esto se hace especificando:
• Nombre de la conexión: admin_PDB
• Usuario: un nombre de usuario que existe en la base de datos, como SYSTEM o SYS (con el rol SYSDBA).
• Contraseña: la contraseña de esos usuarios.
• Nombre del servicio: esto dependerá de su base de datos.
• Si usa la imagen de Docker: ORCLPDB1.localdomain
• Si utiliza Oracle Express: XEPDB1
Estas son las pantallas de conexión en SQL Developer si desea conectarse a Oracle Express, según usemos el usuario
SYSTEM o SYS.
SYSTEM

P á g i n a 9 | 24
Israel Lucas Torrijos Bases de datos

SYS

Ahora tendremos dos conexiones creadas y probaremos como crear un usuario desde una conexión u otra. Así será
más fácil demostrar por qué debemos usar una PDB.

P á g i n a 10 | 24
Israel Lucas Torrijos Bases de datos

4. Creación de un usuario
4.1. Conexión a la CDB
Tenemos dos maneras de crear el usuario: interfaz o comandos. Si usamos la interfaz, abrimos la conexión y en la
entrada Otros Usuarios:

Hacemos clic en el botón derecho del ratón y seleccionamos Crear Usuario…

P á g i n a 11 | 24
Israel Lucas Torrijos Bases de datos

En la ventana de Crear Usuario, rellenamos los datos requeridos de la pestaña Usuario (usuario, contraseña y las
tablespaces):

En la pestaña SQL pondremos los permisos principales para no tener que hacerlo manualmente en las pestañas
Roles Otorgados y Privilegios del Sistema. Aplicamos cambios.

P á g i n a 12 | 24
Israel Lucas Torrijos Bases de datos

En la pantalla nos saldrá un error ORA-65096: El nombre de usuario o rol común no es válido. Esto se debe a una
de tantas restricciones que impone la CDB, como el uso de minúsculas o que es necesario especificar el prefijo c##
en el nombre del usuario.

Si intentamos crear el usuario con el nombre: c##cbd_user

P á g i n a 13 | 24
Israel Lucas Torrijos Bases de datos

El usuario se habrá creado correctamente si lo consultamos en el árbol de la conexión:

Otra manera de sortear las limitaciones que impone la CDB es el uso del comando:
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;

Su uso se ha extendido por la red ya que es algo sencillo de usar y nos permite sortear las limitaciones que nos
impone la CDB. Sin embargo, su uso es contraproducente ya que realizamos una gestión contraria a las
recomendaciones de Oracle y podríamos tener problemas en el desarrollo de la base de datos, ya que Oracle
implementará la aplicación bajo una línea de desarrollo que podría entrar en conflicto con esa práctica.
Vamos a ver como podríamos usar esa sentencia para crear el mismo usuario del paso anterior sin el prefijo y
desde una ventana de script. Si ejecutamos el siguiente script:

P á g i n a 14 | 24
Israel Lucas Torrijos Bases de datos

La salida del Script mostrará una gran cantidad de errores de ejecución pero si vamos al primero observaremos
que es el mismo problema generado desde la interfaz y que hace referencia al nombrado del usuario.

Ahora podríamos añadir el prefijo C## al nombre del usuario y ejecutarlo, o usar la sentencia anteriormente
descrita para sortear dicha limitación impuesta por el CDB. Por lo que, ahora añadiremos la sentencia al script en
la primera fila para volver a ejecutar todo el código.

Podemos ver en la salida del script que todo se ha creado correctamente y lo verificamos en el árbol de la conexión.

Esta no es la manera adecuada de gestionar una base de datos y debemos hacerlo desde la PDB.

P á g i n a 15 | 24
Israel Lucas Torrijos Bases de datos

4.2. Conexión a la PDB


Ahora vamos a crear el usuario pdb_user con la misma estructura del script utilizado y sin usar ninguna sentencia
especial.

Tras ejecutar el script no se han producido errores y el usuario se ha creado correctamente:

P á g i n a 16 | 24
Israel Lucas Torrijos Bases de datos

5. Creación de conexión con usuario normal


La creación de la conexión con el usuario creado es una trivialidad ya que anteriormente se ha explicado como hacerlo
con los usuarios del sistema. Lo único en lo que debemos prestar atención es a la hora de especificar el Nombre del
Servicio ya que debe ser el asociado al PDB (XEPDB1) y NO el que lo vincula a la CDB (XE).

P á g i n a 17 | 24
Israel Lucas Torrijos Bases de datos

6. Cambio entre contenedores (CDB y PDB)


Si se ha conectado a uno de los contenedores, puede cambiar fácilmente su sesión para que se conecte a otro
contenedor.
Esto significa que puedes:
• cambio de un PDB al CDB
• cambio del CDB a un PDB
• cambiar de un PDB a otro PDB
Esto es útil si se conecta al contenedor incorrecto o desea trabajar en un contenedor diferente.
Puede cambiar los contenedores mediante el comando Alter Session.
ALTER SESSION SET container=pdb1;
Esto cambiará su conexión a la base de datos pdb1, que es una base de datos conectable.
Si está en Oracle XE, su comando puede tener este aspecto:
ALTER SESSION SET container=xepdb1;
Para cambiar a CDB, especifique CDB$ROOT.
ALTER SESSION SET container=CDB$ROOT;

A continuación, puede ver como se modifica la sesión de la conexión a la CDB (admin_CDB) a la PDB (XEPDB1):

P á g i n a 18 | 24
Israel Lucas Torrijos Bases de datos

Esto nos permitiría crear usuarios en la PDB desde la conexión a la CDB, y no obtendríamos ninguna clase de error ni
tendríamos que usar sentencias especiales.

Las modificaciones de sesión únicamente duran el tiempo que esté abierta la conexión. Si nos desconectamos de la
conexión admin_CDB y nos volvemos a conectar, si intentamos crear el usuario anterior obtendríamos una serie de
errores. El primero que muestra se refiere a que no puede borrar el usuario pdb_user por que no existe, ya que el
usuario fue creado en la PDB desde la conexión CDB, tras alterar la sesión.

P á g i n a 19 | 24
Israel Lucas Torrijos Bases de datos

7. Consultar servicios de la base de datos


Para consultar los servicios de cada conexión podemos usar la siguiente sentencia:
SELECT name, pdb FROM v$services;
Si la ejecutamos sobre la conexión de la CDB:

Si la ejecutamos sobre la conexión de la PDB:

P á g i n a 20 | 24
Israel Lucas Torrijos Bases de datos

8. Ver el nombre actual del contenedor


Para consultar el nombre del contenedor de cada conexión podemos usar la siguiente sentencia:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual;
Si la ejecutamos sobre la conexión de la CDB:

Si la ejecutamos sobre la conexión de la PDB:

P á g i n a 21 | 24
Israel Lucas Torrijos Bases de datos

9. Ver información de conexión


La siguiente sentencia nos mostrará los datos de la conexión:
SELECT SYS_CONTEXT('USERENV','CON_NAME') AS con_name, SYS_CONTEXT('USERENV','CON_ID') AS
con_id, SYS_CONTEXT('USERENV','DB_NAME') AS db_name FROM dual;
Si la ejecutamos sobre la conexión de la CDB:

Si la ejecutamos sobre la conexión de la PDB:

P á g i n a 22 | 24
Israel Lucas Torrijos Bases de datos

10. Creación de una base de datos de contenedores (CDB)


Para crear una nueva CDB, utilice el comando Crear base de datos con el sufijo Enable Pluggable Database.
CREATE DATABASE … ENABLE PLUGGABLE DATABASE;
Esto creará un nuevo CDB, con un contenedor raíz de CDB$ROOT y un nuevo PDB semilla de PDB$SEED.
Si omite ENABLE PLUGGABLE DATABASE, esta nueva base de datos no es CDB y nunca se puede cambiar para contener
PDB.

11. Crear una base de datos conectable (PDB)


Para crear una base de datos conectable, debe estar conectado al CDB con el contenedor establecido en la raíz (que
es el valor predeterminado). También debe tener el privilegio Create Pluggable Database. Para crear un PDB:
CREATE PLUGGABLE DATABASE mi_nueva_pdb;
Esto creará una nueva base de datos conectable llamada mi_nueva_pdb. Esto contendrá el diccionario de datos
completo y enlaces internos a objetos en el contenedor raíz.
Hay varias otras formas de crear un PDB:
• Crear un PDB a partir de la base de datos PDB$SEED.
• Crear un PDB a partir de un PDB existente.
• Creación de un PDB a partir de un PDB remoto.
• Desconecte un PDB de un CDB y conéctelo a un CDB diferente.
Una vez creado el PDB, puede conectarse a él y comenzar a trabajar en él.

P á g i n a 23 | 24
Israel Lucas Torrijos Bases de datos

Referencias:
• https://www.databasestar.com/oracle-pdb/
• https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/CDBs-and-PDBs.html#GUID-
49C0C90D-5A72-4131-8C3D-B07341C75CB2
• https://es.stackoverflow.com/questions/544583/ora-65096-nombre-de-usuario-o-rol-com%c3%ban-no-
v%c3%a1lido
• https://es.stackoverflow.com/questions/291709/problemas-para-crear-usuario-en-oracle-error-ora-65096

P á g i n a 24 | 24

También podría gustarte