Professional Documents
Culture Documents
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
iii
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.
iv
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.
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.
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.
vi
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). Importante 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.
Introduccin
Objetivo del tema
Proporcionar una introduccin a los temas y objetivos del mdulo.
Introduccin a las transacciones y los bloqueos Administracin de las transacciones Bloqueos en SQL Server Administracin de los bloqueos
Explicacin previa
En este mdulo, trataremos...
******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.
Explicacin previa
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***** Sugerencia 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.
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.
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.
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.
Explicacin previa
En esta seccin, trataremos
Presentacin multimedia: Transacciones de SQL Server Recuperacin de transacciones y puntos de comprobacin Consideraciones para el uso de transacciones Establecimiento de la opcin de transacciones implcitas Restricciones en las transacciones definidas por el usuario
******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.
Explicacin previa
En esta presentacin, ver cmo se procesan las transacciones y cmo funciona el registro de transacciones.
******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL***** Advertencia 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. Sintaxis 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. Sintaxis Sintaxis Sintaxis SAVE TRAN[SACTION] {puntoAlmacenamiento | @variablePuntoAlmacenamiento} BEGIN DISTRIBUTED TRAN[SACTION] [transaccin | @variableTransaccin] COMMIT [TRAN[SACTION] [transaccin | @variableTransaccin]]
Para mostrar los subttulos de la presentacin, active la opcin Ttulos del men Ver en el Reproductor de Windows Media.
Punto clave
Sintaxis Ejemplo
Este ejemplo no se puede ejecutar porque los procedimientos almacenados no existen.
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
Recuperacin de transacciones
1 2 3 4 5 Puntos de comprobacin
Accin requerida
Ninguna Confirmar Deshacer Confirmar Deshacer
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.
******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. Sugerencia 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.
Utilice la diapositiva como punto de partida para la explicacin. Pregunte a los alumnos por qu es necesaria cada una de las acciones.
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. Importante 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.
Explicacin previa
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 del usuario 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.
10
11
Explicacin previa
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 SET IMPLICIT_TRANSACTIONS IMPLICIT_TRANSACTIONS ON ON
Las transacciones implcitas pueden ser tiles cuando se migran aplicaciones a SQL Server.
******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. Sintaxis 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 CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT TRUNCATE TABLE 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.
12
Explicacin previa
******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
13
Explicacin previa
En esta seccin, trataremos
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.
14
Actualizacin perdida Dependencia no confirmada (lectura no confirmada) Anlisis incoherente (lectura no repetible) Lecturas fantasma
Explicacin previa
Los bloqueos son tiles para asegurar la integridad de las transacciones en estas situaciones
******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: Actualizacin perdida 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. Dependencia no confirmada (lectura no confirmada) 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. Anlisis incoherente (lectura no repetible) 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. Lecturas fantasma 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.
15
Descripcin Identificador de fila Bloqueo de fila dentro de un ndice Pgina de datos o pgina de ndice Grupo de pginas Tabla completa Base de datos completa
Explicacin previa
El nmero de bloqueos se tiene que adaptar a la cantidad de datos a los que afecta cada uno de los bloqueos.
******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 RID Clave Pgina Extensin Tabla Base de datos Descripcin Identificador de fila: se utiliza para bloquear una sola fila de una tabla. Bloqueo de fila dentro de un ndice: se utiliza para proteger intervalos de claves en transacciones serializables. Pgina de datos o pgina de ndice de 8 KB. Grupo contiguo de pginas de datos o pginas de ndice: se utiliza durante la asignacin de espacio. Tabla completa, incluidos todos los datos e ndices. Toda la base de datos: se utiliza durante la restauracin de una base de datos.
16
Tipos de bloqueos
Objetivo del tema
Enumerar los tipos de bloqueos.
Explicacin previa
Bloqueos bsicos Compartidos Exclusivos Bloqueos para situaciones especiales Intencin Actualizacin Esquema Actualizacin masiva
SQL Server tiene dos tipos principales de bloqueos: bloqueos bsicos y bloqueos para situaciones especiales.
******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.
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 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
19
Explicacin previa
Los bloqueos pueden ser compatibles o incompatibles con otros bloqueos Ejemplos Los bloqueos compartidos son compatibles con todos los bloqueos excepto con los exclusivos Los bloqueos exclusivos no son compatibles con ningn otro bloqueo Los bloqueos de actualizacin son compatibles slo con 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). Sugerencia
Bloqueo concedido existente Bloqueo solicitado Compartido de intencin (IS) Compartido (S) Actualizacin (U) Exclusivo de intencin (IX) Compartido con bloqueo exclusivo de intencin (SIX) Exclusivo (X) IS S S S S S S S S S No No U S S No No No IX S No No S No SIX S No No No No X No No No No No
No
No
No
No
No
No
Nota 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).
20
Explicacin previa
En esta seccin, trataremos
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.
21
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
Explicacin previa
******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.
22
Sintaxis
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 READ COMMITTED Descripcin 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. 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.
SERIALIZABLE
Ejemplo
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
Resultado
set option textsize language dateformat datefirst . . . isolation level (13 filas afectadas) value 64512 us_english mdy 7
read uncommitted
23
Sugerencia
Sintaxis
Ejemplo
Para determinar el valor para la sesin actual, consulte la variable global @@lock_timeout. Ejemplo En este ejemplo se presenta el valor actual de @@lock_timeout.
SELECT @@lock_timeout
Resultado
24
Explicacin previa
Costo
Fila
Pgina Granularidad
Tabla
******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.
25
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
Explicacin previa
******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. Nota 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.
26
Especifican el tamao y el tipo de los bloqueos que se utilizarn para una tabla.
Salta las filas bloqueadas. Utiliza bloqueos de actualizacin en lugar de bloqueos compartidos.
27
Interbloqueos
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.
Cmo SQL Server termina los interbloqueos Cmo minimizar los interbloqueos Cmo personalizar la configuracin de tiempo de espera de bloqueo
******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL***** Sugerencia 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.
28
29
Ventana Actividad actual Procedimiento almacenado de sistema sp_lock Analizador de SQL Monitor de sistema de Windows 2000 Informacin adicional
Explicacin previa
Para presentar un informe de los bloqueos activos, ejecute el procedimiento almacenado de sistema sp_lock.
******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL***** Sugerencia 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.
Muestre la ventana Actividad actual del Administrador corporativo de SQL Server y del Analizador de SQL.
30
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.
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.
31
Procedimientos recomendados
Objetivo del tema
Enumerar las recomendaciones para administrar las transacciones y los bloqueos.
Mantenga Mantenga las las transacciones transacciones lo lo ms ms cortas cortas posible posible Disee Disee las las transacciones transacciones para para minimizar minimizar los los interbloqueos interbloqueos
Explicacin previa
Utilice Utilice las las opciones opciones de de bloqueo bloqueo predeterminadas predeterminadas de de SQL SQL Server Server
Tenga Tenga cuidado cuidado cuando cuando utilice utilice las las opciones opciones de de bloqueo 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.
32
Explicacin previa
En esta prctica, va a ejecutar transacciones, establecer opciones de bloqueo y ver los resultados de los bloqueos.
******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****
Explique los objetivos de la prctica.
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.
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 SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 Nombre del equipo Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Direccin IP 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13
34
35
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
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.
37
38
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
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
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.
43
Repaso
Reforzar los objetivos del mdulo mediante el repaso de los puntos clave.
Introduccin a las transacciones y los bloqueos Administracin de las transacciones Bloqueos en SQL Server Administracin de los bloqueos
Explicacin previa
Las preguntas de repaso abarcan algunos de los conceptos clave impartidos en el mdulo.
******EL USO POR QUIENES NO SEAN INSTRUCTORES NO EST AUTORIZADO Y RESULTA ILEGAL*****
Utilice estas preguntas para repasar los temas del mdulo. Pregunte a los alumnos si tienen alguna duda antes de continuar.
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.