PDB Snapshot Carousel - Oracle Database 18c

Por Francisco Riccio.
Publicado en Abril 2018



Introducción


PDB Snapshot Carousel es un nuevo feature de Oracle Database 18c que nos permite realizar copias instantáneas “snapshot”  de nuestros Pluggable Database (PDB) y mantenerlos en una bitácora externa con la finalidad de usarlo en los siguientes escenarios:

  • Generar ambientes no productivos.
  • Recuperación de un PDB Productivo ante un problema.

Esta versión nos permite mantener hasta un máximo de 8 snapshots por PDB, una vez alcanzado este número, estos van sobre escribiéndose conforme vayan requiriéndose nuevas copias instantáneas.  Los snapshots pueden ser configurados de manera automática (se ejecuta cada cierto tiempo) como manual.

Los snapshots incluyen la copia de los data files del PDB original, excluyendo los redo logs. Esta copia instantánea se almacena en disco y por defecto se encuentra en el mismo directorio del PDB.

Estos snapshots son distintos a los snapshots copy PDB, debido a que este último no realiza una copia completa de los data files y siempre dependerá del CDB donde se aloje.



Implementación


A. Obtener la configuración de Snapshot de un PDB

Para conocer la cantidad de snapshots soportados por PDB consultaremos las vistas: CDB_PROPERTIES y CDB_PDBS.

col property_value format a15
select p.pdb_name, property_name, property_value
from cdb_properties r join cdb_pdbs p 
on r.con_id = p.con_id
where property_name = 'MAX_PDB_SNAPSHOTS';


Podemos apreciar que el PDB (PDB1), está configurado para soportar hasta 8 snapshots.




B. Snapshot Manual

A continuación se ejecutará un snapshot de manera manual:

alter pluggable database snapshot;




Se procederá a validar los snapshots disponibles:

set linesize 150
col CON_NAME FORMAT a10
col SNAPSHOT_NAME FORMAT a25
col SNAP_SCN FORMAT 9999999
col FULL_SNAPSHOT_PATH FORMAT a45
SELECT CON_NAME, SNAPSHOT_NAME, FULL_SNAPSHOT_PATH
FROM DBA_PDB_SNAPSHOTS;


Los snapshots tienen el siguiente formato como nombre de archivo: snap_<ID>_<SCN>.pdb.


Es posible crear un snapshot con un nombre específico como a continuación se presenta:

alter pluggable database snapshot <nombre_snapshot>;




Se validará los snapshots generados hasta este momento:




A partir de este punto, se realizaron 6 snapshots más, con la finalidad de validar que el noveno reemplazó al primero:


El primer snapshot que teníamos al iniciar el ejercicio fue eliminado para crear el nuevo, esto debido a que ya se contaba con 8 copias, el cual es el valor máximo como se especificó al inicio.




C. Snapshot Automático

Es posible realizar la programación de snapshots de manera automática como se muestra a continuación:

alter pluggable database snapshot mode every <valor> [MINUTES|HOURS];

Donde el valor debe ser menor a:
  • 3,000 en caso de ser expresado en minutos.
  • 2,000 en caso ser expresado en horas.


El ejemplo muestra la ejecución de snapshots de manera automática cada 24 horas y además a través de la vista DBA_PDBS se puede visualizar que la configuración cambió de MANUAL a AUTO.




D. Deshabilitar y Eliminación de Snapshots

Es posible deshabilitar la toma de snapshots con el siguiente comando:

alter pluggable database snapshot mode NONE;



Adicional si deseamos eliminar todos los snapshots procedemos a ejecutar el comando:

SQL> alter pluggable database set MAX_PDB_SNAPSHOTS=0;



A continuación se presenta los archivos que contienen los snapshots generados durante esta implementación:




Se procederá a eliminar todos los archivos de snapshots de manera automática cuando se configure a 0 la propiedad MAX_PDB_SNAPSHOTS.




También es posible eliminar un snapshot específico ejecutando el siguiente comando:

alter pluggable database drop snapshot <nombre_snapshot>;





E. Creación de un PDB a partir de un Snapshot

Recordemos que los PDB snapshots generan copias completas de los data files del PDB original permitiendo crear nuevos PDBs de manera independiente al original.

A continuación se creará un PDB a partir de un snapshot generado:

create pluggable database <nombre_pdb_nuevo> from <nombre_pdb_original>    
using snapshot <nombre_snapshot>;




En caso se decida crear un PDB con la opción “snapshot copy” será indiferente, debido a que los snapshots no son de tipo COPY. Se presenta el siguiente ejemplo comprobando lo explicado:






Conclusión


Oracle Database 18c trae una excelente funcionalidad la cual puede ser claramente utilizada para crear nuevos ambientes no productivos basados en un punto en el tiempo de nuestro PDB de producción, como también contar con un punto de restauración inmediato frente a una carga masiva, un pase a producción importante u otra actividad que podría afectar a nuestro sistema productivo.

Esta funcionalidad ofrece una alta flexibilidad para configurar estas copias de manera manual o automática, la cual dependerá de nuestras necesidades, como también es posible realizar un monitoreo  exacto a partir de las vistas del sistema disponible.



Francisco Riccio, actualmente se desempeña como Arquitecto de Soluciones en Oracle Perú y es instructor de cursos oficiales de certificación Oracle. Es un Oracle Certified Professional en productos de Oracle Application, Base de Datos, Cloud & Virtualización.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.