Entendendo o controle de simultaneidade
O controle de simultaneidade refere-se às várias técnicas que são usadas para preservar a integridade dos bancos de dados quando vários usuários estão atualizando linhas ao mesmo tempo. A simultaneidade incorreta pode conduzir a problemas como leituras sujas, leituras de fantasma e leituras não repetíveis. O Microsoft JDBC Driver para SQL Server fornece interfaces a todas as técnicas de simultaneidade usadas pelo SQL Server para resolver esses problemas.
Observação
Para obter mais informações sobre a simultaneidade SQL Server, veja "Gerenciando o acesso simultâneo a dados".
Comentários
O driver JDBC oferece suporte aos seguintes tipos de simultaneidade:
Tipo de simultaneidade | Características | Bloqueios de linha | Descrição |
---|---|---|---|
CONCUR_READ_ONLY | Somente leitura | Não | Não são permitidas atualizações pelo cursor e não é mantido nenhum bloqueio nas linhas que compõem o conjunto de resultados. |
CONCUR_UPDATABLE | Gravação de leitura otimista | Não | O banco de dados assumir contenção de linha é improvável, mas possível. A integridade de linha é verificada com uma comparação de carimbo de data e hora. |
CONCUR_SS_SCROLL_LOCKS | Gravação de leitura pessimista | Sim | O banco de dados assumir contenção de linha é provável. A integridade de linha é assegurada com bloqueio de linha. |
CONCUR_SS_OPTIMISTIC_CC | Gravação de leitura otimista | Não | O banco de dados assumir contenção de linha é improvável, mas possível. A integridade da linha é verificada com uma comparação de carimbo de data/hora. Para o SQL Server 2005 (9.x) e posterior, o servidor alterará esse tipo para CONCUR_SS_OPTIMISTIC_CCVAL se a tabela não contiver uma coluna de carimbo de data/hora. Para o SQL Server 2000 (8.x), se a tabela subjacente tiver uma coluna de carimbo de data/hora, OPTIMISTIC WITH ROW VERSIONING será usado mesmo se OPTIMISTIC WITH VALUES for especificado. Se OPTIMISTIC WITH ROW VERSIONING for especificado e a tabela não tiver carimbos de data e hora, OPTIMISTIC WITH VALUES será usado. |
CONCUR_SS_OPTIMISTIC_CCVAL | Gravação de leitura otimista | Não | O banco de dados assumir contenção de linha é improvável, mas possível. A integridade de linha é verificada com uma comparação de dados da linha. |
Conjuntos de resultados que não são atualizáveis
Um conjunto de resultados atualizável é um conjunto de resultados no qual linhas podem ser inseridas, atualizadas e excluídas. Nos casos seguintes, o SQL Server não pode criar um cursor atualizável. A exceção gerada é "O conjunto de resultados não é atualizável".
Causa | Descrição | Medida |
---|---|---|
A instrução não é criada usando a sintaxe do JDBC 2.0 (ou posterior) | O JDBC 2.0 introduziu novos métodos para criar instruções. Se a sintaxe do JDBC 1.0 for usada, o conjunto de resultados seguirá o padrão somente leitura. | Especifique o tipo de conjunto de resultados e simultaneidade ao criar a instrução. |
A instrução é criada usando TYPE_SCROLL_INSENSITIVE | O SQL Server cria um cursor de instantâneo estático. Ele é desconectado das linhas de tabela subjacentes para ajudar a proteger o cursor de atualizações de linha feitas por outros usuários. | Use TYPE_SCROLL_SENSITIVE, TYPE_SS_SCROLL_KEYSET, TYPE_SS_SCROLL_DYNAMIC ou TYPE_FORWARD_ONLY com CONCUR_UPDATABLE para evitar criar um cursor estático. |
O design de tabela impede um cursor KEYSET ou DYNAMIC | A tabela subjacente não tem chaves exclusivas para permitir que o SQL Server identifique uma linha exclusivamente. | Acrescente chaves exclusivas à tabela para fornecer identificação exclusiva de cada linha. |