Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 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 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 concorrência | 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 | Leitura/gravação otimista | Não | O banco de dados pressupõe que a contenção de linhas é improvável, mas possível. A integridade da linha é verificada por meio da comparação de carimbos de data e hora. |
| CONCUR_SS_SCROLL_LOCKS | Leitura/gravação pessimista | Sim | O banco de dados assume que a contenção de linhas é provável. A integridade das linhas é garantida por meio do bloqueio de linhas. |
| CONCUR_SS_OPTIMISTIC_CC | Leitura/gravação otimista | Não | O banco de dados assume que a contenção de linha é improvável, mas possível. A integridade da linha é verificada por meio da comparação de carimbos de data e hora. Para o SQL Server 2005 (9.x) e versões posteriores, o servidor alterará isso para CONCUR_SS_OPTIMISTIC_CCVAL se a tabela não contiver uma coluna timestamp. Para o SQL Server 2000 (8.x), se a tabela subjacente tiver uma coluna timestamp, OPTIMISTIC WITH ROW VERSIONING é usado mesmo se OPTIMISTIC WITH VALUES for especificado. Se OPTIMISTIC WITH ROW VERSIONING for especificada e a tabela não tiver marcas de data e hora, OPTIMISTIC WITH VALUES será utilizada. |
| CONCUR_SS_OPTIMISTIC_CCVAL | Leitura e gravação otimistas | Não | O banco de dados assume que a contenção entre linhas é improvável, mas possível. A integridade da linha é verificada por meio de uma comparação dos 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 | Solução |
|---|---|---|
| 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 statements. 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 a concorrência ao criar o comando. |
| O Statement é criado 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. |
| A estrutura da tabela não permite 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. |