Create Multitenant Cointanter Database (CDB)

1. Como siempre, el primer paso antes de poder crear ninguna BD de Oracle, tenemos que instalar el software. En Oracle Database 12c, el proceso es practicamente idéntico al proceso que teníamos en Oracle 11g Release 2. Ya tenemos la máquina virtual preparada con todos los requisitos para poder instalar el software, así que vamos a ello.

2. Copiamos el software de Oracle Database 12c a la carpeta /u01/stage que hemos creado en la máquina virtual DB12C. De momento, sólo necesitamos los siguientes archivos:

# Copiar V38500-01_1of2.zip a la carpeta /u01/stage
# Copiar V38500-01_2of2.zip a la carpeta /u01/stage

3. A partir de ahora todas las operaciones que realizamos las haremos con el usuario oracle. Descomprimimos el software y borramos los archivos de instalación.

cd /u01/stage
unzip V38500-01_1of2.zip
unzip V38500-01_2of2.zip
rm V38500-01_1of2.zip
rm V38500-01_2of2.zip

Documentación en Database 12c Release 1 -> Oracle Database, 12c Release 1 (12.1) -> Master Book List -> Database Installation Guide for Linux

4. Lanzamos la instalación del software.

# Lanzamos el instalador runInstaller
cd /u01/stage/database
./runInstaller

5. Los pasos a seguir con el asistente gráfica son prácticamente idénticos a la versión Oracle 11g Release 2, así que no vamos a entrar en detalles.

Desactivamos la opción «I wish to receive security updates via My Oracle Support» ->
-> Click «Next» ->
-> Click «Yes» ->
-> Click «Next» ->
-> Seleccionamos «Install database software only» ->
-> Click «Next» ->
-> Seleccionamos «Single instance database installation» ->
-> Click «Next» ->
-> Click «Next» ->
-> Seleccionamos «Enterprise Edition (6.4GB) ->
-> Click «Next» ->
-> Oracle base = «/u01/app/oracle» ->
-> Software location = «/u01/app/oracle/product/12.1.0/dbhome_1» ->
-> Click «Next» ->
-> Inventory Directory = «/u01/app/oraInventory» ->
-> Click «Next» ->
-> Click «Next» ->
-> Click «Install» ->
-> Esperamos hasta que nos soliciten la ejecución de dos scripts como «root»

# Ejecutamos como root los siguientes scripts
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/12.1.0/dbhome_1/root.sh

Finalizamos la instalación del software ->
-> Click «OK» ->
-> Click «Close»

# Borramos el software de instalación para liberar espacio
rm -Rf /u01/stage/database

Documentación en Database 12c Release 1 -> Oracle Database, 12c Release 1 (12.1) -> Master Book List  -> Administrator’s Guide -> 36 Overview of Managing a Multitenant Environment

Documentación en Database 12c Release 1 -> Oracle Database, 12c Release 1 (12.1) -> Master Book List  -> Administrator’s Guide -> 37 Creating and Configuring a CDB

5. Vamos a crear nuestra primera base de datos Multitenant o también llamada CDB (Container Database). Dentro de este podemos tener cero, una o varias PDB (Pluggable Database). En la documentación podéis leer la arquitectura y características de la novedad más llamativa de Oracle 12c.

El propósito principal de un entorno Multitenant es abaratar costes. Se trata de consolidar diversas PDBs en una sola BD o CDB para compartir los recursos de un servidor de una manera más eficiente (CPU, memoria, almacenamiento, electricidad, espacio en CPD, …). Adicionalmente tendremos otras mejoras, como son la facilidad para mover/clonar/enchufar/desenchufar PDBs, parchear varias BBDD al mismo tiempo, …

Podemos crear una CDB con el asistente gráfico DBCA o utilizando la sentencia CREATE DATABASE. En primer lugar vamos a utilizar DBCA ya que es muy sencillo. Cuando usamos DBCA podemos crear la BD con la configuración por defecto (más rápido) o seleccionar el modo avanzado. El modo avanzado nos permite definir con mayor detalle la configuración de ciertos parámetros, lo que resulta más apropiado.

# Modificamos el profile de Oracle para añadir las variables de sesión
echo "export ORACLE_BASE=/u01/app/oracle" >> /home/oracle/.bash_profile
echo "export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1" >> /home/oracle/.bash_profile
echo "export PATH=\$ORACLE_HOME/bin:\$PATH" >> /home/oracle/.bash_profile

# Cargamos el Profile
. /home/oracle/.bash_profile

# Lanzamos la utilidad DBCA
dbca

En la pantalla inicial Seleccionamos «Create Database» ->
-> Click «Next» ->
-> Seleccionamos «Advanced Mode» ->
-> Click «Next» ->
-> Seleccionamos «General Purpose or Transaction Processing» ->
-> Click «Next» ->
-> Global Database Name = «CDB1.dbajunior.com» ->
-> SID = «CDB1» ->
-> Seleccionamos «Create As Container Database» ->
-> Seleccionamos «Create As Container Database with one or more PDBs» ->
-> Number of PDBs = 1 ->
-> PDB Name = «PDB1» ->
-> Click «Next» ->
-> Seleccionamos «Configure Enterprise Manager (EM) Database Express» ->
-> Click «Next» ->
-> Seleccionamos «Use the Same Administrative Password for All Accounts» ->
-> Password = «oracle» ->
-> Confirm Password = «oracle» ->
-> Click «Next» ->
-> Click «Next» ->
-> Habilitamos «Enable Archiving»
-> Click «Next» ->
-> Click Pestaña «Sample Schemas» ->
-> Habilitamos «Sample Schemas» ->
-> Click «Next» ->
-> Memory Size (PGA and PGA) = 800MB ->
-> Click Pestaña «Character Sets» ->
-> Seleccionamos «Use Unicode (AL32UTF8) ->
-> Click «Next» ->
-> Habilitamos «Generate Database Creation Scripts» ->
-> Click «Next» ->
-> Click «Finish» ->
-> Click «OK» ->
-> Click «Exit» ->
-> Click «Close»

6. Configuramos el LISTENER de la máquina virtual.

# Lanzamos el asistente de configuración de Red de Oracle
netca

Seleccionamos «Listener configuration» ->
-> Click «Next» ->
-> Seleccionamos «Add» ->
-> Click «Next» ->
-> Listener name = «LISTENER» ->
-> Click «Next» ->
-> Dejamos por defecto la selección del protocolo TCP ->
-> Click «Next» ->
-> Seleccionamos «Use the standard port number of 1521» ->
-> Click «Next» ->
-> Seleccionamos «No» ->
-> Click «Next» ->
-> Click «Next» ->
-> Click «Finish»

7. Para poder realizar ejercicios más complejos vamos a crear una segunda CDB (CDB2). Inicialmente, mi intención era utilizar un método adicional a DBCA, utilizando la sentencia CREATE DATABASE. Pero existe un bug en la Release 12.1.0.1 (Bug 17316776 / Doc ID 17316776.8) que nos impide finalizar la instalación manual porque falta un script necesario para añadir los componentes CDB a nuestra BD (script $ORACLE_HOME/rdbms/admin/catcdb.sql).

Así que vamos a crear la segunda BD (CDB2) utilizando DBCA, pero esta vez utilizaremos la configuración por defecto, para hacerlo más rápidamente.

# Lanzamos la utilidad DBCA
dbca

En la pantalla inicial Seleccionamos «Create Database» ->
-> Click «Next» ->
-> Global Database Name = «CDB2.dbajunior.com» ->
-> Storage Type = «File System» ->
-> Database Files Location = «{ORACLE_BASE}/oradata» ->
-> Fast Recovery Area = «{ORACLE_BASE}/fast_recovery_area» ->
-> Database Character Set = «AL32UTF8 – Unicode UTF-8 Universal character ser» ->
-> Administrative Password = «oracle» ->
-> Confirm Password = «oracle» ->
-> Habilitamos la opción «Create As Container Database» ->
-> Pluggable Database Name = «PDB2» ->
-> Click «Next» ->
-> si nos indica que nuestra clave no cumple los estándares de seguridad Click «Yes» ->
-> Click «Finish» ->
-> Click «Exit» ->
-> Click «Close»

# Vamos a reducir los parámetros de memoria
export ORACLE_SID=CDB2
sqlplus / as sysdba
-- Configuramos AMM y eliminamos los mínimos de SGA y PGA
ALTER SYSTEM SET MEMORY_TARGET=800M scope=spfile;
ALTER SYSTEM SET MEMORY_MAX_TARGET=800M scope=spfile;
ALTER SYSTEM RESET SGA_TARGET scope=spfile;
SHUTDOWN IMMEDIATE
STARTUP

8. Tengo la costumbre, como muchos DBAs, de administrar las BBDD con mi propio juego de scripts para hacer consultas, chequeos, etc… Pero me gustaría comentar que poco a poco, el equipo de Oracle está potenciando el uso de SQL Developer y cada vez permite hacer más funciones de administración. La versión incluida con Oracle 12.1.0.1 ha sido actualizada para poder administrar BBDD con Multitenant (CDB) y Pluggable Databases (PDB).

# Lanzamos SQL Developer
$ORACLE_HOME/sqldeveloper/sqldeveloper.sh > /dev/null 2>&1 &

Click en Símbolo + en el Panel «Connections» ->
-> Connection Name = «CDB1» ->
-> Username = «sys» ->
-> Password = «oracle» ->
-> Connection Name = «CDB1» ->
-> Connection Name = «CDB1» ->
-> Connection Name = «CDB1» ->
-> Habilitamos «Save Password» ->
-> Role = «SYSDBA» ->
-> Hostname = «db12c.dbajunior.com» ->
-> Port = 1521 ->
-> SID = «CDB1» ->
-> Click «Test» ->
-> Click «Save» ->
-> Click «Connect»

Vamos a abrir el panel para poder realizar funciones como DBA. Inmediatamente después, mostraremos los atributos de la PDB «PDB1».

Click Opción del Menú «View» ->
-> Click «DBA» ->
-> Click en Símbolo + en el Panel «DBA» ->
-> Connection = «CDB1» ->
-> Click «OK» ->
-> Abrimos el desplegable CDB1 del Panel «DBA» ->
-> Desplegamos la opción «Container Database» ->
-> Click «PDB1»

SQL Developer (CDB)