UNIVERSIDAD POLITECNICA AMAZONICA
INGENIERÍA DE SISTEMAS Y TELEMÁTICAS
Docente : Marco Aurelio Porro Chulli
Asignatura :BASE DE DATOS II.
Ciclo : VIII "A"
Integrantes : Yanina Bustamante Jibaja.
Yenny Isabel Cuello Morón.
TRANSACCIONES
EN SQL SERVER
1
Contenido
Ø
Definición
Una
transacción es un conjunto de operaciones que van a ser tratadas como una única
unidad. Estas transacciones deben cumplir 4 propiedades fundamentales
comúnmente conocidas como ACID (atomicidad, coherencia, asilamiento y
durabilidad).
Es
una unidad única de trabajo. Si una transacción tiene éxito, todas las
modificaciones de los datos realizadas durante la transacción se confirman y se
convierten en una parte permanente de la base de datos.
Si
una transacción encuentra errores y debe cancelarse o revertirse, se borran
todas las modificaciones de los datos.
Es
considerado como un grupo de una o varias instrucciones de base de datos
totalmente confirmadas o totalmente revertidas. Cada transacción es atómica,
coherente, aislada y durable (ACID).
El
principio y el final de las transacciones dependen de la configuración de
AUTOCOMMIT y de las instrucciones BEGIN TRANSACTION, COMMIT y ROLLBACK
Ø
Propiedades ACID (Atomicidad,
Consistencia, Aislamiento y Durabilidad)
Atomicidad
Las operaciones que componen una transacción
deben considerarse como una sola.
Una transacción es una unidad de
trabajo en la que se produce una serie de operaciones entre las instrucciones
BEGIN TRANSACTION y END TRANSACTION de una aplicación. Una transacción se
ejecuta exactamente una vez y tiene carácter "atómico" (de subdivisión),
es decir, el trabajo se realiza en su totalidad o no se realiza en ningún caso.
Las operaciones asociadas a una
transacción comparten normalmente un objetivo común y son interdependientes. Si
el sistema ejecutase únicamente una parte de las operaciones, podría poner en
peligro el objetivo final de la transacción. La atomicidad elimina la
posibilidad de procesar un subconjunto de operaciones.
Consistencia
Una operación nunca deberá dejar
datos inconsistentes.
Una transacción es una unidad de
integridad porque mantiene la coherencia de los datos, transformando un estado
coherente de datos en otro estado de datos igualmente coherente.
Se requiere que los datos
enlazados mediante una transacción se mantengan en términos de semántica. Una
parte de la responsabilidad para mantener la coherencia recae en el programador
de la aplicación que debe asegurarse de que ésta exija todas las restricciones
de integridad conocidas.
Aislamiento
Los datos "sucios" deben estar
aislados, y evitar que los usuarios utilicen información que aún no está
confirmada o validada.
El aislamiento requiere que
parezca que cada transacción sea la única que manipula el almacén de datos,
aunque se puedan estar ejecutando otras transacciones al mismo tiempo. Una
transacción nunca debe ver las fases intermedias de otra transacción.
Las transacciones alcanzan el
nivel máximo de aislamiento cuando se pueden serializar. En este nivel, los
resultados obtenidos de un conjunto de transacciones concurrentes son idénticos
a los obtenidos mediante la ejecución en serie de las transacciones.
Como un alto grado de aislamiento
puede limitar el número de transacciones concurrentes, algunas aplicaciones
reducen el nivel de aislamiento en el intercambio para mejorar el rendimiento.
Durabilidad
Una vez completada la transacción
los datos actualizados ya serán permanentes y confirmados.
Si una transacción se realiza
satisfactoriamente, el sistema garantiza que sus actualizaciones se mantienen,
aunque el equipo falle inmediatamente después de la confirmación. El registro
especializado permite que el procedimiento de reinicio del sistema complete las
operaciones no finalizadas, garantizando la permanencia de la transacción.
Ø Tipos de Transacciones (Implícitas, Explícitas, ámbito de lote, etc.)
v Implícitas: Cuando el Gestor de Datos comienza una transacción
automáticamente cada vez que se produce una actualización de datos, pero el que
dicha transacción se confirme o se deshaga, lo debe indicar el programador.
Se inicia
implícitamente una nueva transacción cuando se ha completado la anterior, pero
cada transacción se completa explícitamente con una instrucción COMMIT o
ROLLBACK.
v Explícitas:
Son las que iniciamos nosotros "a mano" mediante instrucciones SQL,
los programadores son los que indican qué operaciones va a abarcar.
Cada
transacción se inicia explícitamente con la instrucción BEGIN TRANSACTION y se
termina explícitamente con una instrucción COMMIT o ROLLBACK.
v Transacciones
de Ámbito de Lote: Una transacción implícita o explícita de Transact-SQL
que se inicia en una sesión de MARS (conjuntos de resultados activos
múltiples), que solo es aplicable a MARS, se convierte en una transacción de
ámbito de lote. Si no se confirma o revierte una transacción de ámbito de lote
cuando se completa el lote, SQL Server la revierte automáticamente.
v De Confirmación Automática: El Gestor de Datos inicia una transacción
automáticamente por cada operación que actualice datos. De este modo mantiene
siempre la consistencia de la base de datos, aunque puede generar bloqueos.
Ø Comandos BEGIN TRANSACTION, ROLLBACK TRANSACTION y COMMIT TRANSACTION
BEGIN
TRANSACTION
Marca el punto de inicio de una transacción
explícita.
Representa un punto en el que los datos a los que
hace referencia una conexión son lógica y físicamente coherentes. Si se
producen errores, se pueden revertir todas las modificaciones realizadas en los
datos después de BEGIN TRANSACTION para devolver los datos al estado conocido
de coherencia.
Cada transacción dura hasta que se completa sin
errores y se emite COMMIT TRANSACTION para hacer que las modificaciones sean
una parte permanente de la base de datos, o hasta que se produzcan errores y se
borren todas las modificaciones con la instrucción ROLLBACK TRANSACTION.
COMMIT
Marca el final de una transacción explícita o de
confirmación automática. Esta instrucción hace que los cambios en la
transacción se confirmen permanentemente en la base de datos. La instrucción
COMMIT es idéntica a COMMIT WORK, COMMIT TRAN y COMMIT TRANSACTION.
Si la transacción que se ha confirmado era una
transacción Transact-SQL distribuida, COMMIT TRANSACTION hace que MS DTC
utilice el protocolo de confirmación en dos fases para confirmar los servidores
involucrados en la transacción.
Si una transacción local afecta a dos o más bases
de datos de la misma instancia del Motor de base de datos, la instancia utiliza
una confirmación interna en dos fases para confirmar todas las bases de datos
involucradas en la transacción.
ROLLBACK
Revierte una transacción al principio de la misma.
No se confirman cambios para la transacción en la base de datos. La instrucción
ROLLBACK es idéntica a ROLLBACK WORK, ROLLBACK TRAN y ROLLBACK TRANSACTION.
Una transacción no se puede revertir después de
ejecutar una instrucción COMMIT TRANSACTION, excepto cuando COMMIT TRANSACTION
está asociada a una transacción anidada incluida en la transacción que se
revierte. En esta instancia, la transacción anidada se revierte, incluso si ha
emitido una instrucción COMMIT TRANSACTION para ella.
Ø EJEMPLOS
1
USE NorthWind
DECLARE @Error int
--Declaramos una variable que utilizaremos para
almacenar un posible código de error
BEGIN TRAN
--Iniciamos la transacción
UPDATE Products SET UnitPrice=20 WHERE ProductName
='Chai'
--Ejecutamos la primera sentencia
SET @Error=@@ERROR
--Si ocurre un error almacenamos su código en
@Error
--y saltamos al trozo de código que deshara la
transacción. Si, eso de ahí es un
--GOTO, el demonio de los programadores, pero no
pasa nada por usarlo
--cuando es necesario
IF (@Error<>0) GOTO TratarError
--Si la primera sentencia se ejecuta con éxito,
pasamos a la segunda
UPDATE Products SET UnitPrice=20 WHERE
ProductName='Chang'
SET @Error=@@ERROR
--Y si hay un error hacemos como antes
IF (@Error<>0) GOTO TratarError
--Si llegamos hasta aquí es que los dos UPDATE se
han completado con
--éxito y podemos "guardar" la
transacción en la base de datos
COMMIT TRAN
TratarError:
--Si ha ocurrido algún error llegamos hasta aquí
If @@Error<>0 THEN
BEGIN
PRINT
'Ha ecorrido un error. Abortamos la transacción'
--Se
lo comunicamos al usuario y deshacemos la transacción
--todo
volverá a estar como si nada hubiera ocurrido
ROLLBACK
TRAN
END
2.
BEGIN TRAN TranExterna -- @@TRANCOUNT ahora es 1
SELECT 'El nivel de anidamiento es', @@TRANCOUNT
INSERT INTO Test VALUES (1)
BEGIN TRAN TranInterna1 -- @@TRANCOUNT ahora es 2.
SELECT 'El nivel de anidamiento es',
@@TRANCOUNT
INSERT INTO Test VALUES (2)
BEGIN TRAN TranInterna2 -- @@TRANCOUNT
ahora es 3.
SELECT 'El nivel de anidamiento es',
@@TRANCOUNT
INSERT INTO Test VALUES (3)
ROLLBACK TRAN --@@TRANCOUNT es 0 y se
deshace
--la transacción externa y todas las
internas
SELECT 'El nivel de anidamiento es',
@@TRANCOUNT
SELECT * FROM Test
2. Resumen
Una
transacción es un conjunto de operaciones que van a ser tratadas como una única
unidad. Estas transacciones deben cumplir 4 propiedades fundamentales
comúnmente conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad).
La
transacción más simple en SQL Server es una única sentencia SQL. Por ejemplo
una sentencia como esta:
UPDATE Products SET UnitPrice=20 WHERE
ProductName ='Chai'
Cuando
enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones
lo que va a ocurrir y a continuación realiza los cambios necesarios en la base
de datos. Si hay algún tipo de problema al hacer esta operación el SQL Server
puede leer en el fichero de transacciones lo que se estaba haciendo y si es
necesario puede devolver la base de datos al estado en el que se encontraba
antes de recibir la sentencia.
Por
supuesto este tipo de transacciones no requieren de nuestra intervención puesto
que el sistema se encarga de todo. Sin embargo, si hay que realizar varias operaciones
y queremos que sean tratadas como una unidad tenemos que crear esas
transacciones de manera explícita.
3. Sumary
A
transaction is a set of operations that will be treated as a single unit.
"My friends must comply" in English as "ACID" (atomicity,
coherence, isolation and durability).
The
simplest transaction in SQL Server is a single SQL statement. For example, a
sentence like this:
UPDATE Products SET UnitPrice=20 WHERE
ProductName ='Chai'
When
we send this statement to the SQL Server, what is going to happen is written in
the transaction file and then it makes the necessary changes in the database.
If there is any kind of problem when doing this operation, the SQL Server can
read in the transaction file what was being done and if necessary it can return
the database to the state it was in before receiving the statement.
Of
course these types of transactions do not require our intervention since the
system takes care of everything. However, if we have to carry out several
operations and we want them to be treated as a unit, we have to create those
transactions explicitly.
4. Recomendaciones
· Una transacción implícita o explícita de Transact-SQL que se
inicia en una sesión de MARS (conjuntos de resultados activos múltiples), que
solo es aplicable a MARS, se convierte en una transacción de ámbito de
lote. Si no se confirma o revierte una transacción de ámbito de lote
cuando se completa el lote, SQL Server la revierte automáticamente.
· Si hay algún tipo de problema
al enviar esta sentencia SQL(UPDATE) SQL Server puede leer en el fichero de
transacciones lo que se estaba haciendo y si es necesario puede devolver la
base de datos al estado en el que se encontraba antes de recibir la sentencia.
5. Conclusiones
· Si una transacción tiene éxito, todas las
modificaciones de los datos realizadas durante la transacción se confirman y se
convierten en una parte permanente de la base de datos.
·
Si una transacción encuentra errores y debe
cancelarse o revertirse, se borran todas las modificaciones de los datos.
6. Apreciación del Equipo
· Las transacciones no hacen referencia únicamente a temas
relacionados con los ordenadores. Cualquier tipo de actividad humana que
conlleve una unidad lógica de trabajo que tenga que ser realizado en su
completitud o ser cancelada implica una transacción.
· Las transacciones son unidades recuperables de tareas de
acceso a datos para la manipulación del contenido de las bases de datos. Estas
incluyen también unidades de recuperación de la base de datos en caso de fallo
del sistema
7. Glosario de Términos
ROLLBACK: fuerza
que se deshaga la transacción en caso de haber un problema o querer
abandonarla. Cierra la transacción.
BEGIN TRANSACTION o BEGIN TRAN: marca
el inicio de una transacción. TRAN es un sinónimo de TRANSACTION y se suele
usar más a menudo por abreviar.
ROLLBACK TRANSATION o ROLLBACK
TRAN: fuerza que se deshaga la transacción en caso de haber un
problema o querer abandonarla. Cierra la transacción.
COMMIT TRANSACTION O COMMIT
TRAN: confirma el conjunto de operaciones convirtiendo los datos
en definitivos. Marca el éxito de la operación de bloque y cierra
READ COMMITED: Una
transacción no podrá ver los cambios de otras conexiones hasta que no hayan
sido confirmados o descartados.la transacción.
COMMIT:
confirma el conjunto de operaciones convirtiendo los datos en definitivos.
Marca el éxito de la operación de bloque y cierra la transacción.
IMPLÍCITAS:
cuando el gestor de datos comienza una transacción automáticamente cada vez que
se produce una actualización de datos, pero el que dicha transacción se
confirme o se deshaga, lo debe indicar el programador.
EXPLÍCITAS: son
las que iniciamos nosotros "a mano" mediante instrucciones SQ. somos
nosotros, los programadores, los que indicamos qué operacio0nes va a abarcar.
ATOMICIDAD: las
operaciones que componen una transacción deben considerarse como una sola.
TRANSACCIÓN EXPLÍCITA: se
define de manera general con una instrucción que marca su inicio, y dos
posibles instrucciones que marcan su final en función de si debe tener éxito o
debe fracasar en bloque.
8.
Linkografías
Link de las diapositivas
No hay comentarios:
Publicar un comentario