Han cambiado bastantes cosas en Oracle12c. El cambio mas importante sin duda és el nuevo sistema Multitenant que permite una mejor gestión de recursos al compartir algunos de ellos entre diferentes bases de datos alojadas en el mismo servidor, con el consiguiente ahorro.
Este sistema Multinenant conlleva la adopción de nuevos conceptos. Digamos que puedes crear una base de datos como las de toda la vida Non-Container y también puedes crear una base de datos de un nuevo tipo Container DB (CDB). Este nuevo tipo de bd permite alojar varias bases de datos BD en su interior que se llamaran Pluggable BD (PDB). Hay recursos comunes a todas las PDB que se alojaran en el espacio de la CDB contenedora y otros que seguiran en el espacio privado de la PDB. La gracia és que puedes coger una BD normal de Oracle 11, por ejemplo, y "enchufarla" como una PDB. Tambien puedes "desenchufar" una PDB y moverla a otra CDB, etc.. Para el usuario/cliente/app esta gestión es transparente, la conexión con la BD será igual tanto si es una bd PDB o no.
Vamos a ver como creamos una base de datos PDB desde Linux. Por esta vez, suponemos que ya tenemos una CDB creada. Es decir, ya tenemos una bd contenedora y queremos crear una PDB en su "interior". Hay varias maneras de hacerlo: Usando la semilla o clonando una PDB. Esta vez lo haremos usando la semilla puesto que queremos empezar una bd de cero. Suponemos que el SID de la CDB se llamará cdb01 y la PDB pdb01 en un alarde de imaginación.
1. Nos conectamos a la CDB como sysdba:
> export ORACLE_SID=cdb01
> sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue Jan 17 11:38:10 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
2. Comprobamos que estamos en la bd correcta:
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
3. Creamos una subcarpeta en la carpeta oradata del servidor donde se alojan los ficheros físicos de la bd:
> cd /u03/oradata/cdb01
> mkdir pdb01
si comprobamos el contenido de la carpeta u03/oradata/cdb01 deberian aparecer las carpetas :
pdb01
pdbseed
usaremos el contenido de pdbseed para crear la bd.
4. Volvemos al SQLPLUS y creamos la bd propiamente dicha con:
CREATE PLUGGABLE DATABASE pdb01 ADMIN USER admin identified by "password_de_admin"
default tablespace users
DATAFILE '/u03/oradata/cdb01/pdb01/users01.dbf'
size 250M AUTOEXTEND ON
FILE_NAME_CONVERT=(
'/u03/oradata/cdb01/pdbseed/',
'/u03/oradata/cdb01/cdb01/');
a lo que deberia responder al cabo de unos segundos:
Pluggable database created.
Comprobamos que se ha hecho correctamente:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 MOUNTED
5. Abrimos la base de datos
alter pluggable database pdb01 open;
a lo que responde:
Pluggable database altered.
6. Comprobamos que ha cambiado su estado:
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
7. Opcionalmente crearemos mas tablespaces para alojar diferentes aplicaciones. Es una buena práctica. Se realiza como siempre:
CREATE TABLESPACE tablespaceapp
DATAFILE
'/u03/oradata/cdb01/pdb01/tablespaceapp01.DBF' SIZE AUTOEXTEND ON MAXSIZE UNLIMITED;
8. Añadimos en el fichero tnsnames.ora la nueva bd:
PDB01 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PDB01)
)
)