Exemplos do comportamento de LOCKS
Para se trabalhar corretamente com locks no banco é preciso identificar qual o tipo de acesso cada funcionalidade da aplicação precisa e assim configurar o tipo de acesso compatível.
As váriaveis sempre serão :
- SET ISOLATION
- SET LOCK MODE
- BEGIN/COMMIT
- USE LAST COMMITTED
- utilizado cursor ou não.
- realiza gravação ou apenas leitura
Trabalhar com locks , utilizando CURSORES
Os testes realizados com cursores foram feitos com a linguagem de progração I-4GL
CS = Cursor Stability
CR = Comitted Read
RR = Repeatable Read
DR = Dirty Read
Teste 1
- Comandos utilizados
DECLARE (sem parametros, equivale ao read only),
OPEN,FETCH,CLOSE,FREE - Teste SEM transação
- CS , CR, RR : Não colocou nenhum tipo de lock nas linhas selecionadas em cada FETCH - Teste COM transação
- CS: Colocou HDR+S durante cada fetch
- CR: Não colocou nenhum tipo de lock
- RR: Não colocou nenhum tipo de lock
Teste 2
- Comandos utilizados
DECLARE ... FOR UPDATE
OPEN,FETCH,CLOSE,FREE - Teste SEM transação
Ocorreu erro, - Teste COM transação
- CS: Colocou HDR+U durante cada fetch
- CR: Colocou HDR+U durante cada fetch
- RR: Colocou e manteve o HDR+U durante cada fetch , colocou HDR+SIX na tabela
Teste 3
- Comandos utilizados
DECLARE ... SCROLL (não funciona com FOR UPDATE)
OPEN,FETCH,CLOSE,FREE - Teste SEM transação
Ocorreu erro, - Teste COM transação
- CS: Colocou lock HDR+S em uma linha (como se fosse final de pagina) e HDR+IS na tabela
- CR: Não colocou nenhum tipo de lock
- RR: Não colocou nenhum tipo de lock nas linhas, apenas HDR+S na tabela
-- Criou tabela temporária com dados carregado pelo cursor.
-- Não foi possivel travar os registros já na leitura com o RR pq o FOR UPDATE não é compátivel.
Trabalhar com locks , utilizando SQL
Observação: Lembrar que como se trata de Querys, os fetch são automáticos e "instantaneos"
Teste 1
- Comandos utilizados
SELECT simples - Teste SEM transação
- CS, CR, RR: não coloca nenhum tipo de lock - Teste COM transação
- CS: Colocou HDR+S durante cada fetch , colocou HDR+IS na tabela
- CR: não coloca nenhum tipo de lock
- RR: não coloca nenhum tipo de lock no registro, colocou HDR+S na tabela
Teste 2
- Comandos utilizados
SELECT FOR UPDATE - Teste SEM transação
- Teste COM transação
- CS: Colocou HDR+U durante cada fetch, colocou HDR+IX na tabela
- CR: Colocou HDR+U durante cada fetch, colocou HDR+IX na tabela
- RR: Colocou e manteve o HDR+U durante cada fetch , colocou HDR+SIX na tabela
- 399 leituras
Tags:





Comentar