Hace tiempo que no ponia ningún articulo serio, así que para variar un poco, vamos a poner algo de Oracle.
si, ya se que suena como la peli de nuestro amigo el Chuache, pero este es un post serio (o al menos lo intenta, pobrecito).
El Total Recall de Oracle es una función la mar de interesante, que permite almacenar los valores historicos de los registros de una tabla. La manera en que los almacena hace posible que podamos consultar el valor de determinado registro en determinada fecha sin necesidad de acceder a un moledo de datos paralelo o a un Data WareHouse. Aunque también podemos acceder a las tablas donde se almacena esta información para poder hacer nuestros propios informes y consultas personalizadas.
Este componente viene por defecto en la BDD y no puedes escojer si lo quieres instalar o no (al menos, yo no lo he visto), aunque tiene una licencia a parte a la BDD. Se encuentra disponible en las versiones 10g y superiores, pero no se si también está en las 9i y anteriores.
Lo bueno que tiene es que no se tiene que instalar nada y es muy facil de administrar, además de útil.
El problema es que la BDD crecerá una burrada.
Vamos a ver como configurar nuestro propio Total Recall.
Creación de la Flashback Area
La Flashbacks Area es donde se almacena toda la información histórica (archivado) y se ha de crear en un tablespace propio o compartido, que tenga la opción de Administración Automática.
Se podrá crear un usuario para administrar todas las acciones necesarias como la propia creación de la Flashbacks Area, o utilizar uno ya existente.
Este usuario solo necesita tener el Grant especifico "FLASHBACK ARCHIVE ADMINISTER" y permisos de escritura (cuota) en el tablespace donde se creará la flashback area, ademas de permisos de SELECT y ALTER sobre los objetos que se quieran archivar (eso es importante en el caso de que el administrador del Total Recall no sea el propietario de las tablas a archivar).
Cuando creamos la Flashback Area le indicamos el tiempo de retención del archivado. En este caso, le indicaremos dos años.
-- Creamos el tablespace
CREATE SMALLFILE TABLESPACE fla_tbs1
DATAFILE '/u01/app/oracle/oradata/orcl/fla_tbs01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE 100M
NOLOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
-- Asignamos los permisos necesarios de administrador a un usuario ya existente
GRANT FLASHBACK ARCHIVE ADMINISTER TO "HR";
ALTER USER "HR" QUOTA UNLIMITED ON "FLA_TBS1";
-- Creamos la flashbacks area en el tablespace con el usuario administrador
CREATE FLASHBACK ARCHIVE FLA1 TABLESPACE FLA_TBS1 RETENTION 2 YEAR;
Administrando el archivado
Para comenzar/parar el archivado de una tabla en cuestión, se han de utilizar las siguientes sentencias, lanzadas con el usuario al que le hemos asignado permisos de administración sobre la Flashback Area (en este caso, el usuario HR).
Hay que tener en cuenta que el desactivar el archivado de una tabla implica el borrado de todo su historico.
En este caso, el usuario administrador es el propietario de los objetos que se van a archivar, pero esto no es necesario que sea así. Se puede crear un usuario específico para esto, pero ha de tener como mínimo permisos de SELECT y ALTER sobre las tablas que se quiera activar el archivado.
-- Iniciando el archivado de la tabla EMPLOYEES:
ALTER TABLE HR.EMPLOYEES FLASHBACK ARCHIVE FLA1;
-- Desactivando el archivado de la tabla EMPLOYEES:
ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;
El contenido de la Flashback Area se elimina automáticamente pasado el tiempo de retención indicado en su creación. Para modificar esta retención lanzamos el siguiente comando con el usuario administrador (HR):
-- Modificamos al retención a 1 año
ALTER FLASHBACK ARCHIVE FLA1 MODIFY RETENTION 1 YEAR;
También podemos eliminar manualmente el contenido sin tener que modificar la retención. Para ello, utilizamos el siguiente comando (también con el usuario administrador):
-- Eliminamos todos los datos anteriores a 5 dias
ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' DAY);
Consultando el archivado
La información de la Flashback Area es accesible solo desde el usuario propietario de la tabla, y hay dos maneras de acceder a ella.
- Mediante una consulta sobre la tabla original
De este modo podemos obtener el valor que tenía determinado campo en determinada fecha específica o relativa, simplemente añadiendo una opción a la consulta sobre la tabla en cuestión:
-- Valor actual del campo SALARY
SELECT SALARY FROM HR.EMPLOYEES WHERE EMAIL='DOCONNEL';
-- Valor del campo SALARY el dia 21 de enero a las 13:00
SELECT SALARY FROM HR.EMPLOYEES AS OF TIMESTAMP TO_TIMESTAMP('2010-01-21 13:00:00','YYYY-MM-DD HH24:MI:SS') WHERE EMAIL='DOCONNEL';
-- Valor del campo SALARY de hace 10 minutos
SELECT SALARY FROM HR.EMPLOYEES AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE EMAIL='DOCONNEL';
-- Valor del campo SALARY de hace 2 dias
SELECT SALARY FROM HR.EMPLOYEES AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '2' DAY) WHERE EMAIL='DOCONNEL';
- Accediendo directamente a la tabla de archivado
De esta forma podemos ver el histórico de modificaciones y otros datos sobre las modificaciones realizadas en la tabla.
En la tabla de archivado aparecen todos los valores históricos, junto con la fecha de modificación, pero no el valor actual (este se encuentra en la tabla original).
-- Identificamos la tabla de archivado
SELECT ARCHIVE_TABLE_NAME FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME='EMPLOYEES' AND OWNER_NAME='HR';
-- Accedemos directamente a la tabla de archivado
SELECT * FROM HR.SYS_FBA_HIST_70229 WHERE EMAIL='DOCONNEL';
Eliminación de la Flashback Area
Para eliminar por completo toda la Flashback Area se ha de lanzar el siguiente comando con el usuario administrador (HR en este caso).
Seria conveniente antes desactivar el archivado de todas las tablas y, opcionalmente, eliminar los permisos (o bloqueamos el usuario administrador) y borrar el TableSpaces correspondiente
-- Eliminamos la Flashback Area
DROP FLASHBACK ARCHIVE FLA1;
-- Eliminamos el tablespace dedicado a la Flashback Area
DROP TABLESPACE FLA_TBS1 INCLUDING CONTENTS;
-- Eliminamos los permisos de administrador Total Recall
REVOKE FLASHBACK ARCHIVE ADMINISTER FROM "HR";
Consultas/Vistas de interes
El sistema de fechas utilizado por Total Recall es un sistema propio y require una conversión para poder ser interpretado.
Esta conversión se realiza mediante el codigo to_char(scn_to_timestamp(startscn),'dd/mm/yy hh24:mi:ss')
Ejemplo:
SELECT
RID,
DECODE(STARTSCN,NULL,NULL,TO_CHAR(SCN_TO_TIMESTAMP(STARTSCN),'dd/mm/yy hh24:mi:ss')) AS STARTSCN,
DECODE(ENDSCN,NULL,NULL,TO_CHAR(SCN_TO_TIMESTAMP(ENDSCN),'dd/mm/yy hh24:mi:ss')) AS ENDSCN,
XID,
OP
FROM SYS_FBA_TCRV_70229;
Vistas genericas
SYS.DBA_FLASHBACK_ARCHIVE
Vista de las diferentes Flashback Areas con la siguiente información:
- Nombre de la Flashback Area
- Nº del archivo de la Flashback Area
- Retención de los datos (en dias)
- Fecha de creación
- Fecha de la última purga de información
- Estado
SYS.DBA_FLASHBACK_ARCHIVE_TS
Vista de las diferentes Flashback Areas con la siguiente información:
- Nombre de la Flashback Area
- Nº del archivo de la Flashback Area
- Tablespace asignado
- Quota asignada (en MB)
SYS.DBA_FLASHBACK_ARCHIVE_TABLES
Listado de las tablas que se están archivando en ese momento con la siguiente información:
- Tabla
- Propietario
- Flashback Area asignada
- Nombre de la tabla de archivado (donde se almacenan los datos el historico)
Vistas especificas
Estas vistas solo están disponibles para los objetos que se están archivando y son propiedad del propietario de la tabla original. El
Enviar un comentario nuevo