Partilhar via


Entendendo o controle de simultaneidade

Baixar o JDBC Driver

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.

Confira também

Gerenciando conjuntos de resultados com o JDBC Driver