You are on page 1of 2

Isolation Levels

Los niveles de isolation de una transaccin en JDBC determinan si el nivel de la transaccin que se est corriendo en la base de datos puede afectar a otro o no. Si hay dos o ms transacciones accediendo a la base de datos concurrentemente, se necesita prevenir las acciones de las transacciones para que estas no interfieran con las otras. Esto puede realizarse usando niveles de isolation en JDBC. Algunos problemas comunes que pueden ocurrir al acceder a la base de datos simultneamente son: Dirty Reads (Lecturas Sucias): Este problema es tambin conocido como uncommitted dependency problem. Y puede ser explicado por el siguiente ejemplo: Un empleado est realizando cambios al documento de polticas de la empresa. Cuando los cambios estn realizndose, otro empleado toma una copia del documento que incluye todos los cambios hechos anteriormente y distribuye estos a toda la empresa. Entonces en eso los cambios que hizo el primer empleado se terminaron de hacer, pero para esto ya hay una copia de un documento en toda la empresa, y el problema es que este documento que ya fue distribuido, ya no es el actual. La solucin a este problema sera no permitir que alguien lea el documento hasta que el primer empleado haya guardado todos los datos al documento. La interface Connection de la API JDBC provee las siguientes propiedades como valores enteros para colocar el nivel de isolation.

TRANSACTION_READ_LEVEL: Provee el nivel ms bajo de isolation entre todos las transacciones que estn siendo ejecutadas.

Este nivel de isolation no previene de los dirty reads, non-repeatable reads y phanton reads. Este nivel nicamente previene leer los datos que estn corruptos fsicamente.

TRANSACTION_READ_COMMITED: este nivel previene los dirty reads, sin embargo los otros problemas como phantom-reads y non-repetable reads siempre pueden ocurrir en este nivel.

TRANSACTION_REPEATABLE_READ: Este nivel previene los dirty-reads, y los non-repetable-reads. Este nivel previene que la transaccin actualice los datos que estn siendo utilizados por otra transaccin.

TRANSACTION_SERIALIZABLE: Este provee el nivel ms alto de isolation entre todas las transacciones que estn siendo procesadas. Este nivel es para prevenir todos los problemas que pueden ocurrir, como dirty-reads, non-repetable-reads y phantom-reads. Lo que hace este nivel es que bloquea las filas que estn siendo utilizadas en otra transaccin hasta que ese nivel se cierra, por lo tanto en medio de una transaccin esos datos no puedes ser ledo sin modificados.

La interface Connection contiene el mtodo getTransactionIsolationLevel() y setTransactionIsolationLevel() para obtener o setear el valor. El mtodo getTransactionIsolationLevel no toma argumentos, y retorna un valor entero.

Para utilizarlo podemos ver el siguiente cdigo:


Connection con = DriverManager.getConnection(jdbc:odbc:probandoDS,user,pass); int transLevel = getTransactionIsolationLevel():

y para setear el tipo de nivel de isolation se realiza lo siguiente:


con.setTransactionIsolationLevel(TRANSACTION_SERIALIZABLE);

You might also like