Modalidades de bloqueo y compatibilidad de bloqueos
La modalidad de un bloqueo indica qué acceso al objeto bloqueado se permite para el propietario del bloqueo y para los procesos simultáneos.
Db2 usos de los modos de bloqueo para determinar si un bloqueo es compatible con otro. Algunas modalidades de bloqueo no excluyen a todos los demás usuarios. Por ejemplo, suponga que el proceso de aplicación A mantiene un bloqueo en un espacio de tablas al que el proceso B también desea acceder. Db2 solicita, en nombre del proceso B, un bloqueo de algún modo en particular. Si la modalidad del bloqueo para el proceso A permite el bloqueo solicitado por el proceso B, las modalidades de los dos bloqueos se consideran compatibles. Sin embargo, si los dos bloqueos no son compatibles, el proceso B no puede continuar. Se debe esperar hasta que el proceso A libere su bloqueo y hasta que todos los demás bloqueos incompatibles se liberen.
Modalidades de bloqueo de página y de fila
Las modalidades y sus efectos aparecen listados en orden de control creciente sobre los recursos.
- Bloqueo S (compartición)
- El propietario del bloqueo y cualquier proceso simultáneo pueden leer, pero no cambiar, la página o fila bloqueada. Los procesos simultáneos pueden adquirir bloqueos S o U en la página o fila o pueden leer datos sin adquirir un bloqueo de página o fila. Solo se puede adquirir un candado en U al mismo tiempo que uno o más candados en S.
- Bloqueo U (actualización)
- El propietario del bloqueo puede leer, pero no cambiar, la página o fila bloqueada. Los procesos simultáneos pueden adquirir bloqueos S o pueden leer datos sin adquirir un bloqueo de página o fila, pero ningún proceso simultáneo puede adquirir un bloqueo U.
Los bloqueos U reducen la posibilidad de puntos muertos cuando el propietario del bloqueo está leyendo una página o fila para determinar si debe cambiarlos. El propietario puede comenzar con el bloqueo U y luego aumentar el bloqueo a un bloqueo X para modificar la página o fila.
- Bloqueo X (exclusivo)
- El propietario del bloqueo puede leer o cambiar la página o fila bloqueada. Un proceso simultáneo no puede adquirir bloqueos S, U ni X sobre la página o fila. Sin embargo, un proceso simultáneo, como los vinculados con las opciones de vinculación CURRENTDATA(NO) o ISOLATION(UR) o los que se ejecutan con el valor YES para el parámetro de subsistema EVALUNC, pueden leer los datos sin adquirir ningún bloqueo de página o fila.
Modalidades de bloqueo de espacio de tabla y de tabla
Cuando se bloquea una página o fila, la tabla, partición o espacio de tabla que la contienen también se bloquean. Este bloqueo de intención indica el plan que el proceso de aplicaciones tiene para acceder a los datos. En este caso, el bloqueo de tabla, partición o espacio de tabla tiene una de las siguientes modalidades intencionadas: IS para compartimiento de intención, IX para exclusivo de intención o SIX para compartimiento con exclusivo de intención.
Las modalidades S, U y X de los bloqueos de tabla, partición y espacio de tabla a veces se denominan modalidades de bloqueo en bruto. En el contexto de lectura, SIX es un bloqueo de modalidad en bruto porque no se obtienen bloqueos de página o de fila; es este sentido, es como un bloqueo S.
Las modalidades y sus efectos aparecen listados en orden de control creciente sobre los recursos.
- Bloqueo IS (compartimiento de intención)
- El propietario del bloqueo puede leer los datos de la tabla, partición o espacio de tabla, pero no puede cambiarlos. Los datos pueden ser leídos y cambiados por procesos simultáneos. El propietario del bloqueo puede adquirir un bloqueo de página o fila sobre cualquier dato que lea.
- Bloqueo IX (exclusivo de intención)
- El propietario del bloqueo y procesos simultáneos pueden leer y cambiar los datos de la tabla, partición o espacio de tabla. El propietario del bloqueo puede adquirir un bloqueo de página o fila sobre cualquier dato que lea; debe adquirir un bloqueo sobre cualquier datos que cambie.
- Bloqueo S (compartición)
- El propietario del bloqueo y procesos simultáneos pueden leer, pero no cambiar, los datos de la tabla, partición o espacio de tabla. El propietario del bloqueo no necesita adquirir un bloqueo de página o fila sobre los datos que lee.
- Bloqueo U (actualización)
- El propietario del bloqueo puede leer, pero no cambiar, los
datos bloqueados; pero el propietario puede aumentar el bloqueo
a la categoría de bloqueo X y luego cambiar los datos. Los procesos simultáneos con el bloqueo U pueden adquirir
bloqueos S y leer los datos, pero ningún proceso simultáneo
puede adquirir un bloqueo U. El propietario del bloqueo no necesita adquirir bloqueos de
página o fila.
Los bloqueos U reducen la posibilidad de puntos muertos cuando el propietario del bloqueo está leyendo datos para determinar si debe cambiarlos. Los bloqueos U se adquieren sobre un espacio de tabla cuando el tamaño de bloqueo es TABLESPACE y la sentencia es SELECT con una cláusula FOR UPDATE. Similarmente, los bloqueos U se adquieren sobre una tabla cuando el tamaño de bloqueo es TABLE y la sentencia es SELECT con una cláusula FOR UPDATE.
- Bloqueo SIX (compartición con exclusivo de intención)
- El propietario del bloqueo puede leer y cambiar los datos de la tabla, partición o espacio de tabla. Los procesos simultáneos pueden leer los datos de la tabla, partición o espacio de tabla, pero no pueden cambiarlos. El propietario del bloqueo adquiere bloqueos de página o fila solamente cuando cambia datos.
- Bloqueo X (exclusivo)
- El propietario del bloqueo puede leer y cambiar los datos de la tabla, partición o espacio de tabla. Un proceso simultáneo puede acceder a los datos si el proceso se ejecuta con aislamiento UR o si los datos de un espacio de tabla particionado se ejecutan con aislamiento CS y CURRENTDATA((NO). El propietario del bloqueo no necesita adquirir bloqueos de página o fila.
Por ejemplo, una sentencia de SQL localiza a John Smith en una tabla de datos de cliente y cambia su dirección. La sentencia bloquea todo el espacio de tabla en modalidad IX y la fila específica que modifica en modalidad X.
Compatibilidad de modalidades de bloqueo
La tabla siguiente muestra la compatibilidad de dos modalidades para bloqueos de página y fila. No se plantea ninguna cuestión de compatibilidad entre bloqueos de página y fila, porque una partición o espacio de tabla no puede utilizar bloqueos de página y de fila.
| Modalidad de bloqueo | Compartimiento (bloqueo S) | Actualización (bloqueo U) | Exclusividad (bloqueo X) |
|---|---|---|---|
| Compartimiento (bloqueo S) | Sí | Sí | Nee |
| Actualización (bloqueo U) | Sí | Nee | Nee |
| Exclusividad (bloqueo X) | Nee | Nee | Nee |
La compatibilidad para los bloqueos de espacio de tabla es algo más compleja que para los bloqueos de página o fila. La siguiente tabla muestra la compatibilidad de dos modos de bloqueo cualesquiera para particiones, espacio de tabla o bloqueos de tabla.
| Modalidad de bloqueo | ES | IX | S | U | SIX | X |
|---|---|---|---|---|---|---|
| ES | Sí | Sí | Sí | Sí | Sí | Nee |
| IX | Sí | Sí | Nee | Nee | Nee | Nee |
| S | Sí | Nee | Sí | Sí | Nee | Nee |
| U | Sí | Nee | Sí | Nee | Nee | Nee |
| SIX | Sí | Nee | Nee | Nee | Nee | Nee |
| X | Nee | Nee | Nee | Nee | Nee | Nee |