AdmonTransaccionesyBloqueos

download AdmonTransaccionesyBloqueos

of 50

Transcript of AdmonTransaccionesyBloqueos

  • Contenido

    Introduccin 1

    Introduccin a las transacciones y los bloqueos 2

    Administracin de las transacciones 4

    Bloqueos en SQL Server 13

    Administracin de los bloqueos 20

    Procedimientos recomendados 31

    Prctica A: Administracin de transacciones y bloqueos 32

    Repaso 43

    Mdulo 15: Administracin de transacciones y bloqueos

  • La informacin contenida en este documento est sujeta a modificaciones sin previo aviso. A menos que se indique lo contrario, los nombres de las compaas, productos, personas, personajes y datos mencionados son ficticios, y no representan de ningn modo a ninguna persona, compaa, producto o acontecimiento reales. Es responsabilidad del usuario el cumplimiento de todas las leyes de derechos de autor aplicables. Ninguna parte de este documento puede ser reproducida o transmitida de ninguna forma, ni por ningn medio, ya sea electrnico o mecnico, con ningn propsito, sin la previa autorizacin por escrito de Microsoft Corporation. Sin embargo, si su nico medio de acceso es electrnico, se le concede permiso para imprimir una copia. Microsoft puede ser titular de patentes, solicitudes de patentes, marcas, derechos de autor y otros derechos de propiedad intelectual sobre el contenido de este documento. El suministro de este documento no le otorga ninguna licencia sobre estas patentes, marcas, derechos de autor, u otros derechos de propiedad intelectual, a menos que ello se prevea en un contrato por escrito de licencia de Microsoft. 2000 Microsoft Corporation. Reservados todos los derechos. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows y Windows NT son marcas comerciales registradas o marcas comerciales de Microsoft Corporation en los Estados Unidos o en otros pases. Otros nombres de productos y compaas mencionados aqu pueden ser marcas comerciales de sus respectivos propietarios. Jefe de proyecto: Rich Rose Diseadores de instrucciones: Rich Rose, Cheryl Hoople, Marilyn McGill Ingenieros de diseo de software de instrucciones: Karl Dehmer, Carl Raebler, Rick Byham Direccin tcnica: Karl Dehmer Expertos en la materia: Karl Dehmer, Carl Raebler, Rick Byham Artista grfico: Kirsten Larson (Consultora independiente) Directora de edicin: Lynette Skinner Editor: Wendy Cleary Editor de copias: Edward McKillop (S&T Consulting) Director de produccin: Miracle Davis Coordinadora de produccin: Jenny Boe Soporte de produccin: Lori Walker (S&T Consulting) Jefe de pruebas: Sid Benavente Prueba de los materiales del curso: TestingTesting123 Automatizacin del aula: Lorrin Smith-Bates Director creativo, servicios Media/Sim: David Mahlmann Direccin de desarrollo de Web: Lisa Pease Especialista en creacin de CD: Julie Challenger Soporte en lnea: David Myka (S&T Consulting) Director de localizacin: Rick Terek Coordinador de operaciones: John Williams Soporte de fabricacin: Laura King, Kathy Hershey Director principal del producto, Administracin de publicacin: Bo Galford Director principal del producto, Base de datos: Margo Crandall Jefe de grupo, Infraestructura del curso: David Bramble Jefe de grupo del producto, Desarrollo de contenido: Dean Murray Director general: Robert Stewart

  • Mdulo 15: Administracin de transacciones y bloqueos iii

    Notas para el instructor Este mdulo proporciona a los alumnos informacin acerca de cmo se utilizan las transacciones y los bloqueos para asegurar la integridad de las transacciones a la vez que se permite el uso simultneo. El mdulo prosigue con la descripcin de cmo se ejecutan y se deshacen las transacciones. Una animacin breve ayuda a describir cmo funciona el procesamiento de las transacciones.

    El mdulo describe a continuacin cmo los bloqueos de Microsoft SQL Server 2000 mantienen la coherencia y el uso simultneo de los datos. Se presentan los recursos que se pueden bloquear, los diferentes tipos de bloqueos y la compatibilidad entre los bloqueos. La ltima seccin describe algunas opciones de bloqueo, trata los interbloqueos y explica cmo presentar informacin acerca de los bloqueos activos.

    En esta prctica los alumnos definen una transaccin y observan el efecto de las instrucciones BEGIN TRAN, COMMIT TRAN y ROLLBACK TRAN. A continuacin, observan lo que ocurre cuando se aplican diferentes opciones de bloqueo a una transaccin.

    Despus de completar este mdulo, los alumnos sern capaces de:

    Describir el proceso de las transacciones. Ejecutar, cancelar o deshacer una transaccin. Identificar los problemas de la simultaneidad de bloqueos. Identificar los recursos que se pueden bloquear y los tipos de bloqueos. Describir la compatibilidad de los bloqueos. Describir cmo SQL Server utiliza el bloqueo dinmico. Establecer opciones de bloqueo y presentar informacin acerca de los

    bloqueos.

    Material y preparacin Esta seccin proporciona el material y las tareas de preparacin que se necesitan para impartir este mdulo.

    Material necesario Para impartir este mdulo, necesitar el material siguiente:

    Archivo 2329a_15.ppt de Microsoft PowerPoint Archivo de ejemplo C:\MOC\2329A\Demo\D15_Ex.sql, que contiene todas

    las secuencias de comandos de ejemplo del mdulo, excepto cuando se indique lo contrario.

    Tareas de preparacin Para preparar este mdulo, deber:

    Leer todo el material del mismo. Completar la prctica. Practicar con la presentacin, incluida la diapositiva animada. Revisar las notas del producto relevantes incluidas en el disco compacto

    Material del instructor.

    Presentacin: 45 minutos Prctica: 60 minutos

  • iv Mdulo 15: Administracin de transacciones y bloqueos

    Presentacin multimedia Esta seccin proporciona procedimientos de presentacin multimedia que no se pueden incluir en las notas al margen y no son adecuados para las notas del alumno.

    Transacciones de SQL Server Para preparar la presentacin multimedia Haga clic en el botn de la diapositiva para iniciar la presentacin

    multimedia. Esta presentacin multimedia presenta el procesamiento de transacciones de SQL Server. Comienza con la definicin de una transaccin y explica los dos tipos de transacciones, implcitas y explcitas. A continuacin, explica cmo se puede cancelar o deshacer una transaccin. La presentacin contina con una descripcin del registro de transacciones, que mantiene la coherencia de la base de datos, explica cmo se graban las modificaciones en el archivo de disco del registro antes de escribirlas en la base de datos y describe cmo los puntos de comprobacin del registro indican qu transacciones se han aplicado a la base de datos. La presentacin concluye con la descripcin del proceso automtico de recuperacin.

    Otras actividades Esta seccin contiene procedimientos para implementar actividades interactivas con el fin de presentar o examinar informacin, como juegos o ejercicios de simulacin de funciones.

    Presentacin de la diapositiva animada de PowerPoint La diapositiva animada se identifica con un icono de vnculos en la esquina inferior izquierda de la diapositiva.

    Para presentar la diapositiva Recuperacin de transacciones y puntos de comprobacin

    La diapositiva muestra cmo SQL Server puede recuperar fcilmente las transacciones en el caso de un error del sistema. 1. Presente la diapositiva del tema en la que aparecen las acciones requeridas

    para la recuperacin de una transaccin. 2. Avance hasta la primera animacin, en la que la flecha de Transaccin 1

    termina antes del punto de comprobacin. No es necesaria ninguna accin porque la transaccin queda reflejada en la base de datos.

    3. Avance hasta la siguiente animacin, en la que la flecha de Transaccin 2 empieza antes del punto de comprobacin y termina despus de l. La transaccin debe rehacerse porque parte de la transaccin tuvo lugar despus del punto de comprobacin.

  • Mdulo 15: Administracin de transacciones y bloqueos v

    4. Avance hasta la siguiente animacin, en la que la flecha de Transaccin 3 empieza antes del punto de comprobacin y no termina antes del error del sistema. Hay que deshacerla.

    5. Avance hasta la siguiente animacin, en la que la flecha de Transaccin 4 se confirma despus del punto de comprobacin. Debe reconstruirse (rehacerse) a partir del registro.

    6. Avance hasta la ltima animacin, en la que la flecha de Transaccin 5 empieza despus del punto de comprobacin pero no se completa antes del error del sistema. Hay que deshacerla.

    Desarrollo del mdulo Para presentar este mdulo utilice la estrategia siguiente:

    Introduccin a las transacciones y los bloqueos Presente los trminos y los conceptos que se utilizan en el mdulo. Asegrese de que los alumnos comprendan la relacin entre los conceptos.

    Administracin de las transacciones Reproduzca la presentacin multimedia. Describa cmo se define una transaccin, las restricciones de las transacciones, cmo SQL Server procesa las transacciones, la recuperacin de las transacciones y los puntos de comprobacin. Asegrese de que los alumnos comprendan las transacciones y cmo se utilizan en la recuperacin automtica.

    Bloqueos en SQL Server Describa los problemas de la simultaneidad de bloqueos, los recursos que se pueden bloquear, los tipos de bloqueos y la compatibilidad entre los bloqueos. Haga nfasis en los problemas que pueden surgir debido a la falta de bloqueos y en que SQL Server controla automticamente estas situaciones. Advierta a los alumnos que la modificacin de las opciones de bloqueo en las transacciones puede tener un efecto negativo sobre el rendimiento.

    Administracin de los bloqueos Describa las opciones de bloqueo en el nivel de sesin y de tabla, explique los interbloqueos y describa cmo presentar la informacin acerca de los bloqueos. Haga nfasis en que los alumnos deben disear las transacciones para minimizar los interbloqueos. Tambin deben realizar pruebas para determinar si en una transaccin se est produciendo un interbloqueo.

  • vi Mdulo 15: Administracin de transacciones y bloqueos

    Informacin de personalizacin En esta seccin se identifican los requisitos de instalacin de las prcticas para un mdulo y los cambios de configuracin que ocurren en los equipos de los alumnos durante estas prcticas. Esta informacin pretende ayudarle a replicar o personalizar el material del curso de Microsoft Official Curriculum (MOC).

    La prctica de este mdulo tambin depende de la configuracin del aula especificada en la seccin Informacin de personalizacin que se encuentra al final de la Gua de configuracin del aula para el curso 2329A, Programacin de una base de datos Microsoft SQL Server 2000.

    Preparacin de la prctica No hay requisitos de preparacin de la prctica que afecten a la replicacin o personalizacin.

    Resultados de las prcticas No hay cambios de configuracin en los equipos de los alumnos que afecten a la replicacin o personalizacin.

    Importante

  • Mdulo 15: Administracin de transacciones y bloqueos 1

    Introduccin

    Introduccin a las transacciones y los bloqueos

    Administracin de las transacciones

    Bloqueos en SQL Server

    Administracin de los bloqueos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Objetivos Despus de completar este mdulo, el alumno ser capaz de:

    Describir el proceso de transacciones. Ejecutar, cancelar o deshacer una transaccin. Identificar los problemas de la simultaneidad de bloqueos. Identificar los recursos que se pueden bloquear y los tipos de bloqueos. Describir la compatibilidad de los bloqueos. Describir cmo Microsoft SQL Server 2000 utiliza el bloqueo dinmico. Establecer opciones de bloqueo y presentar informacin acerca de

    los bloqueos.

    Objetivo del tema Proporcionar una introduc-cin a los temas y objetivos del mdulo.

    Explicacin previa En este mdulo, trataremos...

  • 2 Mdulo 15: Administracin de transacciones y bloqueos

    Introduccin a las transacciones y los bloqueos

    Las transacciones aseguran que varias modificaciones a los datos se procesan juntas

    Los bloqueos impiden los conflictos de actualizacin

    Las transacciones estn serializadas

    El bloqueo es automtico

    Los bloqueos permiten usar los datos al mismo tiempo

    Control de simultaneidad

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Las transacciones utilizan los bloqueos para impedir que otros usuarios cambien o lean los datos de una transaccin que no se ha completado. El bloqueo es necesario en el Proceso de transacciones en lnea (OLTP, Online Transaction Processing) en sistemas multiusuario. SQL Server utiliza el registro de transacciones para asegurar que las actualizaciones se han completado y son recuperables.

    Transacciones Las transacciones aseguran que varias modificaciones a los datos se procesan como una unidad; esto se conoce como atomicidad. Por ejemplo, una transaccin bancaria podra abonar en una cuenta y cargar en otra. Los dos pasos se deben completar al mismo tiempo. SQL Server acepta que el proceso de transacciones administre varias transacciones.

    Objetivo del tema Proporcionar una introduc-cin a este tema.

    Explicacin previa Las transacciones y los bloqueos aseguran la integridad de las transacciones.

    Sugerencia Este mdulo se centra en el proceso de transacciones en lnea, no de aplicaciones de consulta, como almacenes de datos y ayuda a la toma de decisiones.

  • Mdulo 15: Administracin de transacciones y bloqueos 3

    Bloqueos Los bloqueos impiden los conflictos de actualizacin. Los usuarios no pueden leer o modificar los datos que estn en proceso de modificacin por parte de otros usuarios. Por ejemplo, si desea calcular una funcin de agregado y asegurarse de que otra transaccin no modifique el conjunto de datos que se utiliza para calcular la funcin de agregado, puede solicitar que el sistema establezca bloqueos en los datos. Tenga en cuenta los siguientes hechos acerca de los bloqueos:

    Los bloqueos hacen posible la serializacin de transacciones de forma que slo una persona a la vez pueda modificar un elemento de datos. Por ejemplo, en un sistema de reservas de una lnea area los bloqueos aseguran que slo se asigne un asiento concreto a una persona.

    SQL Server establece y ajusta dinmicamente el nivel de bloqueo apropiado durante una transaccin. Tambin se puede controlar manualmente cmo se utilizan algunos de los bloqueos.

    Los bloqueos son necesarios para que las transacciones simultneas permitan que los usuarios tengan acceso y actualicen los datos al mismo tiempo. La alta simultaneidad significa que hay varios usuarios que consiguen un buen tiempo de respuesta con pocos conflictos. Desde la perspectiva del administrador del sistema, los problemas principales son el nmero de usuarios, el nmero de transacciones y el rendimiento. Desde la perspectiva del usuario, la preocupacin principal es el tiempo de respuesta.

    Control de simultaneidad El control de simultaneidad garantiza que las modificaciones que realiza un usuario no afectan de forma negativa a las modificaciones que realice otro. Hay dos tipos.

    El control de simultaneidad pesimista bloquea los datos cuando se leen para preparar una actualizacin. Los dems usuarios no pueden realizar acciones que alteren los datos subyacentes hasta que el usuario que ha aplicado el bloqueo termine con los datos. Utilice la simultaneidad pesimista donde haya una alta contencin de los datos y el costo de proteger los datos con bloqueos sea menor que el costo de deshacer transacciones si se producen conflictos de simultaneidad.

    El control de simultaneidad optimista no bloquea los datos cuando se leen inicialmente. En su lugar, cuando se realiza una actualizacin, SQL Server realiza comprobaciones para determinar si los datos subyacentes han cambiado desde que se leyeron inicialmente. De ser as, al usuario le aparece un error, la transaccin se deshace y el usuario debe volver a empezar. Utilice la simultaneidad optimista cuando haya contencin baja de los datos y el costo de deshacer ocasionalmente una transaccin sea menor que el costo de bloquear los datos cuando se leen.

    SQL Server admite una gran variedad de mecanismos de control de simultaneidad optimista y pesimista. Los usuarios indican el tipo de control de simultaneidad al especificar el nivel de aislamiento de transacciones para una conexin.

  • 4 Mdulo 15: Administracin de transacciones y bloqueos

    Administracin de las transacciones

    Presentacin multimedia: Transacciones de SQL Server

    Recuperacin de transacciones y puntos decomprobacin

    Consideraciones para el uso de transacciones

    Establecimiento de la opcin de transacciones implcitas

    Restricciones en las transacciones definidas por elusuario

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Esta seccin describe cmo se definen las transacciones, qu hay que tener en cuenta al utilizarlas, cmo se establece una opcin de transaccin implcita y las restricciones en el uso de las transacciones. Tambin describe el procesamiento y la recuperacin de transacciones.

    Objetivo del tema Proporcionar un resumen de este tema.

    Explicacin previa En esta seccin, trataremos

  • Mdulo 15: Administracin de transacciones y bloqueos 5

    Presentacin multimedia: Transacciones de SQL Server

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    En SQL Server hay dos clases de transacciones:

    En una transaccin implcita, cada instruccin Transact-SQL, como INSERT, UPDATE o DELETE, se ejecuta como una transaccin.

    En una transaccin explcita o definida por el usuario, las instrucciones de la transaccin se agrupan entre las clusulas BEGIN TRANSACTION y COMMIT TRANSACTION.

    El usuario puede establecer un punto de almacenamiento, o marcador, en una transaccin. Un punto de almacenamiento define una ubicacin a la que puede volver una transaccin si parte de la misma se cancela condicionalmente. La transaccin debe continuar hasta que se complete o se deshaga en su totalidad.

    Las transacciones de SQL Server emplean la sintaxis siguiente.

    BEGIN TRAN[SACTION] [transaccin | @variableTransaccin [WITH MARK [descripcin]]]

    La opcin transaccin especifica un nombre de transaccin definido por el usuario. En variableTransaccin se especifica el nombre de una variable definida por el usuario con un nombre de transaccin vlido. WITH MARK especifica que la transaccin est marcada en el registro de transacciones. Descripcin es una cadena que describe la marca que permite WITH MARK para restaurar un registro de transacciones a una marca con nombre.

    SAVE TRAN[SACTION] {puntoAlmacenamiento | @variablePuntoAlmacenamiento}

    BEGIN DISTRIBUTED TRAN[SACTION] [transaccin | @variableTransaccin]

    COMMIT [TRAN[SACTION] [transaccin | @variableTransaccin]]

    Objetivo del tema Ver un ejemplo del proceso de transacciones.

    Explicacin previa En esta presentacin, ver cmo se procesan las transacciones y cmo funciona el registro de transacciones.

    Advertencia Para mostrar los subttulos de la presentacin, active la opcin Ttulos del men Ver en el Reproductor de Windows Media.

    Punto clave Una transaccin confirmada no se puede deshacer.

    Sintaxis

    Sintaxis

    Sintaxis

    Sintaxis

  • 6 Mdulo 15: Administracin de transacciones y bloqueos

    ROLLBACK [TRAN[SACTION] [transaccin | @variableTransaccin | puntoAlmacenamiento | @variablePuntoAlmacenamiento]]

    Este ejemplo define una transaccin que transfiere fondos entre la cuenta corriente y la cuenta de ahorro de un cliente.

    BEGIN TRAN fund_transfer EXEC debit_checking 100, 'account1' EXEC credit_savings 100, 'account1' COMMIT TRAN fund_transfer

    Descripcin del registro de transacciones Todas las transacciones se graban en un registro de transacciones para mantener la coherencia de la base de datos y facilitar la recuperacin. El registro es un rea de almacenamiento que efecta automticamente el seguimiento de todos los cambios realizados en la base de datos, a excepcin de las operaciones no registradas. Las modificaciones se graban en el registro en disco cuando se ejecutan, antes de escribirse en la base de datos.

    Sintaxis

    Ejemplo

    Este ejemplo no se puede ejecutar porque los procedimientos almacenados no existen.

  • Mdulo 15: Administracin de transacciones y bloqueos 7

    Recuperacin de transacciones y puntos de comprobacin

    Recuperacin de transacciones Accin requerida

    Ninguna

    Puntos de comprobacin Fallo del sistema

    11

    22

    33

    44

    55

    Confirmar

    Deshacer

    Confirmar

    Deshacer

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Como el registro de transacciones graba todas las transacciones, SQL Server puede recuperar los datos automticamente en el caso de un corte de energa, un error en el software del sistema, problemas en el cliente o una peticin de cancelacin de una transaccin.

    SQL Server garantiza automticamente que todas las transacciones confirmadas quedan reflejadas en la base de datos en caso de que se produzca un error. Utiliza el registro de transacciones para rehacer todas las transacciones confirmadas y deshacer las no confirmadas. En el ejemplo de la diapositiva:

    La transaccin 1 se ha confirmado antes del punto de comprobacin, de modo que queda reflejada en la base de datos.

    Las transacciones 2 y 4 se han confirmado despus del punto de comprobacin, de modo que deben reconstruirse (rehacerse) a partir del registro.

    Las transacciones 3 y 5 no se han confirmado, por lo que SQL Server las deshace.

    Objetivo del tema Explicar el proceso de recuperacin.

    Explicacin previa Como el registro de transacciones graba todas las modificaciones, los datos se pueden recuperar fcilmente en caso de que se produzca un error del sistema.

    Sugerencia Utilice la diapositiva como punto de partida para la explicacin. Pregunte a los alumnos por qu es necesaria cada una de las acciones.

  • 8 Mdulo 15: Administracin de transacciones y bloqueos

    Inicialmente, las pginas de la cach de datos y las del disco son iguales. Despus, tiene lugar el siguiente proceso:

    Los cambios que aparecen en la cach de datos como transacciones se confirman.

    Cuando la cach se llena, las pginas modificadas se escriben en disco. Cuando se produce un punto de comprobacin, la cach se escribe en disco.

    El disco vuelve a tener los mismos datos que la cach.

    Utilice un controlador de disco con cach de escritura con SQL Server slo si se ha diseado para su uso con un servidor de bases de datos. Si no se hace as, se comprometer la capacidad de SQL Server de administrar transacciones. Un controlador de disco con cach de escritura puede hacer que parezca que est terminado el registro de preescritura, incluso si no es as.

    Importante

  • Mdulo 15: Administracin de transacciones y bloqueos 9

    Consideraciones para el uso de transacciones

    Recomendaciones para las transacciones

    Las transacciones deben ser lo ms cortas posible

    Preste atencin a ciertas instrucciones Transact-SQL

    Evite las transacciones que requieran la intervencin delusuario

    Aspectos del anidamiento de transacciones

    Se pueden anidar transacciones, pero no se recomienda

    Utilice @@trancount para determinar el nivel de anidamiento

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Suele ser conveniente mantener las transacciones en un tamao reducido y evitar el anidamiento de transacciones.

    Recomendaciones para las transacciones Las transacciones deben ser lo ms cortas posible. Las transacciones mayores aumentan la posibilidad de que los usuarios no puedan tener acceso a los datos bloqueados. He aqu algunos de los mtodos para mantener las transacciones cortas:

    Para minimizar la duracin de la transaccin, preste atencin cuando utilice ciertas instrucciones Transact-SQL, como WHILE o instrucciones del Lenguaje de definicin de datos (DDL, Data Definition Language).

    No requiera la intervencin del usuario durante una transaccin. Resuelva los aspectos que requieran la intervencin del usuario antes de iniciar la transaccin. Por ejemplo, si va a actualizar el registro de un cliente, obtenga la informacin necesaria del usuario antes de comenzar la transaccin.

    INSERT, UPDATE y DELETE deben ser las instrucciones principales de una transaccin, y deben escribirse de forma que afecten al menor nmero de filas posible. Una transaccin nunca debe ser menor que una unidad lgica de trabajo.

    Si es posible, no abra una transaccin mientras examina los datos. Las transacciones no deben empezar hasta que no se hayan realizado todos los anlisis de datos preliminares.

    Obtenga acceso a la mnima cantidad de datos posible mientras se encuentre en una transaccin. De esta forma disminuye el nmero de filas bloqueadas y se reduce la contencin.

    Objetivo del tema Identificar los problemas del uso de transacciones.

    Explicacin previa En general, mantenga las transacciones lo ms cortas posible.

  • 10 Mdulo 15: Administracin de transacciones y bloqueos

    Aspectos del anidamiento de transacciones Tenga en cuenta lo siguiente en cuanto al anidamiento de transacciones:

    Se pueden anidar transacciones, pero el anidamiento no afecta a cmo SQL Server procesa la transaccin. Debe utilizar el anidamiento cuidadosamente, si la hubiera, porque el no confirmar o deshacer una transaccin deja activados los bloqueos indefinidamente. Slo se aplica la pareja de instrucciones BEGINCOMMIT ms externa. Normalmente, el anidamiento de transacciones se produce cuando se invocan entre s procedimientos almacenados con parejas de instrucciones BEGIN...COMMIT o desencadenadores.

    Puede utilizar la variable global @@trancount para determinar si hay alguna transaccin abierta y su nivel de anidamiento:

    @@trancount es cero cuando no hay transacciones abiertas.

    Una instruccin BEGIN TRAN incrementa @@trancount en uno y una instruccin ROLLBACK TRAN establece @@trancount en cero.

    Tambin puede utilizar la instruccin DBCC OPENTRAN en la sesin actual para obtener informacin acerca de las transacciones activas.

    Nota

  • Mdulo 15: Administracin de transacciones y bloqueos 11

    Establecimiento de la opcin de transacciones implcitas

    Una transaccin se inicia automticamente cuando se ejecutan determinadas instrucciones

    No se permiten transacciones anidadas

    La transaccin debe completarse explcitamente con COMMIT o ROLLBACK TRANSACTION

    De forma predeterminada, esta opcin est desactivada

    SET IMPLICIT_TRANSACTIONS ONSET IMPLICIT_TRANSACTIONS ON

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    En la mayora de los casos, es preferible definir las transacciones explcitamente con la instruccin BEGIN TRANSACTION. Sin embargo, en aplicaciones que se desarrollaron originalmente en sistemas diferentes de SQL Server, la opcin SET IMPLICIT_TRANSACTIONS puede ser til. Establece el modo de transaccin implcita en una conexin.

    SET IMPLICIT_TRANSACTIONS {ON OFF} Al establecer transacciones implcitas, tenga en cuenta lo siguiente:

    Cuando el modo de transaccin implcita de una conexin est activado, la ejecucin de cualquiera de las instrucciones siguientes desencadena el inicio de una transaccin:

    ALTER TABLE INSERT

    CREATE OPEN

    DELETE REVOKE

    DROP SELECT

    FETCH TRUNCATE TABLE

    GRANT UPDATE

    No se permiten transacciones anidadas. Si la conexin ya se encuentra en una transaccin abierta, las instrucciones no inician una nueva transaccin.

    Cuando esta opcin est activada, el usuario tiene que confirmar o deshacer la transaccin explcitamente al final de la transaccin. De lo contrario, cuando el usuario se desconecte se deshar la transaccin y todos los cambios a los datos que contiene.

    De forma predeterminada, esta opcin est desactivada.

    Objetivo del tema Describir cmo se establecen las transacciones implcitas.

    Explicacin previa Las transacciones implcitas pueden ser tiles cuando se migran aplicaciones a SQL Server.

    Sintaxis

  • 12 Mdulo 15: Administracin de transacciones y bloqueos

    Restricciones en las transacciones definidas por el usuario

    ALTER DATABASE

    BACKUP LOG

    CREATE DATABASE

    DROP DATABASE

    RECONFIGURE

    RESTORE DATABASE

    RESTORE LOG

    UPDATE STATISTICS

    Ciertas instrucciones no se pueden incluir

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL******

    Hay algunas restricciones a las transacciones definidas por el usuario:

    Ciertas instrucciones no se pueden incluir en una transaccin explcita. Por ejemplo, algunas de ellas son operaciones de ejecucin prolongada que no se suelen utilizar en el contexto de una transaccin. Las instrucciones restringidas son las siguientes:

    ALTER DATABASE

    BACKUP LOG

    CREATE DATABASE

    DROP DATABASE

    RECONFIGURE

    RESTORE DATABASE

    RESTORE LOG

    UPDATE STATISTICS

    Objetivo del tema Indicar los elementos que no se pueden utilizar en las transacciones definidas por el usuario.

    Explicacin previa Hay algunas restricciones a las transacciones definidas por el usuario.

  • Mdulo 15: Administracin de transacciones y bloqueos 13

    Bloqueos en SQL Server

    Problemas de simultaneidad impedidos por los bloqueos

    Recursos que se pueden bloquear

    Tipos de bloqueos

    Compatibilidad de los bloqueos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    En esta seccin se describen los problemas de simultaneidad, los recursos que se pueden bloquear, los tipos de bloqueos que se pueden establecer sobre dichos recursos y cmo se pueden combinar los bloqueos.

    Objetivo del tema Proporcionar un resumen de este tema.

    Explicacin previa En esta seccin, trataremos

  • 14 Mdulo 15: Administracin de transacciones y bloqueos

    Problemas de simultaneidad impedidos por los bloqueos

    Actualizacin perdida

    Dependencia no confirmada (lectura no confirmada)

    Anlisis incoherente (lectura no repetible)

    Lecturas fantasma

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Los bloqueos pueden impedir las siguientes situaciones que comprometen la integridad de las transacciones:

    Una actualizacin se puede perder cuando una transaccin sobrescribe los cambios de otra transaccin. Por ejemplo, dos usuarios pueden actualizar la misma informacin, pero slo la ltima modificacin queda reflejada en la base de datos.

    Una dependencia no confirmada ocurre cuando una transaccin lee los datos sin confirmar de otra transaccin. La transaccin puede hacer cambios segn datos que no son correctos o que no existen.

    Un anlisis incoherente ocurre cuando una transaccin lee la misma fila varias veces y cuando, entre las dos (o ms) lecturas, otra transaccin modifica esa fila. Como la fila se ha modificado entre lecturas de una misma transaccin, cada lectura produce valores diferentes, lo que causa incoherencias.

    Por ejemplo, un editor lee el mismo documento dos veces, pero de una lectura a otra, el escritor vuelve a escribir el documento. Cuando el editor lee el documento por segunda vez, ha cambiado por completo. La lectura original no se puede repetir, lo que produce confusin. Sera mejor que el editor slo leyera el documento despus de que el escritor hubiera terminado de escribirlo.

    Las lecturas fantasma pueden ocurrir cuando las transacciones no estn aisladas unas de otras. Por ejemplo, se podra hacer una actualizacin en todos los registros de una regin al mismo tiempo que otra transaccin inserta un nuevo registro de esa regin. La prxima vez que la transaccin lea los datos, aparecer un registro adicional.

    Objetivo del tema Describir los problemas ms comunes de la simultaneidad de los bloqueos.

    Explicacin previa Los bloqueos son tiles para asegurar la integridad de las transacciones en estas situaciones

    Actualizacin perdida

    Dependencia no confirmada (lectura no confirmada)

    Anlisis incoherente (lectura no repetible)

    Lecturas fantasma

  • Mdulo 15: Administracin de transacciones y bloqueos 15

    Recursos que se pueden bloquear

    ElementoElemento DescripcinDescripcin

    RID Identificador de fila

    Clave Bloqueo de fila dentro de un ndice

    Pgina

    Extensin

    Tabla

    Pgina de datos o pgina de ndice

    Grupo de pginas

    Tabla completa

    Base dedatos Base de datos completa

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Para obtener el mximo rendimiento, el nmero de bloqueos mantenidos por SQL Server se tiene que adaptar a la cantidad de datos a los que afecta cada uno de los bloqueos. Para minimizar el costo de los bloqueos, SQL Server bloquea automticamente los recursos en el nivel apropiado para la tarea. SQL Server puede bloquear los siguientes tipos de elementos.

    Elemento Descripcin RID Identificador de fila: se utiliza para bloquear una sola fila de una tabla.

    Clave Bloqueo de fila dentro de un ndice: se utiliza para proteger intervalos de claves en transacciones serializables.

    Pgina Pgina de datos o pgina de ndice de 8 KB.

    Extensin Grupo contiguo de pginas de datos o pginas de ndice: se utiliza durante la asignacin de espacio.

    Tabla Tabla completa, incluidos todos los datos e ndices.

    Base de datos

    Toda la base de datos: se utiliza durante la restauracin de una base de datos.

    Objetivo del tema Enumerar los recursos que SQL Server puede bloquear.

    Explicacin previa El nmero de bloqueos se tiene que adaptar a la cantidad de datos a los que afecta cada uno de los bloqueos.

  • 16 Mdulo 15: Administracin de transacciones y bloqueos

    Tipos de bloqueos

    Bloqueos bsicos

    Compartidos

    Exclusivos

    Bloqueos para situaciones especiales

    Intencin

    Actualizacin

    Esquema

    Actualizacin masiva

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    SQL Server tiene dos tipos principales de bloqueos: bloqueos bsicos y bloqueos para situaciones especiales.

    Bloqueos bsicos En general, las operaciones de lectura adquieren bloqueos compartidos y las operaciones de escritura adquieren bloqueos exclusivos.

    Bloqueos compartidos SQL Server suele utilizar bloqueos compartidos (de lectura) en las operaciones que no modifican ni actualizan los datos. Si SQL Server ha aplicado un bloqueo compartido a un recurso, una segunda transaccin tambin puede adquirir un bloqueo compartido, incluso si la primera transaccin no ha terminado.

    Tenga en cuenta los siguientes hechos acerca de los bloqueos compartidos:

    Slo se utilizan en operaciones de lectura; los datos no se pueden modificar. SQL Server libera los bloqueos compartidos de un registro cuando se lee el

    registro siguiente. Un bloqueo compartido existe hasta que todas las filas que cumplen las

    condiciones de la consulta se han devuelto al cliente.

    Objetivo del tema Enumerar los tipos de bloqueos.

    Explicacin previa SQL Server tiene dos tipos principales de bloqueos: bloqueos bsicos y bloqueos para situaciones especiales.

  • Mdulo 15: Administracin de transacciones y bloqueos 17

    Bloqueos exclusivos SQL Server utiliza bloqueos exclusivos (de escritura) en las instrucciones de modificacin de datos INSERT, UPDATE y DELETE.

    Tenga en cuenta los siguientes hechos acerca de los bloqueos exclusivos:

    Slo una transaccin puede conseguir un bloqueo exclusivo sobre un recurso.

    Una transaccin no puede adquirir un bloqueo compartido sobre un recurso que tenga un bloqueo exclusivo.

    Una transaccin no puede adquirir un bloqueo exclusivo sobre un recurso hasta que todos los bloqueos compartidos se hayan liberado.

    Bloqueos para situaciones especiales Dependiendo de la situacin, SQL Server puede utilizar otros tipos de bloqueos:

    Bloqueos de intencin SQL Server utiliza internamente los bloqueos de intencin para minimizar los conflictos de bloqueo. Los bloqueos de intencin establecen una jerarqua de bloqueo para que otras transacciones no puedan adquirir bloqueos en niveles ms incluyentes que otros existentes. Por ejemplo, si una transaccin tiene un bloqueo exclusivo de fila sobre un registro de cliente especfico, el bloqueo de intencin impide que otra transaccin adquiera un bloqueo exclusivo en el nivel de tabla.

    Los bloqueos de intencin son: bloqueo compartido de intencin (IS), bloqueo exclusivo de intencin (IX) y compartido con bloqueo exclusivo de intencin (SIX).

    Bloqueos de actualizacin SQL Server utiliza los bloqueos de actualizacin cuando va a modificar una pgina. Antes de modificar la pgina, SQL Server aumenta el nivel de bloqueo de actualizacin de pgina a bloqueo de pgina exclusivo para impedir conflictos de bloqueo.

    Tenga en cuenta los siguientes hechos acerca de los bloqueos de actualizacin. Los bloqueos de actualizacin:

    Se adquieren durante la parte inicial de una operacin de actualizacin al leer las pginas por primera vez.

    Son compatibles con los bloqueos compartidos.

    Bloqueos de esquema Los bloqueos de esquema aseguran que no se elimine una tabla o un ndice, o que no se modifique su esquema, cuando se les hace referencia en otra sesin.

    SQL Server proporciona dos tipos de bloqueos de esquema:

    Estabilidad del esquema (Sch-S), que asegura que no se eliminar un recurso.

    Modificacin del esquema (Sch-M), que asegura que otras sesiones no hagan referencia a un recurso que est siendo modificado.

  • 18 Mdulo 15: Administracin de transacciones y bloqueos

    Bloqueos de actualizacin masiva Los bloqueos de actualizacin masiva permiten procesos de copia masiva simultneos en la misma tabla, a la vez que impiden que otros procesos que no hacen copias masivas tengan acceso a la tabla.

    SQL Server utiliza bloqueos de actualizacin masiva cuando se especifica una de las opciones siguientes: la sugerencia TABLOCK o la opcin table lock on bulk load (bloqueo de tabla en carga masiva), que se establece mediante el procedimiento almacenado de sistema sp_tableoption.

  • Mdulo 15: Administracin de transacciones y bloqueos 19

    Compatibilidad de los bloqueos

    Los bloqueos pueden ser compatibles o incompatibles con otros bloqueos

    Ejemplos

    Los bloqueos compartidos son compatibles con todoslos bloqueos excepto con los exclusivos

    Los bloqueos exclusivos no son compatibles conningn otro bloqueo

    Los bloqueos de actualizacin son compatibles slocon los bloqueos compartidos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Los bloqueos pueden ser compatibles o incompatibles con otros bloqueos. Los bloqueos tienen una matriz de compatibilidad que muestra qu bloqueos son compatibles con otros bloqueos del mismo recurso. Los bloqueos mostrados en la siguiente tabla estn enumerados en orden desde el menos restrictivo (compartido) al ms restrictivo (exclusivo).

    Bloqueo concedido existente Bloqueo solicitado IS S U IX SIX X Compartido de intencin (IS)

    S S S S S No

    Compartido (S) S S S No No No

    Actualizacin (U) S S No No No No

    Exclusivo de intencin (IX)

    S No No S No No

    Compartido con bloqueo exclusivo de intencin (SIX)

    S No No No No No

    Exclusivo (X) No No No No No No

    Un bloqueo IX es compatible con otros bloqueos IX porque IX implica la intencin de actualizar slo algunas de las filas, no todas.

    Adems, la compatibilidad de los bloqueos de esquema es la siguiente:

    El bloqueo de modificacin de esquema (Sch-M) es incompatible con todos los bloqueos.

    El bloqueo de estabilidad de esquema (Sch-S) es compatible con todos los bloqueos excepto el bloqueo de modificacin de esquema (Sch-M).

    Objetivo del tema Explicar qu bloqueos son compatibles.

    Explicacin previa Los bloqueos pueden ser compatibles o incompatibles con otros bloqueos.

    Sugerencia Explique la matriz de bloqueos mediante los ejemplos de la diapositiva.

    Nota

  • 20 Mdulo 15: Administracin de transacciones y bloqueos

    Administracin de los bloqueos

    Opciones de bloqueo en el nivel de sesin

    Arquitectura de bloqueos dinmicos

    Opciones de bloqueo en el nivel de tabla

    Interbloqueos

    Presentacin de informacin acerca de los bloqueos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Esta seccin describe las opciones de bloqueo que se pueden especificar en los niveles de sesin y de tabla. Tambin describe cmo SQL Server controla los interbloqueos y cmo se puede ver la informacin de los bloqueos.

    Objetivo del tema Proporcionar un resumen de este tema.

    Explicacin previa En esta seccin, trataremos

  • Mdulo 15: Administracin de transacciones y bloqueos 21

    Opciones de bloqueo en el nivel de sesin

    Nivel de aislamiento de las transacciones READ COMMITTED (DEFAULT) READ UNCOMMITTED REPEATABLE READ SERIALIZABLE

    Tiempo de espera para los bloqueos Limita el tiempo de espera para un recurso bloqueado Use SET LOCK_TIMEOUT

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    SQL Server permite controlar las opciones de bloqueo en el nivel de sesin mediante el establecimiento del nivel de aislamiento de las transacciones.

    Nivel de aislamiento de las transacciones El nivel de aislamiento protege una transaccin especificada de otras transacciones. Utilice el nivel de aislamiento de la transaccin para establecer el nivel de aislamiento de todas las transacciones de una sesin. Al establecer el nivel de aislamiento, se especifica el comportamiento predeterminado de los bloqueos en todas las instrucciones de la sesin.

    Establecer niveles de aislamiento de transaccin permite a los programadores aceptar un riesgo mayor de problemas de integridad a cambio de un mayor acceso simultneo a los datos. Cuanto mayor sea el nivel de aislamiento, durante ms tiempo se mantienen los bloqueos y ms restrictivos son stos.

    El nivel de aislamiento de la sesin se puede suplantar en instrucciones individuales mediante una especificacin de bloqueo. Tambin se puede utilizar la instruccin DBCC USEROPTIONS para especificar el aislamiento de la transaccin en una instruccin.

    Objetivo del tema Presentar el nivel de aislamiento de las transacciones.

    Explicacin previa SQL Server permite controlar las opciones de bloqueo en el nivel de sesin.

  • 22 Mdulo 15: Administracin de transacciones y bloqueos

    SET TRANSACTION ISOLATION LEVEL {READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE}

    La siguiente tabla describe las opciones de nivel de aislamiento de los bloqueos.

    Opcin Descripcin READ COMMITTED Indica a SQL Server que utilice bloqueos compartidos al

    leer. En este nivel, no pueden producirse lecturas no confirmadas.

    Indica a SQL Server que no establezca bloqueos compartidos y no atienda bloqueos exclusivos. Pueden producirse lecturas no confirmadas.

    REPEATABLE READ Indica que no pueden ocurrir lecturas no confirmadas y lecturas irrepetibles. Los bloqueos de lectura se mantienen hasta el final de la transaccin.

    SERIALIZABLE Impide que otros usuarios actualicen o inserten nuevas filas que cumplan los criterios de la clusula WHERE de la transaccin. No se pueden producir datos fantasma.

    El siguiente ejemplo establece el nivel de aislamiento de la sesin actual como READ UNCOMMITTED y, despus, comprueba DBCC USEROPTIONS para comprobar que SQL Server ha efectuado el cambio.

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED DBCC USEROPTIONS

    set option value textsize 64512 language us_english dateformat mdy datefirst 7 . . . isolation level

    read uncommitted

    (13 filas afectadas)

    DBCC siempre imprime el siguiente mensaje cuando se ejecuta: DBCC execution completed. If DBCC printed error messages, see your System Administrator.

    Sintaxis

    Ejemplo

    Resultado

    Nota

  • Mdulo 15: Administracin de transacciones y bloqueos 23

    Tiempo de espera para los bloqueos Con la opcin SET LOCK_TIMEOUT, se puede establecer la cantidad mxima de tiempo que SQL Server permite que una transaccin espere la liberacin de un recurso bloqueado.

    SET LOCK_TIMEOUT tiempoDeEspera

    tiempoDeEspera es el nmero de milisegundos que pasan hasta que SQL Server devuelve un error de bloqueo. Un valor de -1 (el valor predeterminado) indica que no hay tiempo de espera. Despus de cambiarlo, el nuevo valor tiene efecto durante el resto de la sesin.

    En este ejemplo se establece el tiempo de espera del bloqueo en 180.000 milisegundos.

    SET LOCK_TIMEOUT 180000 Para determinar el valor para la sesin actual, consulte la variable global @@lock_timeout.

    En este ejemplo se presenta el valor actual de @@lock_timeout.

    SELECT @@lock_timeout 180000 (1 filas afectadas)

    Sugerencia Demuestre los tiempos de espera de los bloqueos mediante varias consultas.

    Sintaxis

    Ejemplo

    Ejemplo

    Resultado

  • 24 Mdulo 15: Administracin de transacciones y bloqueos

    Arquitectura de bloqueos dinmicos

    Bloqueodinmico

    TablaPginaFila

    Costo

    GranularidadCosto de bloqueoCosto de simultaneidad

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    SQL Server utiliza una arquitectura de bloqueos dinmicos para determinar los bloqueos de costo ms efectivo. Determina automticamente qu bloqueos resultan ms adecuados cuando se ejecuta una consulta, segn las caractersticas del esquema y consulta.

    SQL Server aumenta y reduce dinmicamente la granularidad y los tipos de bloqueos. Normalmente, el optimizador de consultas elige la granularidad de bloqueo correcta cuando se compila el plan de ejecucin, con lo que se reduce la necesidad de concentrar bloqueos.

    Por ejemplo, si una actualizacin adquiere una gran cantidad de bloqueos de nivel de fila y ha bloqueado un porcentaje significativo de una tabla, los bloqueos de nivel de fila se concentran en un bloqueo de tabla. La transaccin contiene los bloqueos de nivel de fila, con lo que se reduce la carga de trabajo de bloqueo.

    El bloqueo dinmico tiene las siguientes ventajas:

    Administracin simplificada de bases de datos, ya que los administradores ya no se tienen que preocupar de ajustar los umbrales de concentracin de bloqueos.

    Rendimiento aumentado, ya que SQL Server reduce la carga de trabajo del sistema mediante bloqueos adecuados a la tarea.

    Objetivo del tema Mostrar cmo se encuentran los bloqueos de costo ms efectivo.

    Explicacin previa La arquitectura de bloqueos dinmicos ayuda a determinar los bloqueos de costo ms efectivo.

  • Mdulo 15: Administracin de transacciones y bloqueos 25

    Opciones de bloqueo en el nivel de tabla

    selas con precaucin

    Puede especificar una o ms opciones de bloqueo para una tabla

    Utilice la parte sugerenciasDeOptimizador de la clusula FROM de las instrucciones SELECT o UPDATE

    Suplanta las opciones de bloqueo en el nivel de sesin

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Aunque SQL Server utiliza una arquitectura de bloqueos dinmicos para seleccionar el mejor bloqueo para el cliente, se pueden especificar opciones de bloqueo en el nivel de tabla. Una sugerencia de tabla puede especificar un mtodo para que lo utilice el optimizador de consultas con una tabla especfica y para una instruccin.

    Utilice las opciones de bloqueo en el nivel de tabla con precaucin, slo despus de comprender en detalle el funcionamiento de la aplicacin y cuando haya determinado que el bloqueo que solicita seguir siendo, con el tiempo, mejor que el bloqueo utilizado por SQL Server.

    Las siguientes caractersticas se aplican a las opciones de bloqueo en el nivel de tabla:

    Puede especificar una o varias opciones de bloqueo para una tabla. Utilice la parte sugerenciasDeOptimizador de la clusula FROM de las

    instrucciones SELECT o UPDATE. Estas opciones de bloqueo suplantan las opciones correspondientes del

    nivel de sesin (nivel de aislamiento de las transacciones) que se hayan especificado previamente con la instruccin SET.

    Objetivo del tema Presentar las opciones de bloqueo de tablas.

    Explicacin previa En la prctica diaria, no se debe especificar la opcin de bloqueo de tabla.

    Nota

  • 26 Mdulo 15: Administracin de transacciones y bloqueos

    La siguiente tabla describe las opciones de bloqueo de tabla.

    Opcin Descripcin HOLDLOCK SERIALIZABLE REPEATABLEREAD READCOMMITTED READUNCOMMITTEDNOLOCK

    Controlan el comportamiento de bloqueo de una tabla y suplantan los bloqueos que se utilizaran para exigir el nivel de aislamiento de la transaccin actual.

    ROWLOCK PAGLOCK TABLOCK TABLOCKX

    Especifican el tamao y el tipo de los bloqueos que se utilizarn para una tabla.

    READPAST Salta las filas bloqueadas.

    UPDLOCK Utiliza bloqueos de actualizacin en lugar de bloqueos compartidos.

  • Mdulo 15: Administracin de transacciones y bloqueos 27

    Interbloqueos

    Cmo SQL Server termina los interbloqueos

    Cmo minimizar los interbloqueos

    Cmo personalizar la configuracin de tiempo de espera debloqueo

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Un interbloqueo se produce cuando dos transacciones tienen bloqueos sobre objetos diferentes y cada transaccin solicita un bloqueo sobre el objeto bloqueado por la otra transaccin. Las dos transacciones tienen que esperar a que la otra libere el bloqueo.

    Un interbloqueo puede ocurrir cuando varias transacciones de duracin prolongada se ejecutan simultneamente en la misma base de datos. Tambin pueden ocurrir interbloqueos como resultado del orden en el que el optimizador procesa una consulta compleja, como una combinacin, en la que no se puede controlar el orden del proceso.

    Cmo SQL Server termina los interbloqueos Para terminar automticamente los interbloqueos, SQL Server completa una de las transacciones. El proceso que utiliza SQL Server se encuentra en la lista siguiente.

    1. Deshace la transaccin del sujeto del interbloqueo. En un interbloqueo, SQL Server da prioridad a la transaccin que ha estado en proceso durante ms tiempo; dicha transaccin prevalece. SQL Server deshace la transaccin en la que ha invertido menos tiempo.

    2. Notifica a la aplicacin sujeto del interbloqueo (con el mensaje nmero 1205).

    3. Cancela la peticin actual del sujeto del interbloqueo. 4. Permite que contine la otra transaccin.

    En entornos multiusuario, todos los clientes deben comprobar con regularidad si reciben el mensaje nmero 1205, que indica que la transaccin se ha deshecho. Si se encuentra el mensaje 1205, la aplicacin tiene que volver a ejecutar la transaccin.

    Objetivo del tema Ilustrar por qu y cmo se produce un interbloqueo.

    Explicacin previa Un interbloqueo se produce cuando dos transacciones tienen bloqueos sobre objetos diferentes y cada transaccin solicita un bloqueo sobre el objeto bloqueado por la otra transaccin.

    Sugerencia Asegrese de resaltar la diferencia entre los interbloqueos y los bloqueos.

    Importante

  • 28 Mdulo 15: Administracin de transacciones y bloqueos

    Cmo minimizar los interbloqueos Aunque los interbloqueos no se pueden eliminar siempre, puede reducir el riesgo de que aparezcan si tiene en cuenta las siguientes directrices:

    Utilice los recursos en la misma secuencia para todas transacciones. Por ejemplo, si es posible, haga referencia a las tablas en el mismo orden en todas las transacciones que hagan referencia a ms de una tabla.

    Abrevie las transacciones minimizando el nmero de pasos. Abrevie la duracin de las transacciones evitando las consultas que afecten

    a muchas filas.

    Cmo personalizar la configuracin de tiempo de espera de bloqueo Si una transaccin se bloquea mientras espera un recurso y se produce un interbloqueo, SQL Server terminar una de las transacciones participantes sin tiempo de espera.

    Si no se produce ningn interbloqueo, SQL Server bloquea la transaccin que solicita el bloqueo hasta que la otra transaccin libere el bloqueo. De forma predeterminada, no hay ningn perodo de tiempo de espera obligatorio que tenga en cuenta SQL Server. La nica forma de probar si el recurso que se desea bloquear ya est bloqueado es tener acceso a los datos, lo que podra dar lugar a que estuviera bloqueado indefinidamente.

    LOCK_TIMEOUT permite que una aplicacin establezca el tiempo mximo que una instruccin debe esperar en un recurso bloqueado antes de que la instruccin bloqueada se cancele automticamente. La cancelacin no deshace ni cancela la transaccin. La aplicacin debe detectar el error para tratar la situacin de tiempo de espera y tomar una medida correctiva, como volver a enviar la transaccin o deshacerla.

    El comando KILL termina un proceso de usuario segn el Id. de proceso de servidor (spid).

  • Mdulo 15: Administracin de transacciones y bloqueos 29

    Presentacin de informacin acerca de los bloqueos

    Ventana Actividad actual Procedimiento almacenado de sistema sp_lock Analizador de SQL Monitor de sistema de Windows 2000 Informacin adicional

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Normalmente, para presentar un informe de los bloqueos activos se utiliza el Administrador corporativo de SQL Server o el procedimiento almacenado de sistema sp_lock. Puede utilizar el Analizador de SQL para obtener informacin acerca de un conjunto especfico de transacciones. Tambin puede utilizar el Monitor de sistema de Microsoft Windows 2000 para presentar el historial de bloqueos de SQL Server.

    Ventana Actividad actual Utilice la ventana Actividad actual del Administrador corporativo de SQL Server para presentar informacin acerca de la actividad actual de bloqueo. Puede ver la actividad del servidor por usuario, detallar la actividad por conexin y la informacin de bloqueo por objeto.

    Procedimiento almacenado de sistema sp_lock El procedimiento almacenado de sistema sp_lock devuelve informacin acerca de los bloqueos activos en SQL Server.

    EXECUTE sp_lock

    El resultado ser similar al siguiente.

    spid dbid ObjId IndId Type Resource Mode Status 12 5 0 0 DB S GRANT 12 5 0 0 DB S GRANT 12 2 0 0 EXT 1:280 X GRANT 12 5 0 0 PAG 1:528 IX GRANT 12 5 981578535 0 RID 1:528:0 X GRANT 12 1 5575058 0 TAB IS GRANT 12 5 981578535 0 TAB IX GRANT 13 1 0 0 DB S GRANT

    Objetivo del tema Mostrar la distinta infor-macin acerca de los bloqueos activos que se puede obtener.

    Explicacin previa Para presentar un informe de los bloqueos activos, ejecute el procedimiento almacenado de sistema sp_lock.

    Sugerencia Muestre la ventana Actividad actual del Administrador corporativo de SQL Server y del Analizador de SQL.

    Sintaxis

    Resultado

  • 30 Mdulo 15: Administracin de transacciones y bloqueos

    Las cuatro primeras columnas hacen referencia a varios Id.: Id. de proceso del servidor (spid), Id. de base de datos (dbid), Id. de objeto (ObjId) e Id. de nmero de identificacin de ndice (IndId).

    La columna Type muestra el tipo de recurso que est bloqueado actualmente. Los tipos de recursos pueden ser: DB (base de datos), EXT (extensin), TAB (tabla), KEY (clave), PAG (pgina) o RID (identificador de fila).

    La columna Resource tiene informacin acerca del tipo de recurso que est bloqueado. Una descripcin de recurso de 1:528:0 indica que la fila nmero 0 de la pgina nmero 528 del archivo 1 tiene aplicado un bloqueo.

    La columna Mode describe el tipo de bloqueo que se est aplicando al recurso. Los tipos de bloqueo son: compartido (S), exclusivo (X), de intencin (I), de actualizacin (U) o de esquema (Sch).

    La columna Status muestra si el bloqueo se ha obtenido (GRANT), est bloqueado en espera de que termine otro proceso (WAIT) o est en proceso de conversin (CNVRT).

    Analizador de SQL El Analizador de SQL es una herramienta que supervisa las actividades del servidor. Para recopilar informacin acerca de diversos eventos, puede crear trazas, que proporcionan un perfil detallado de los eventos del servidor. Puede utilizar este perfil para analizar y resolver los problemas de recursos del servidor, supervisar los intentos de inicio de sesin y las conexiones, y corregir problemas de interbloqueo.

    Monitor de sistema de Windows 2000 Puede ver la informacin de bloqueos de SQL Server con el Monitor de sistema. Utilice los objetos SQL Server: administrador de bloqueos y SQL Server: bloqueos.

    Informacin adicional Para buscar informacin acerca de los bloqueos y la actividad actual del servidor, puede consultar las tablas del sistema syslockinfo, sysprocesses, sysobjects, systables y syslogins, o puede ejecutar el procedimiento almacenado de sistema sp_who.

  • Mdulo 15: Administracin de transacciones y bloqueos 31

    Procedimientos recomendados

    Disee las transacciones para minimizar los interbloqueosDisee las transacciones para minimizar los interbloqueos

    Utilice las opciones de bloqueo predeterminadas de SQL ServerUtilice las opciones de bloqueo predeterminadas de SQL Server

    Mantenga las transacciones lo ms cortas posibleMantenga las transacciones lo ms cortas posible

    Tenga cuidado cuando utilice las opciones de bloqueoTenga cuidado cuando utilice las opciones de bloqueo

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Al administrar transacciones y bloqueos, debe tener en cuenta las siguientes recomendaciones:

    Mantenga las transacciones lo ms cortas posible, ya que as se reducir la posibilidad de conflictos de bloqueo con otras transacciones. Una transaccin nunca debe ser menor que una unidad lgica de trabajo.

    Disee las transacciones para minimizar los interbloqueos, de forma que no haya que volver a ejecutar las transacciones.

    Utilice las opciones de bloqueo predeterminadas de SQL Server, ya que el optimizador utiliza generalmente los mejores bloqueos, basados en la transaccin concreta y en la actividad actual de la base de datos.

    Tenga cuidado cuando utilice las opciones de bloqueo y pruebe las transacciones para asegurarse de que sus opciones de bloqueo son mejores que las opciones predeterminadas de SQL Server.

    Objetivo del tema Enumerar las recomen-daciones para administrar las transacciones y los bloqueos.

    Explicacin previa Utilice las siguientes reco-mendaciones cuando administre transacciones y bloqueos.

  • 32 Mdulo 15: Administracin de transacciones y bloqueos

    Prctica A: Administracin de transacciones y bloqueos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    Objetivos Despus de realizar esta prctica, el alumno ser capaz de:

    Definir transacciones con las instrucciones BEGIN TRANSACTION y COMMIT TRANSACTION.

    Determinar el nmero de transacciones activas al consultar la variable global @@trancount.

    Utilizar el procedimiento almacenado de sistema sp_lock y el Administrador corporativo de SQL Server para ver la informacin de los bloqueos.

    Utilizar la instruccin SET TRANSACTION ISOLATION LEVEL para controlar el comportamiento de los bloqueos en el nivel de sesin.

    Utilizar las opciones de bloqueo de tabla para controlar el comportamiento de los bloqueos en tablas especficas.

    Utilizar la instruccin SET LOCK_TIMEOUT para controlar la cantidad mxima de tiempo que una instruccin puede esperar a que se libere un bloqueo.

    Requisitos previos Antes de trabajar en esta prctica, debe tener:

    Los archivos de comandos de la prctica que se encuentran en C:\Moc\2329A\Labfiles\L15.

    Objetivo del tema Presentar la prctica.

    Explicacin previa En esta prctica, va a ejecutar transacciones, establecer opciones de bloqueo y ver los resultados de los bloqueos.

    Explique los objetivos de la prctica.

  • Mdulo 15: Administracin de transacciones y bloqueos 33

    Preparacin de la prctica Para completar esta prctica, necesitar lo siguiente:

    Haber completado la prctica anterior, o bien Haber ejecutado el archivo por lotes

    C:\Moc\2329A\Batches\Restore15.cmd. Este archivo de comandos restaura la base de datos ClassNorthwind a un estado requerido para esta prctica.

    Ms informacin Si necesita ayuda acerca de la ejecucin de archivos, busque el ttulo Ejecutar instrucciones SQL en la Ayuda del Analizador de consultas SQL.

    Otros recursos que puede utilizar son:

    El esquema de base de datos Northwind. Los Libros en pantalla de SQL Server.

    Situacin de ejemplo La organizacin del aula pretende simular la de una empresa dedicada al comercio mundial llamada Northwind Traders. Su nombre de dominio ficticio es nwtraders.msft. El servidor DNS principal para nwtraders.msft es el equipo del instructor, cuya direccin del Protocolo Internet (IP) es 192.168.x.200 (donde x es el nmero del aula que tiene asignado). El nombre del equipo del instructor es London.

    En la tabla siguiente se muestran el nombre de usuario, el nombre de equipo y la direccin IP del equipo de cada alumno en el dominio ficticio nwtraders.msft. Busque el nombre de usuario correspondiente a su equipo y antelo.

    Nombre de usuario

    Nombre del equipo

    Direccin IP

    SQLAdmin1 Vancouver 192.168.x.1

    SQLAdmin2 Denver 192.168.x.2

    SQLAdmin3 Perth 192.168.x.3

    SQLAdmin4 Brisbane 192.168.x.4

    SQLAdmin5 Lisbon 192.168.x.5

    SQLAdmin6 Bonn 192.168.x.6

    SQLAdmin7 Lima 192.168.x.7

    SQLAdmin8 Santiago 192.168.x.8

    SQLAdmin9 Bangalore 192.168.x.9

    SQLAdmin10 Singapore 192.168.x.10

    SQLAdmin11 Casablanca 192.168.x.11

    SQLAdmin12 Tunis 192.168.x.12

    SQLAdmin13 Acapulco 192.168.x.13

  • 34 Mdulo 15: Administracin de transacciones y bloqueos

    (continuacin) Nombre de usuario

    Nombre del equipo

    Direccin IP

    SQLAdmin14 Miami 192.168.x.14

    SQLAdmin15 Auckland 192.168.x.15

    SQLAdmin16 Suva 192.168.x.16

    SQLAdmin17 Stockholm 192.168.x.17

    SQLAdmin18 Moscow 192.168.x.18

    SQLAdmin19 Caracas 192.168.x.19

    SQLAdmin20 Montevideo 192.168.x.20

    SQLAdmin21 Manila 192.168.x.21

    SQLAdmin22 Tokyo 192.168.x.22

    SQLAdmin23 Khartoum 192.168.x.23

    SQLAdmin24 Nairobi 192.168.x.24

    Tiempo previsto para completar esta prctica: 60 minutos

  • Mdulo 15: Administracin de transacciones y bloqueos 35

    Ejercicio 1 Creacin y ejecucin de una transaccin

    En este ejercicio, va a utilizar las instrucciones BEGIN TRANSACTION y COMMIT TRANSACTION para comprender el efecto que surten las instrucciones en la forma en la que se modifican los datos. Tambin va a ver cmo SQL Server utiliza la variable global @@trancount para determinar si una transaccin est activa.

    Para crear y ejecutar una transaccin En este procedimiento, va a utilizar las instrucciones BEGIN TRANSACTION y COMMIT TRANSACTION para controlar cmo se procesa una instruccin UPDATE sobre la tabla Customers. 1. Inicie la sesin en el dominio del aula NWTraders con la informacin de la

    tabla siguiente.

    Opcin Valor Nombre de usuario

    SQLAdminx (donde x corresponde a su nombre de equipo, segn se ha designado en el dominio del aula nwtraders.msft)

    Contrasea password

    2. Abra el Analizador de consultas SQL y, si as se le pide, conctese al servidor local con autenticacin de Microsoft Windows. Tiene permiso para iniciar sesin y administrar SQL Server ya que ha iniciado sesin como SQLAdminx, que es miembro del grupo local Administradores de Windows 2000. Todos los miembros de este grupo se asignan automticamente a la funcin sysadmin de SQL Server.

    3. En la lista BD, haga clic en ClassNorthwind. 4. Abra el archivo C:\Moc\2329A\Labfiles\L15\Tran1.sql y revise su

    contenido. Observe que la instruccin BEGIN TRAN est seguida por la instruccin UPDATE, pero no se encuentra la instruccin COMMIT TRAN o ROLLBACK TRAN correspondiente. Las instrucciones SELECT y PRINT, y la variable global @@trancount se utilizan en la secuencia de comandos para mostrar el progreso de la transaccin.

  • 36 Mdulo 15: Administracin de transacciones y bloqueos

    5. Ejecute la secuencia de comandos y revise los resultados. En este momento, se han confirmado los cambios efectuados con la instruccin UPDATE en esta transaccin? Cmo puede determinar esto? No, la transaccin se debe completar con la instruccin COMMIT TRAN. La transaccin sigue estando activa y sigue manteniendo los bloqueos que haya adquirido. El valor de la variable global @@trancount es 1, lo que indica que en esta sesin se ha enviado una instruccin BEGIN TRAN. ____________________________________________________________

    ____________________________________________________________

    Podran otras transacciones consultar o actualizar los datos modificados? Otras transacciones no podran consultar o modificar los datos modificados hasta que se haya confirmado (o deshecho) la transaccin. ____________________________________________________________

    ____________________________________________________________

    6. Escriba una instruccin COMMIT TRANSACTION en la ventana de consulta y, despus, resltela y ejectela para completar la transaccin y hacer que los cambios sean definitivos.

    7. Resalte y ejecute una de las instrucciones SELECT de la tabla Customers para comprobar que ahora s se ha completado el cambio.

  • Mdulo 15: Administracin de transacciones y bloqueos 37

    Ejercicio 2 Deshacer una transaccin

    En este ejercicio, va a utilizar la instruccin ROLLBACK TRANSACTION para comprender el efecto que tiene la forma en la que se modifican los datos dentro de una transaccin.

    Para utilizar la instruccin ROLLBACK TRANSACTION En este procedimiento utilizar las instrucciones BEGIN TRANSACTION y ROLLBACK TRANSACTION para controlar el modo en que se procesa una instruccin UPDATE en la tabla member. 1. Abra el archivo C:\Moc\2329A\Labfiles\L15\Tran2.sql y revise su

    contenido. Observe que este archivo de comandos es similar a Tran1.sql, pero el nombre de contacto es distinto y se ha agregado una instruccin ROLLBACK TRAN.

    2. Ejecute la secuencia de comandos y revise los resultados. Se ha almacenado de forma permanente en la base de datos la modificacin efectuada por la instruccin UPDATE? No. La transaccin se ha cancelado, de modo que los cambios efectuados durante la transaccin se han deshecho. ____________________________________________________________

    ____________________________________________________________

    Se ha completado la transaccin? S. La instruccin ROLLBACK TRAN completa la transaccin y libera los bloqueos adquiridos por la transaccin. La consulta de la variable global @@trancount devuelve cero. ____________________________________________________________

    ____________________________________________________________

  • 38 Mdulo 15: Administracin de transacciones y bloqueos

    Ejercicio 3 Presentacin de la informacin de bloqueo

    En este ejercicio va a ejecutar simultneamente varias transacciones para determinar el efecto de dicha actividad sobre los bloqueos. Se le pedir que abra varias conexiones con el Analizador de consultas SQL para simular que varios usuarios estn enviando transacciones a SQL Server.

    Observe que las secuencias de comandos de este ejercicio no siempre incluyen instrucciones COMMIT TRAN o ROLLBACK TRAN. Su ausencia mantiene las transacciones abiertas y los bloqueos asociados activos, para poder ver as la informacin de bloqueo.

    Para ver la informacin de bloqueo En este procedimiento va a utilizar las instrucciones BEGIN TRANSACTION y ROLLBACK TRANSACTION para controlar cmo se procesa una instruccin UPDATE sobre la tabla Customers. 1. Inicie el Analizador de consultas SQL (conexin 1), y haga clic en Borrar

    la ventana de Consulta. 2. Ejecute el procedimiento almacenado de sistema sp_lock y revise el

    resultado. 3. Inicie el Administrador corporativo de SQL Server. 4. En el Administrador corporativo de SQL Server, en el rbol de la consola,

    expanda su servidor, expanda Administracin y, despus, expanda Actividad actual. Revise la informacin que se presenta en Informacin del proceso, Bloqueos / Id. de proceso y Bloqueos / Objeto.

    5. Abra una segunda conexin en el Analizador de consultas SQL (conexin 2) y, en la lista BD, haga clic en ClassNorthwind.

    6. Abra el archivo C:\Moc\2329A\Labfiles\L15\Lock1.sql mediante la conexin 2 y revise su contenido. Observe que se inicia una transaccin con la instruccin BEGIN TRAN pero no existe la correspondiente instruccin COMMIT TRAN o ROLLBACK TRAN para completar la transaccin.

    7. Ejecute Lock1.sql mediante la conexin 2 y revise los resultados. 8. Cambie a la conexin 1, ejecute el procedimiento almacenado de sistema

    sp_lock y revise la informacin de bloqueo. Identifique los diferentes tipos de bloqueo y los recursos bloqueados por la transaccin. Anote dicha informacin para utilizarla en el Ejercicio 4. ____________________________________________________________

    ____________________________________________________________

  • Mdulo 15: Administracin de transacciones y bloqueos 39

    9. Cambie al Administrador corporativo de SQL Server, haga clic con el botn secundario del mouse (ratn) en Actividad actual y haga clic en Actualizar.

    10. Revise la informacin de Actividad actual que se presenta en Informacin del proceso, Bloqueos / Id. de proceso y Bloqueos / Objeto.

    11. Cambie a la conexin 2 y cancele la transaccin iniciada en el paso 7; para ello, ejecute una instruccin ROLLBACK TRAN.

    12. Cambie a la conexin 1 y ejecute el procedimiento almacenado de sistema sp_lock. Observar que los bloqueos adquiridos por la transaccin en el paso 6 quedan ahora liberados.

  • 40 Mdulo 15: Administracin de transacciones y bloqueos

    Ejercicio 4 Establecimiento de las opciones de bloqueo

    En este ejercicio, va a utilizar algunas opciones de bloqueo de SQL Server para determinar cmo afectan a la forma en la que se procesan las transacciones. Va a utilizar las conexiones que estableci en el Analizador de consultas SQL en el ejercicio 3 para simular que varios usuarios estn enviando transacciones a SQL Server. Tambin puede utilizar la ventana Actividad actual del Administrador corporativo de SQL Server para ver la informacin de bloqueo durante este ejercicio.

    Para establecer el nivel de aislamiento de la transaccin En este procedimiento va a utilizar la instruccin SET TRANSACTION ISOLATION LEVEL para controlar el comportamiento del bloqueo en el nivel de sesin. Va a utilizar las conexiones que estableci en el Analizador de consultas SQL en el ejercicio 3. 1. Cambie al Analizador de consultas SQL (conexin 2). 2. Abra el archivo de comandos C:\Moc\2329A\Labfiles\L15\Lock2.sql

    mediante la conexin 2, revise su contenido y, despus, ejectelo. 3. Cambie a la conexin 1, ejecute el procedimiento almacenado de sistema

    sp_lock y revise la informacin de bloqueo. Identifique y revise los diferentes tipos de bloqueo y los recursos que la transaccin ha bloqueado. Ha utilizado SQL Server bloqueos diferentes de los que ha utilizado en el paso 8 del ejercicio 3? Razone la respuesta. Esta vez, SQL Server ha utilizado un bloqueo de tabla exclusivo porque la instruccin SET TRANSACTION ISOLATION LEVEL indic que se utilizara el tipo de bloqueo que se requiere para conseguir el nivel de aislamiento especificado. ____________________________________________________________

    ____________________________________________________________

    4. Cambie a la conexin 2 y cancele la transaccin; para ello, ejecute una instruccin ROLLBACK TRAN.

    Para utilizar las opciones de bloqueo de tablas En este procedimiento va a utilizar opciones de bloqueo de tabla para controlar el comportamiento de los bloqueos.

    1. Cambie al Analizador de consultas SQL (conexin 1). 2. Ejecute el procedimiento almacenado de sistema sp_lock mediante la

    conexin 1 y revise el resultado. 3. Cambie al Analizador de consultas SQL (conexin 2).

  • Mdulo 15: Administracin de transacciones y bloqueos 41

    4. Abra el archivo de comandos C:\Moc\2329A\Labfiles\L15\Lock3.sql mediante la conexin 2 y revise su contenido. Observe que se ha definido una opcin de bloqueo de tabla en la clusula FROM de la instruccin SELECT. Observe adems que la secuencia de comandos no contiene una instruccin COMMIT TRAN o ROLLBACK TRAN.

    5. Ejecute el archivo de comandos Lock3.sql en la conexin 2. 6. Cambie a la conexin 1 y ejecute el procedimiento almacenado de sistema

    sp_lock. Anote los tipos de bloqueo que se utilizan y los recursos que estn bloqueados. ____________________________________________________________

    ____________________________________________________________

    7. Abra una tercera conexin en el Analizador de consultas SQL (conexin 3) y, en la lista BD, haga clic en ClassNorthwind.

    8. Abra el archivo de comandos C:\Moc\2329A\Labfiles\L15\Lock1.sql mediante la conexin 3 y ejectelo.

    9. Cambie a la conexin 1 y ejecute el procedimiento almacenado de sistema sp_lock. Hay una transaccin que no se puede ejecutar? Si es as, por qu? S, la segunda transaccin est intentando actualizar los datos que estn bloqueados por la primera transaccin, de modo que la segunda transaccin debe esperar a que termine la primera. Puede determinar si una transaccin no se puede ejecutar debido a un conflicto de bloqueo; para ello, utilice el procedimiento almacenado de sistema sp_lock y busque la palabra WAIT en la columna de estado. En este caso, la transaccin de la conexin 3 debe esperar a que termine la transaccin de la conexin 2. ____________________________________________________________

    ____________________________________________________________

    Cunto tiempo espera una transaccin un recurso bloqueado? Una transaccin espera indefinidamente un recurso bloqueado, siempre y cuando no haya interbloqueos. Se puede establecer el perodo de tiempo de espera de la sesin para controlar cunto tiempo esperar SQL Server a que se liberen los recursos bloqueados. ____________________________________________________________

    ____________________________________________________________

    10. Cambie a la conexin 3 y, en la barra de herramientas, haga clic en Cancelar ejecucin de consulta.

    11. Cambie a la conexin 1 y ejecute el procedimiento almacenado del sistema sp_lock para comprobar que la transaccin en espera se ha cancelado.

  • 42 Mdulo 15: Administracin de transacciones y bloqueos

    Para establecer el perodo de tiempo de espera de bloqueo de una transaccin

    En este procedimiento, va a establecer el perodo de tiempo de espera de bloqueo para que la transaccin espere la obtencin de un bloqueo durante una cantidad de tiempo especificada.

    1. Cambie a la conexin 3, modifique el archivo de comandos C:\Moc\2329A\Labfiles\L15\Lock1.sql y agregue la siguiente instruccin inmediatamente antes de la instruccin BEGIN TRAN: SET lock_timeout 500

    2. Ejecute la secuencia de comandos modificada mediante la conexin 3.

    Qu ocurre y por qu? La transaccin de la conexin 3 estaba esperando los recursos bloqueados por la transaccin de la conexin 2. SQL Server cancel la transaccin de la conexin 3 porque termin el tiempo de espera de bloqueo que se especific. ____________________________________________________________

    ____________________________________________________________

    3. Cierre todas las ventanas del Analizador de consultas SQL.

  • Mdulo 15: Administracin de transacciones y bloqueos 43

    Repaso

    Introduccin a las transacciones y los bloqueos Administracin de las transacciones Bloqueos en SQL Server Administracin de los bloqueos

    ******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****

    1. Est desarrollando un nuevo sistema de recepcin de pedidos para su compaa. Espera que el sistema sea muy activo porque 450 operadores toman pedidos a los clientes durante las 24 horas del da. Deben los operadores procesar todos los elementos de cada pedido telefnico en una sola transaccin? Probablemente lo mejor sera tratar cada producto pedido como una transaccin independiente.

    2. Una vez al mes se le pide que haga una actualizacin de la tabla products del sistema de recepcin de pedidos. La tabla products contiene millones de elementos. Se espera que cada actualizacin mensual afecte al menos al 65 por ciento de las filas de la tabla. Puede escribir una sola y compleja instruccin UPDATE para hacer la actualizacin, que suele durar 30 minutos como mnimo. Es sta la mejor forma de efectuar la actualizacin? No. Si es posible, divida las instrucciones en grupos de transacciones menores para minimizar los conflictos de bloqueo con otros usuarios.

    3. Recibe llamadas de los usuarios que indican que el tiempo de respuesta del sistema de recepcin de pedidos se incrementa peridicamente en ms de 20 segundos. Les ha prometido un tiempo de respuesta de tres segundos. Sospecha que puede haber conflictos de bloqueo en el sistema. Cmo determinara el origen del problema? Utilice el procedimiento almacenado de sistema sp_lock o la ventana de actividad actual del Administrador corporativo de SQL Server para identificar el problema. A continuacin, modifique las transacciones involucradas.

    Objetivo del tema Reforzar los objetivos del mdulo mediante el repaso de los puntos clave.

    Explicacin previa Las preguntas de repaso abarcan algunos de los conceptos clave impartidos en el mdulo.

    Utilice estas preguntas para repasar los temas del mdulo. Pregunte a los alumnos si tienen alguna duda antes de continuar.

  • THIS PAGE INTENTIONALLY LEFT BLANK