Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Actividad N° 6
En primer lugar, se debe crear la tabla “DATOS”, la cual tendrá 2 atributos, que serán los
siguientes:
➢ Codigo numeric(2).
➢ Nombre carácter(10).
Análisis
Figura 8: Actualización.
Figura 9: Consulta.
Análisis
Primeramente usamos la transacción BEGIN, el cual deja sin efectos permanentes los
cambios que se le realicen a la base de datos, ahora bien, si queremos efectuar ese cambios,
cerramos la transacción mediante el comando COMMIT, el cual efectua los cambios
realizados a la base de datos.
Con esto presente, podemos continuar.
El UPDATE en C2, se hizo efectivo una vez realizado el COMMIT en C1, es por ello
que el tiempo de ejecución demoró 3 minutos y 58 segundos.
Análisis
Durante la ejecución de los comandos, se puede apreciar algo que llama fuertemente la
atención, y es que después de realizado el BEGIN enC1, y realizar el UPDATE en el
NOMBRE de CODIGO 7. En C2, se realiza un BEGIN y luego el UPDATE en el
NOMBRE de CODIGO 7, este comando no se ejecuta, es decir, no se realiza la
actualización en C2 dentro del comando BEGIN.
Esto es debido a una propiedad llamada “Concurrencia”. La cual dice que, el control de
transacciones concurrentes en una base permite controlar la ejecución de transacciones que
operan en paralelo, accediendo a información compartida y, por lo tanto, interfiriendo
potencialmente unas con otras.
Esto quiere decir, que una ejecución no se puede llevar a cabo, si hay otra ejecución en
paralelo que aún no ha terminado.
4.4 Seguido a eso, ahora en C2, consultamos por el NOMBRE de la fila de CODIGO 4.
Análisis
Lo más importante de este proceso, es la aparición del error denominado “deadlock”, pero
¿Qué es este error, de que se trata, por qué aparece?
Consulta 2:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_8_1’ WHERE codigo =8;
Seguido de:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_2_1’ WHERE codigo =2;
Para evitar este “deadlock” y que los cambios ocurran, el orden de las consultas debería ser
el siguiente:
Consulta 1:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_2’ WHERE codigo =2;
Seguido de:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_2_1’ WHERE codigo =2;
Consulta 2:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_8’ WHERE codigo =8;
Seguido de:
BEGIN => UPDATE datos SET nombre = ‘UPDATE_8_1’ WHERE codigo =8;
6.1. En C1, abrimos una transacción BEGIN y actualizamos en NOMBRE de la fila de
CODIGO 1.
No se puede realizar la actualización debido que hay una “concurrencia”, esto quiere decir,
que la ejecución no se puede llevar a cabo, si hay otra ejecución que aún no ha terminado.
Dicho esto, procederemos al siguiente paso.
Análisis
7.2 En C2, sin utilizar la transacción BEGIN y sin utilizar el comando “FOR … UPDATE”,
consultamos por el NOMBRE de la fila de CODIGO 10 y lo actualizamos a un NOMBRE
diferente.
7.3 En C1, consultamos por el NOMBRE de la fila de CODIGO 10, sin utilizar el comando
“FOR … UPDATE”, y lo actualizamos a un NOMBRE diferente a los anteriores.
7.6 En C1, consultar sin utilizar el comando “FOR … UPDATE”, por el NOMBRE de la
fila de CODIGO 10.
Análisis