Post on 16-Apr-2015
Mª Carmen Gabarrón
Flashback
Flashback
Flashback
La operación de flashback de base de datos:
Funciona como un botón de rebobinado (vuelta atrás) en la base
de datos
Se puede utilizar en casos de corrupción de datos lógicos
provocada por los usuarios
Flashback Query está implementado usando las estructuras de undo (rollback) que Oracle utiliza habitualmente para el soporte transaccional
Flashback
Flashback. TiposLa tecnología de flashback permite consultar versiones anteriores de objetos de esquema, consultar datos históricos o realizar análisis de cambios. Cada transacción genera de forma lógica una nueva versión de la base de datos. Con la tecnología de flashback, puede navegar por estas versiones para buscar un error y su causa:
1. Consulta de flashback o Consultar todos los datos en un punto en el tiempo determinado.
2. Consulta de flashback de versioneso Ver todas las versiones de una fila entre dos horas o dos SCN.
o Ver las transacciones que cambiaron la fila.
3. Consulta de flashback de transaccioneso Ver todos los cambios que ha realizado una transacción.
Flashback
Flashback. Tipos
4. Flashback de borrado
Restaura las tablas borradas por accidente.
5. Flashback de tabla
Recupera una tabla a un punto en el tiempo pasado sin tener que restaurar una copia de seguridad.
6. Flashback de base de datos
La función de flashback de base de datos devuelve la base de datos a un punto anterior en el tiempo al deshacer todos los cambios realizados desde ese momento.
Flashback
• UNDO_MANAGEMENT
AUTO o NULL, permite la gestión automática de deshacer. (Valor predeterminado).
MANUAL, modo de gestión manual.
• UNDO_TABLESPACE
Especifica el nombre de un tablespaces undo. Se utiliza únicamente cuando la base de datos tiene múltiples tablespaces de deshacer y desea seleccionar uno. Opcional, y es válido únicamente en automático deshacer modo de gestión.
• UNDO_RETENTION Especifica cuanto tiempo (en segundos) las transacciones confirmadas
deben ser retenidas en los segmentos de undo antes de ser sobrescritas. Por defecto 900 segundos, 15 minutos).
Flashback. Parámetros
Flashback
select name, value from v$parameter where name like 'undo%';
Flashback. Parámetros
UNDO_MANAGEMENT debe estar en modo AUTO para usar las prestaciones “flashback”
Flashback
1. Consulta de flashback Consultar todos los datos en un punto en el tiempo determinado.
2. Consulta de flashback de versiones
3. Consulta de flashback de transacciones
4. Flashback de borrado
5. Flashback de tabla
6. Flashback de base de datos
Flashback
1. Consulta de Flashback.
AS OF permite recuperar la versión de las filas a un momento en el tiempo o SCN particular.
A la orden SELECT se añade la cláusula AS OF.
Flashback
1. Consulta de Flashback.
Al utilizar la cláusula AS OF de la sentencia SELECT, puede especificar la fecha y hora para el que desea visualizar los datos. Resulta útil para analizar una discrepancia en los datos.
Nota: A la cláusula AS OF le pueden seguir TIMESTAMP o SCN.
Flashback
1. Consulta de Flashback. Ejemplo
Devolvemos el salario del empleado 200 al que tenía en la fecha y hora indicas.
Flashback
Aunque con la consulta de flashback sólo podemos ver los datos que había es posible recuperar estos datos usando un cursor.
1. Consulta de Flashback.
DECLAREcursor c_flash IS select * from emp
as of timestamp to_date('29/01/13 07:23', 'dd/mm/yy HH:MI');r_emp emp%ROWTYPE;BEGINOPEN c_flash;LOOP
fetch c_flash into r_emp;exit when c_flash%notfound;insert into emp values (r_emp.empno, r_emp.ename, r_emp.job, r_emp.mgr,
r_emp.hiredate, r_emp.sal, r_emp.comm, r_emp.deptno);END LOOP;
CLOSE c_flash;commit;
END;/
Flashback
Para ejecutar “flashback query” es necesario:
El privilegio SELECT sobre los objetos,
El privilegio FLASHBACK sobre los objetos, o bien FLASHBACK ANY TABLE (permite ejecutarla sobre cualquier tabla, vista o vista materializada en cualquier esquema).
1. Consulta de Flashback.
Flashback
1. Consulta de flashback
2. Consulta de flashback de versioneso Ver todas las versiones de una fila entre dos horas o dos SCN.
o Ver las transacciones que cambiaron la fila.
3. Consulta de flashback de transacciones
4. Flashback de borrado
5. Flashback de tabla
6. Flashback de base de datos
Flashback
2. Consulta de Flashback de versiones
VERSIONS permite recuperar múltiples versiones confirmadas de las filas entre dos SCN o momentos en el tiempo.
MINVALUE y MAXVALUE se refieren a los datos más antiguo y más reciente respectivamente.
A la orden SELECT se añade la cláusula VERSIONS.
Permite recuperar todas las versiones de las filas existentes entre dos puntos en el tiempo o dos SCN
Flashback
2. Consulta de Flashback de versiones
Flashback
• Puede realizar consultas a partir de un intervalo de tiempo o un
rango de números de cambio del sistema (SCN).
• Las filas devueltas por la consulta de flashback de versiones
representan un historial de cambios de las filas entre transacciones.
2. Consulta de Flashback de versiones
Flashback
• Sólo recupera las incidencias confirmadas de las filas. Las versiones
no confirmadas de las filas de una transacción no se muestran. Las
filas devueltas también incluyen las versiones suprimidas y las
posteriormente insertadas en dichas filas.
• Puede utilizase para recuperar el historial de filas. Ofrece una forma
de auditar las filas de una tabla y recuperar información sobre las
transacciones que han afectado a las filas.
2. Consulta de Flashback de versiones
Flashback
select DNAME, DEPTNO, versions_XID, versions_starttimeversions_endtime, versions_startscn, versions_endscn,
versions_operationfrom DEPTVERSIONS BETWEEN timestamp TO_DATE ('29/01/13 12:00' ,
'DD/MM/YY HH24:MI') AND SYSDATE;
2. Consulta de Flashback de versiones
Pueden usarse las columnas ocultas:
versions_starttime
versions_endtime
versions_startscn
versions_endscn
versions_XID versions_operation
Flashback
• La cláusula VERSIONS no se puede utilizar para realizar consultas en:
• Tablas externas
• Tablas temporales
• Tablas fijas
• Vistas
• La cláusula VERSIONS no puede abarcar comandos DDL. Si se modificó la estructura de la tabla, la consulta deja de producir filas cuando alcanza la hora del pasado en que se cambió la estructura.
2. Consulta de Flashback de versiones. Limitaciones.
Flashback
1. Consulta de flashback
2. Consulta de flashback de versiones
3. Consulta de flashback de transacciones
• Ver todos los cambios que ha realizado una transacción.
4. Flashback de borrado
5. Flashback de tabla
6. Flashback de base de datos
Flashback
3. Consulta de flashback de transacciones.
• La consulta de flashback de transacciones se utiliza para ver los cambios realizados en la base de datos a nivel de transacción.
• Permite diagnosticar los problemas de la base de datos y realizar análisis y auditorías de transacciones.
• La vista flashback_transaction_query almacena las sentencias SQL necesarias para deshacer los cambios realizados por una transacción concreta o durante un período de tiempo específico.
Flashback
La vista FLASHBACK_TRANSACTION_QUERY muestra información acerca de las transacciones realizadas en la bd.
• XID Identificador de transacción• START_SCN (NUMBER) Número SCN de inicio de la transacción (system
change number )• START_TIMESTAMP (DATE) Momento de inicio de la transacción• COMMIT_SCN (NUMBER) SCN de validación de la transacción (nulo para
aquellas que estén activas)• COMMIT_TIMESTAMP (DATE) Tiempo de validación de la transacción
(nulo para aquellas que estén activas)• LOGON_USER Usuario conectado
3. Consulta de flashback de transacciones.
Flashback
• UNDO_CHANGE# Undo SCN (1 o superior)• OPERATION Operación realizada (D – Delete, I – Insert, U – Update o B – desconocida)
• TABLE_NAME Nombre de la tabla a la que se le aplica la operación DML
• TABLE_OWNER Propietario de la tabla• ROW_ID Rowid de la fila modificada• UNDO_SQL SQL para deshacer la operación DML indicada por OPERATION
3. Consulta de flashback de transacciones.
Flashback
select undo_change#, operation, table_owner, table_name, row_id, undo_sql
from flashback_transaction_queryWHERE LOGON_USER='CARMEN' AND TABLE_NAME ='DEPT';
3. Consulta de flashback de transacciones.
Flashback
UPDATE DEPTSET LOC='Cartagena'WHERE DEPTNO=60;COMMIT;
Insert into dept values (70, 'Promoción', 'Cádiz');
delete from deptwhere deptno=50;
commit;
3. Consulta de flashback de transacciones.
select DNAME, DEPTNO, versions_XID, versions_starttime
versions_endtime, versions_startscn, versions_endscn, versions_operation
from DEPTVERSIONS BETWEEN timestamp TO_DATE
('29/01/13 12:20:00' , 'DD/MM/YY HH24:MI:ss') AND sysdate;
Identificamos la transacción
Flashback
select XID, undo_change#, operation, table_owner, table_name, row_id, undo_sql
from flashback_transaction_queryWHERE XID= '110009008B0A0000'
3. Consulta de flashback de transacciones.
Órdenes que nos permiten anular la transacción