Descripción del control de la simultaneidad
El control de la simultaneidad se refiere a las diversas técnicas que se utilizan para conservar la integridad de la base de datos cuando varios usuarios actualizan filas al mismo tiempo. Una simultaneidad incorrecta puede causar problemas, como la lectura de datos sucios, las lecturas fantasmas y las lecturas no repetibles. El Microsoft JDBC Driver para SQL Server proporciona interfaces para todas las técnicas de simultaneidad que SQL Server emplea para resolver estos problemas.
Nota
Para obtener más información sobre la simultaneidad de SQL Server, vea Administrar el acceso simultáneo a datos.
Observaciones
El controlador JDBC es compatible con los tipos de simultaneidad siguientes:
Tipo de simultaneidad | Características | Bloqueos de fila | Descripción |
---|---|---|---|
CONCUR_READ_ONLY | Solo lectura | No | No se permiten las actualizaciones a través del cursor y no se mantienen los bloqueos en las filas que forman el conjunto de resultados. |
CONCUR_UPDATABLE | Lectura-escritura optimista | No | La base de datos supone que la contención de la fila es improbable, pero posible. La integridad de las filas se comprueba con una comparación de la marca de tiempo. |
CONCUR_SS_SCROLL_LOCKS | Lectura-escritura pesimista | Sí | La base de datos supone que la contención de la fila es probable. La integridad de la fila se garantiza con el bloqueo de filas. |
CONCUR_SS_OPTIMISTIC_CC | Lectura-escritura optimista | No | La base de datos supone que la contención de la fila es improbable, pero posible. La integridad de las filas se comprueba con una comparación de la marca de tiempo. En SQL Server 2005 (9.x) y versiones posteriores, el servidor cambiará esto por CONCUR_SS_OPTIMISTIC_CCVAL si la tabla no contiene una columna de marca de tiempo. En SQL Server 2000 (8.x), si la tabla subyacente tiene una columna de marca de tiempo, se utiliza OPTIMISTIC WITH ROW VERSIONING incluso si se especifica OPTIMISTIC WITH VALUES. Si se especifica OPTIMISTIC WITH ROW VERSIONING y la tabla no incluye marcas de tiempo, se utiliza OPTIMISTIC WITH VALUES. |
CONCUR_SS_OPTIMISTIC_CCVAL | Lectura-escritura optimista | No | La base de datos supone que la contención de la fila es improbable, pero posible. La integridad de las filas se comprueba con una comparación de los datos de las filas. |
Conjuntos de resultados que no son actualizables
Un conjunto de resultados actualizable es aquel en el que las filas se pueden insertar, actualizar y eliminar. En los casos siguientes, SQL Server no puede crear un cursor actualizable. La excepción que se genera es: "El conjunto de resultados no es actualizable".
Causa | Descripción | Solución |
---|---|---|
La instrucción no se crea con la sintaxis de JDBC 2.0 (o versiones posteriores) | JDBC 2.0 introdujo métodos nuevos para crear instrucciones. Si se usa la sintaxis de JDBC 1.0, el conjunto de resultados se establece de forma predeterminada como de solo lectura. | Especifique el tipo del conjunto de resultados y la simultaneidad al crear la instrucción. |
La instrucción se crea con TYPE_SCROLL_INSENSITIVE | SQL Server crea un cursor de instantánea estático. Se desconecta de las filas de la tabla subyacente para ayudar a proteger el cursor de las actualizaciones de filas de otros usuarios. | Use TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC o TYPE_FORWARD_ONLY con CONCUR_UPDATABLE para evitar crear un cursor estático. |
El diseño de la tabla imposibilita el uso de un cursor KEYSET o DYNAMIC | La tabla subyacente no tiene claves únicas para habilitar SQL Server para que identifique de forma única una fila. | Agregue claves únicas a la tabla para permitir la identificación exclusiva de cada fila. |
Consulte también
Administración de conjuntos de resultados con el controlador JDBC