Documente Academic
Documente Profesional
Documente Cultură
Autor(es):
JUAN PABLO AGUDELO RAMÍREZ
DIANA PAOLA VILLALOBOS
CESAR SIERRA VILLARREAL
Presentado a:
Instructora
INGRID CATERINE RAMÍREZ ALDANA
3 3
2019
TABLA DE CONTENIDO
INTRODUCCIÓN..................................................................................................................3
MANEJO DE TRANSACCIONES EN ORACLE DATABASE 12C...................................4
Introducción a las transacciones.........................................................................................4
Atomicidad......................................................................................................................4
Consistencia....................................................................................................................4
Aislamiento.....................................................................................................................4
Durabilidad......................................................................................................................5
Inicio de una transacción.................................................................................................5
Fin de una Transacción...................................................................................................5
DETECTAR BLOQUEOS EN ORACLE..........................................................................7
ORA-00054: recurso ocupado y obtenido con NOWAIT especificado o timeout
vencido || Bloqueos.........................................................................................................7
CONTROL DE CONCURRENCIA EN ORACLE............................................................8
BIBLIOGRAFÍA..................................................................................................................10
3 3
INTRODUCCIÓN
3 3
Una transacción es una unidad de trabajo lógica y atómica que contiene una o más
declaraciones SQL.
Una transacción agrupa las sentencias de SQL para que estén todas confirmadas, lo que
significa que se aplican a la base de datos, o todas se retrotraen, lo que significa que se
deshacen de la base de datos. La base de datos Oracle asigna a cada transacción un
identificador único llamado ID de transacción.
Todas las transacciones de Oracle obedecen a las propiedades básicas de una transacción de
base de datos, conocidas como propiedades ACID.
Atomicidad
Se realizan todas las tareas de una transacción o ninguna de ellas se realiza. No hay
transacciones parciales. Por ejemplo, si una transacción comienza a actualizar 100 filas,
pero el sistema falla después de 20 actualizaciones, entonces la base de datos revierte los
cambios a estas 20 filas.
Consistencia
La transacción lleva la base de datos de un estado consistente a otro estado consistente. Por
ejemplo, en una transacción bancaria que carga a una cuenta de ahorros y acredita a una
cuenta corriente, una falla no debe hacer que la base de datos acredite solo una cuenta, lo
que podría llevar a datos inconsistentes.
Aislamiento
El efecto de una transacción no es visible para otras transacciones hasta que se confirma la
transacción. Por ejemplo, un usuario que actualiza la hr.employeestabla no ve los cambios
no confirmados employeesrealizados por otro usuario simultáneamente. Por lo tanto, a los
usuarios les parece que las transacciones se están ejecutando en serie.
3 3
Durabilidad
Los cambios realizados por transacciones comprometidas son permanentes. Una vez que se
completa una transacción, la base de datos garantiza a través de sus mecanismos de
recuperación que los cambios de la transacción no se pierden.
Una instrucción SQL ejecutable es una instrucción SQL que genera llamadas a
una instancia de base de datos , incluidas las declaraciones DML y DDL y la SET
TRANSACTIONdeclaración.
3 3
Un usuario ejecuta un comando DDL tales como CREATE, DROP, RENAME, o ALTER.
Una vez que finaliza una transacción, la siguiente instrucción SQL ejecutable inicia
automáticamente la siguiente transacción. El siguiente ejemplo ejecuta una UPDATE para
iniciar una transacción, finaliza la transacción con una ROLLBACK declaración y luego
ejecuta una UPDATE para iniciar una nueva transacción (tenga en cuenta que los ID de
transacción son diferentes):
3 3
En Oracle hay una vista v$lock que nos indica los objetos que se encuentran en bloqueo, el
identificador de usuario y sesión y el tipo de bloqueo.
Un join con la tabla dba_objects nos proporciona además el nombre y tipo de los objetos
bloqueados:
Este error suele aparecer cuando existen bloqueos esperando a que otro usuario termine una
operación, para poder realizar la suya. Uno de los más comunes que suelen suceder es
cuando se hacen “truncate” o “drop” de tablas y no nos deja hacerlo porque las tabla/s están
bloqueada/s por otros procesos de ese mismo u otros usuarios.
3 3
Esto ocurre porque se ha bloqueado uno o varios registros mediante setencias SQL. Select´s
especificados como “NO WAIT” o “FOR UPDATE NOWAIT” o por una operación DDL
que fue bloqueada. La solución podía pasar por hacer el commit o rollback. El commit no
funcionó porque no hay espacio en el tablespace.
En Oracle hay una vista llamada v$lock que nos indica los objetos que se encuentran en
bloqueo, el identificador de usuario, sesion y el tipo de bloqueo. Un join con la tabla
dba_objects nos proporcionará además el nombre y tipo de los objetos bloqueados. La
consulta seria de la siguiente manera:
Oracle es un sistema manejador de bases de datos que permite concurrencia, es decir, que
varios usuarios realicen transacciones en el mismo instante de tiempo. Dar soporte a esta
solicitud es de vital importancia para los sistemas actuales y deben tomarse medidas para
garantizar que en ningún momento se pierdan datos debido al acceso y modificación
concurrente en la BD.
En general, Oracle implementa un sistema basado en SCN (System Change Number) que
consiste en generar un número (relativo al tiempo del sistema) que sirva de referencia para
3 3
marcar una transacción y que ésta sólo acceda a la versión de los datos con un SCN cercano
al suyo, evitando así que las transacciones accedan a versiones modificadas de las tablas.
Por defecto, Oracle activa los protocolos de concurrencia a nivel de sentencias, que
consisten en que una consulta utilice los valores que se encontraban en los registros justo
antes de comenzar la consulta (y no antes de comenzar la transacción). De esta forma se
evita que la consulta acceda a datos que no fueron confirmados (Uncommited Data) o que
están siendo actualizados por otras transacciones.
Como las transacciones son aisladas (según las propiedades ACID), Oracle posee distintos
niveles de aislamiento para asegurar la consistencia. Entre ellos se encuentran:
Lectura Confirmada: Una consulta solo utiliza datos que fueron confirmados
(Commited Data) antes del comienzo de la ejecución de la consulta.
Serializable: Cada consulta utiliza los datos que fueron confirmados antes del
comienzo de la ejecución de la transacción, además de acceder también a los cambios
realizados por sentencias INSERT, DELETE, UPDATE que hayan sido ejecutadas
dentro de esta transacción.
Sólo Lectura: Sólo es visible la versión de los datos al momento del comienzo de la
transacción y no se permiten sentencias INSERT, UPDATE, DELETE, dentro de la
transacción.
3 3
BIBLIOGRAFÍA
https://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT117
http://innovaskynet.blogspot.com/2014/09/como-detectar-bloqueos-en-oracle.html
https://javalangnullpointer.wordpress.com/2007/02/19/detectar-bloqueos-en-oracle/
https://entendiendoaoracle.wordpress.com/2014/11/01/control-de-concurrencia-en-oracle/
3 3