Professional Documents
Culture Documents
Lectura sucia. Las sentencias SELECT son ejecutadas sin realizar bloqueos, pero
podría usarse una versión anterior de un registro. Por lo tanto, las lecturas no son
consistentes al usar este nivel de aislamiento.
Lectura norepetible. Una transacción vuelve a leer datos que previamente había
leído y encuentra que han sido modifcados o eliminados por una transacción
cursada.
Los niveles de aislamiento SQL son defnidos basados en si ellos permiten a cada
uno de los eventos defnidos anteriormente. Es interesante notar que el estándar
SQL no impone un esquema de cierre específco o confere por mandato
comportamientos particulares, pero más bien describe estos niveles de aislamiento
en términos de estos teniendo muchos mecanismos de cierre/coincidencia, que
dependen del evento de lectura
Concurrencia Oracle
¿Cómo?
Oracle garantiza que los datos devueltos por una consulta son consistentes con
respecto al tiempo en que empezó la consulta.
Oracle observa el SCN (system change number) cuando la consulta entra en
ejecución.
Solo los datos aceptados antes de dicho SCN serán utilizados.
Segmentos de anulación se utilizan para buscar versiones anteriores de los
datos.
Nivel de transacción:
Datos vistos por todas las consultas de una transacción son consistentes con
respecto a un punto en el tiempo.
Se debe indicar que la transacción es Read-Only.
Si las transacciones son de solo lectura, se actúa como en el caso anterior.
Si existen otro tipo de consultas (modifcar, borrar,insertar..) se deben utilizar
bloqueos.
serializable:
Bloqueos en Oracle
Bloqueos son los mecanismos que utiliza Oracle para evitar que dos transacciones
accedan al mismo recurso.
ORACLE utiliza el nivel menos restrictivo guiándose por las siguientes reglas:
Se utilizan bloqueos a nivel de fla: una transacción espera cuando intenta modifcar
una fla modifcada por una transacción no confrmada.
Una sentencia de SQL ejecutable es una instrucción SQL que genera llamadas a una
instancia de base de datos, incluyendo DML y DDL y la instrucción SET
TRANSACCIÓN.
El siguiente ejemplo se ejecuta una instrucción UPDATE para iniciar una transacción,
Verifcamos su comportamiento consultando la vista V$transacción,
Sesión 1 Sesión 2
CONNECT umg/umg CONNECT umg/umg AS SYSDBA
SELECT XID AS "txn id", XIDUSN AS "undo
seg", XIDSLOT AS "slot", XIDSQN AS "seq",
STATUS AS "txn status", addr
FROM V$TRANSACTION;
SELECT sid FROM v$session
WHERE taddr = 'BDB0F06C';
SELECT COUNT(*) n FROM
V$TRANSACTION;
COMMIT
Un usuario emite una sentencia COMMIT -guardar- o ROLLBACK -deshacer- sin una
cláusula SAVEPOINT -punto de restauración.
Un usuario emite una sentencia COMMIT -guardar- o ROLLBACK -deshacer- sin una
cláusula SAVEPOINT -punto de restauración.
Un usuario ejecuta una sentencia DDL como CREATE, DROP, RENAMEZ o ALTER.
La base de datos emite una sentencia COMMIT implícito antes y después de cada
instrucción DDL. Si la transacción actual contiene instrucciones DML, a continuación,
Oracle Database primera confrma la transacción y luego corre y se compromete la
sentencia DDL como una nueva, transacción de un único estado.
Un usuario sale normalmente de la mayoría de las utilidades y herramientas de
base de datos Oracle, haciendo que la transacción actual que se ha comprometido
de forma implícita. El comportamiento AUTOCOMMIT cuando un usuario se
desconecta depende de la aplicación y la confguración del gestor
SET TRANSACTION
11/07/16 18.8607
12/07/16 18.5991
13/07/16 18.4597
14/07/16 18.3006
15/07/16 18.3937
16/07/16 18.3061
READ
Sesión 1 Sesión 2
CONNECT umg/umg CONNECT umg/umg;
SET TRANSACTION READ ONLY; INSERT INTO dolar VALUES
('17/07/16',18.3061);
INSERT INTO dolar VALUES
('18/07/16',18.3061);
COMMIT COMMIT
READ/WRITE
Sesión 1 Sesión 2
CONNECT umg/umg CONNECT umg/umg;
SET TRANSACTION READ WRITE; SET TRANSACTION READ WRITE;
INSERT INTO dolar VALUES COMMIT
('11/07/16',18.8607);
INSERT INTO dolar VALUES
('12/07/16',18.5991);
INSERT INTO dolar VALUES
('13/07/16',18.4597);
SERIALIZABLE
Una transacción SERIALIZABLE opera en un ambiente que hace que parezca como si no
existieran otros usuarios que modifcan los datos en la base de datos. Cualquier fla se
lee está asegurada al ser el mismo en una de nueva lectura, y cualquier consulta se
ejecuta está garantizado para devolver los mismos resultados para la vida de una
transacción.
Sesión 1 Sesión 2
CONNECT umg/umg;
CREATE TABLE a ( x INT );
CREATE TABLE b ( x INT );
ALTER SESSION SET
CONNECT umg/umg;
ISOLATION_LEVEL=SERIALIZABLE;
ALTER SESSION SET
INSERT INTO a SELECT COUNT(*) FROM b;
ISOLATION_LEVEL=SERIALIZABLE;
INSERT INTO b SELECT COUNT(*) FROM a;
INSERT INTO b SELECT COUNT(*) FROM a;
... INSERT INTO b SELECT COUNT(*) FROM
a;
COMMIT; COMMIT;
Para crear un usuario y concederle permisos .
SET TRANSACTION
Transaction Management
Transactions
Data Concurrency and Consistency