Identificando transacciones
Oracle es un sistema de bases de datos puramente transacciónal. Durante el tiempo de vida de una transacción, las modificaciones que hagamos sobre la base de datos no son definitivas.
Estas transacciónes se realizan sobre un segmento de ROLLBACK, donde se almacenan todas las modificaciones de cada transacción. Una vez que finaliza la transacción, se vuelcan al Tablespace original, donde se encuentra almacenada la tabla con los datos.
Esto permite que las modificaciones que se realicen en varias sentencias se puedan validar todas a la vez, o bien rechazarlas en su conjunto. Veamos ahora de manera práctica cómo podemos identificar transacciónes, y su ciclo de vida en Oracle.
Primero vamos a crear una tabla, si bien no es muy recomendado crear tablas desde el usuario SYS, al menos por esta vez vamos a permitirnoslo, ya que solo intentamos ejemplificar algo en concreto y no trabajar sobre una base de datos real. Entonces escribimos:
- CREATE TABLE TRXS (VALOR VARCHAR2(100).
Ya tenemos la table creada, entonces vamos a comenzar una transacción. Vamos a insertar un valor en la tabla recién creada, escribimos:
- INSERT INTO TRXS VALUES([1234])
Y vemos el mensaje 1 row created., que nos indica que se ha creado un registro.
Pues bien, en el momento que ejecutamos esta consulta, se gestiona por Oracle mediante una transacción. Si vamos a la vista que nos muestra las transacciónes, debemos ver la transacción que recién se ha creado, entonces escribimos:
- SELECT ADDR, UBAFIL, STATUS FROM V$TRANSACTION
De esta manera solo vamos a mostrar tres columnas de esa vista. Y tenemos al menos una transacción aquí, el fichero del undo que contiene la transacción está identificado, en mi caso, con un 8 y su status es Active.
Veamos ahora cuál es ese fichero con ID 8:
- SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME=[UNDOTBS2]
Aquí tenemos, el nombre del archivo, el id del archivo que es 8, y el tablespace a que pertenece, que es UNDOTBS2. Hagamos ahora un COMMIT para terminar la transacción y vamos a mostrar nuevamente la vista que nos devuelve las transacciónes:
- SELECT ADDR, UBAFIL, STATUS FROM V$TRANSACTION
Presionamos Intro y observamos que ya no tenemos ninguna transacción.
Recordar que una transacción, un conjunto de sentencias SQL del tipo INSERT, UPDATE o DELETE. Hasta que no hagamos un COMMIT o un ROLLBACK, tendremos una transacción gestionando estas operaciones.
Vamos a verlo de manera práctica, por ejemplo, vamos a hacer un:
- INSERT INTO TRXS VALUES ([AAA])
Presionamos Intro y se nos muestra el mensaje 1 row created. Si mostramos la vista de las transacciónes nuevamente:
- SELECT ADDR, UBAFIL, STATUS FROM V$TRANSACTION
Vemos que ya tenemos una transacción, diferente a la que teníamos antes de hac
identificando transacciones