Partilhar via


Noções básicas sobre controle de simultaneidade

Baixar driver JDBC

O controlo de concorrência refere-se às várias técnicas utilizadas para preservar a integridade da base de dados quando vários utilizadores atualizam linhas ao mesmo tempo. A concorrência incorreta pode levar a problemas como leituras sujas, leituras fantasma e leituras não repetíveis. O Microsoft JDBC Driver para SQL Server fornece interfaces para todas as técnicas de concorrência usadas pelo SQL Server para resolver estes problemas.

Observação

Para mais informações sobre a concorrência no SQL Server, consulte "Gerir o Acesso Concorrente a Dados".

Observações

O driver JDBC suporta os seguintes tipos de concorrência:

Tipo de Concorrência Caraterísticas Bloqueios de linha Description
CONCUR_READ_ONLY Somente leitura Não Atualizações através do cursor não são permitidas, e não há bloqueios nas linhas que compõem o conjunto de resultados.
CONCUR_UPDATABLE Leitura e Escrita Otimista Não A base de dados assume que a concorrência por linhas é improvável, mas possível. A integridade das filas é verificada com uma comparação de carimbo temporal.
CONCUR_SS_SCROLL_LOCKS Leitura Escrita Pessimista Yes A base de dados assume que a contenda por linhas é provável. A integridade das filas é assegurada com o bloqueio das filas.
CONCUR_SS_OPTIMISTIC_CC Leitura e Escrita Otimista Não A base de dados assume que a concorrência por linhas é improvável, mas possível. A integridade das linhas é verificada com uma comparação de carimbo temporal.

Para o SQL Server 2005 (9.x) e posteriores, o servidor alterará isto para CONCUR_SS_OPTIMISTIC_CCVAL se a tabela não contiver uma coluna de carimbo temporal.

Para SQL Server 2000 (8.x), se a tabela subjacente tiver uma coluna de timestamp, OPTIMISTIC WITH ROW VERSIONING é usado mesmo que OPTIMISTIC WITH VALUES seja especificado. Se for especificado OPTIMISTIC WITH ROW VERSIONING e a tabela não tiver carimbos temporais, é usado OPTIMISTIC WITH VALUES.
CONCUR_SS_OPTIMISTIC_CCVAL Leitura e Escrita Otimista Não A base de dados assume que a contenda por linhas é improvável, mas possível. A integridade da linha é verificada com uma comparação de dados de linha.

Conjuntos de resultados que não são atualizáveis

Um conjunto de resultados atualizável é um conjunto de resultados no qual as linhas podem ser inseridas, atualizadas e eliminadas. 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."

Motivo Description Solução
A instrução não foi criada utilizando a sintaxe do JDBC 2.0 (ou posterior) O JDBC 2.0 introduziu novos métodos para criar instruções SQL. Se for usada a sintaxe JDBC 1.0, o conjunto de resultados será, por padrão, apenas de leitura. Especifique o tipo de conjunto de resultados e a concorrência ao criar a instrução.
A declaração é criada usando TYPE_SCROLL_INSENSITIVE O SQL Server cria um cursor de snapshot estático. Isto está desligado das linhas da tabela subjacente para ajudar a proteger o cursor contra atualizações feitas nas linhas por outros utilizadores. 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 tabelas exclui um cursor KEYSET ou DYNAMIC A tabela subjacente não possui chaves únicas que permitam ao SQL Server identificar de forma única uma linha. Adicione chaves únicas à tabela para fornecer uma identificação única de cada linha.

Consulte também

Gerir conjuntos de resultados com o driver JDBC