Utilización de FLASHBACK EN ORACLE
Enviado por tolero • 14 de Diciembre de 2018 • 808 Palabras (4 Páginas) • 397 Visitas
...
COMMIT;
Después de eliminar las tablas e insertar datos nuevos a employees y departments. Al realizar las operaciones de eliminación y creación en términos de filas, cada tabla tiene ahora una versión por fila. Ahora supongamos que una transacción errónea elimina empleado_id 111 de la tabla employees;
2.
UPDATE employees SET salario = salario + 100 WHERE empleado_id = 111;
INSERT INTO departments ( departamento_id , departamento_n ) VALUES ( 20, 'Finance');
DELETE FROM employees WHERE empleado_id = 111;
COMMIT;
A continuación, se asigna un nuevo nombre al empleado con id 111.
INSERT INTO employees (empleado_id, empleado_n, salario) VALUES (111, 'Tom', 777);
UPDATE employees SET salario = salario + 100 WHERE empleado_id = 111;
UPDATE employees SET salario = salario + 50 WHERE empleado_id = 111;
COMMIT;
Supongamos que el Administrador de la base de datos detecta el error de aplicación y se debe diagnosticar el problema. El administrador de la base está dentro de sus funciones el diagnosticar el problema. Para ello se emite una consulta de recuperación de versiones de las filas de la tabla employees correspondiente al empleado_id. La consulta utiliza pseudocolumnas en Oracle Flashback Query versión.
SELECT versions_xid XID, versions_startscn START_SCN,
versions_endscn END_SCN, versions_operation OPERATION,
empleado_n, salario
FROM employees
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE empleado_id = 111;
El resultado sería lo siguiente:
[pic 2]
Los resultados de las filas están en orden cronológico descendente. La tercera fila corresponde a la tabla inicial, es decir, a la primera tabla creada. La segunda fila corresponde a la fila en la transacción errónea (eliminación). La primera fila corresponde a la versión de la fila que se reinserto con un nuevo nombre para el empleado “TOM”.
El administrador de la base datos tiene que identificar la transacción errónea la cual es “08000A0040040000” y utilizar Oracle Flashback Query Transaction para auditar todos los cambios realizados por esta transacción.
SELECT xid, start_scn, commit_scn, operation, logon_user, undo_sql
FROM flashback_transaction_query
WHERE xid = HEXTORAW('08000A0040040000');
El resultado será similar:
[pic 3]
Para que el resultado de la consulta sea más fácil de leer, el administrador de base de datos utilizas estos comandos SQL * Plus.
COLUMN operation FORMAT A9
COLUMN table_name FORMAT A10
COLUMN table_owner FORMAT A11
Para ver los detalles de la transacción errónea y todas las posteriores operaciones, se realiza la siguiente consulta:
XID SELECT, start_scn, commit_scn, operación, nombre_tabla, table_owner
DE FLASHBACK_TRANSACTION_QUERY
DONDE table_owner = 'HR'
Y start_timestamp> =
TO_TIMESTAMP (‘2017-01-01 11:00:00', 'AAAA-MM-DD HH: MI: SS');
...