UnDomain Un friki suelto por la red

Reply to comment


Oracle Total Recall

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

se obtiene en la vista SYS.DBA_FLASHBACK_ARCHIVE_TABLES, es el numero en el que termina el nombre de la tabla de archivado correspondiente.

SYS_FBA_DDL_COLMAP_[object_id]

Mapa del estado actual de las columnas de la tabla original. - Inicio de operacion - Fin de operacion - identificacion de operacion - Nombre de columna - Tipo de dato - Nombre historico de la columna

SYS_FBA_HIST_[object_id]

Datos historicos de la tabla. Contiene la estructura de la tabla, mas unos campos adicionales. - RowID - Inicio de operación - Fin de operación - ID de operación - Codigo de operacion

SYS_FBA_TCRV_[object_id]

Contiene un resumen de las acciones realizadas sobre la tabla. - RowID - Inicio de operación - Fin de operación - ID de operación - Codigo de operacion


Importante

Total Recall tiene un incombeniente muy importante. Determinadas operaciones DDL no son permitidas sobre tablas en las que se está realizado el archivado. Las acciones que producen este error son ALTER, RENAME, DROP y TRUNCATE. Hay que tener en cuenta que el desactivar el archivado implica el borrado de los datos de esa tabla ya almacenados en la Flashback Area. Esto parece estar arreglado en parte en la última versión de la 11g.
Tags:

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Mientras tanto, en "¿Alguien ha visto mi martillo?"...


Inicio de sesión


Todo el contenido mostrado ha sido obtenido libremente por la red. Las marcas indicadas son propiedad de sus legítimos dueños y se muestran a modo informativo de manera libre y voluntaria, sin intención publicitaria ni ánimo de lucro. Todo el material propio, y salvo que se indique lo contrario, se encuentra bajo licencia Creative Commons. Si tienes el Copyright de algún contenido o has detectado algna anomalia, por favor, infórmalo al correo undomain@gmail.com para ser corregido cuanto antes. El autor de esta Web no se hace responsable del contenido de terceras personas y de sites ajenos a este.

Powered by Drupal, an open source content management system