Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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. |