Beruflich Dokumente
Kultur Dokumente
1. Introduo
O termo concorrncia se refere ao fato de que os SGBDs em geral permitem
que muitas transaes tenham acesso ao mesmo banco de dados ao mesmo
tempo. Em um sistema desse tipo, necessrio algum tipo de mecanismo de
controle (bloqueio) para assegurar que transaes concorrentes no interfiram
umas nas outras.
Na situao ideal, cada um destes usurios deveria executar os seus
comandos como se ele fosse o nico. Este seria o maior nvel de isolamento.
Entretanto, muito baixo o nvel de concorrncia correspondente a tal nvel de
isolamento e usurios podero ficar aguardando por informaes durante
tempos relativamente longos, espera do trmino de outras transaes.
Buscando aumentar os nveis de concorrncia reduo da espera em
detrimento do isolamento, a SQL definiu alguns nveis de isolamento.
SGBD
BD
(recurso)
Transaes T1 e T2 so iniciadas.
A transao T1 modifica a linha L1.
A transao T2 l a linha L1 antes que T1 termine.
T1 termina com fracasso e suas operaes so desfeitas.
4.
5.
Transaes T1 e T2 so iniciadas.
A transao T1 l a linha L1.
A transao T2 modifica a linha L1, atualizando seus dados ou
apagando a linha.
A transao T2 concluda com sucesso e as suas operaes
so confirmadas.
A transao T1 l (ou tenta ler) a linha L1.
Leitura Fantasma
1.
2.
3.
4.
Transaes T1 e T2 so iniciadas.
A transao T1 l um conjunto de linhas que atendem a uma
condio C1;
A transao T2 executa uma operao de atualizao que cria
uma ou mais linhas que atendem condio C1;
A transao T1 l, novamente, um conjunto de linhas que
atendem a uma condio C1.
Perda de Atualizao
1.
2.
3.
4.
5.
6.
7.
Transaes T1 e T2 so iniciadas.
A transao T1 l o dado D1 e armazena seu valor na varivel X.
A transao T2 l o dado D1 e armazena seu valor na varivel Y.
A transao T1 atualiza D1 com o valor 10.
A transao T2 atualiza D1 com o valor 11.
A transao T1 termina com sucesso.
A transao T2 termina com sucesso.
repeatable read
read committed
read uncommitted
Perda de
Atualizao
PROBLEMA
Leitura
Leitura
Suja
No-repetida
Leitura
Fantasma
READ
No permite
UNCOMMITTED
READ
No permite
COMMITTED
REPEATABLE
No permite
READ
Permite
Permite
Permite
No permite
Permite
Permite
No permite
No permite
Permite
SERIALIZABLE
No permite
No permite
No permite
No permite
Exerccio 1:
Simular uma situao de concorrncia e bloqueio. Use a tabela TBCONTA do
banco de dados DBBANCO (cdigo de criao do banco\tabela na apostila de
Transaes).
Escreva duas transaes em janelas (NEW QUERY) diferentes do
Management Studio.
A primeira transao deve alterar um dado da tabela (o saldo da conta 123,
por exemplo):
Obs.: digite mas no execute a transao ainda.
begin transaction
update TBCONTA set saldo=saldo+1000 where conta=123
commit
A segunda transao (em outra janela) deve ler este mesmo dado (o saldo da
conta 123).
Obs.: digite mas no execute a transao ainda.
begin transaction
select saldo from TBCONTA where conta=123
commit
Exerccio 2:
Anote o saldo atual da conta 123.
Altere o cdigo da primeira transao:
begin transaction
update TBCONTA set saldo=saldo+1000 where conta=123
rollback