Академический Документы
Профессиональный Документы
Культура Документы
Processamento de transaes
Operaes:
begin_transaction: inicia a execuo de uma
transao
end_transaction: finaliza a transao (deve-se
verificar se a transao foi finalizada com
sucesso ou no)
Operaes:
read_item(X) ou r(X) : executa a leitura de um
item X do Banco de Dados, armazenando este
item em uma varivel do programa que tambm
dever ser chamada de X.
Operaes:
write_item(X) ou w(X) : faz a gravao do
valor da varivel X do programa em um item do
Banco de dados denominado X.
Operaes:
commit_transaction: informa se a transao
foi executada com sucesso
abort_transaction: informa se a transao
NO foi executada com sucesso (neste caso h o
descarte das operaes realizadas)
commit_transaction
Parcialmente
confirmado
Ativo
Confirmado
abort_transaction
abort_transaction
read, write
Finalizado
sem Sucesso
Finalizado
Transao 2
read_item(X)
X:=X-n
read_item(X)
X:=X+n
write_item(X)
read_item(Y)
Write_item(X)
Y:=Y-n
Write_item(Y)
A Transao 2 faz a
leitura do valor de
X antes da
Transao 1
realizar a sua
atualizao. O
valor atualizado de
X para a Transao
1 perdido.
Transao 2
read_item(X)
X:=X-n
write_item(X)
read_item(X)
X:=X+n
Write_item(X)
read_item(Y)
A Transao 1 falha e
deve alterar o valor de X
para o seu valor anterior;
enquanto isso a
Transao 2 faz a leitura
do valor incorreto
temporrio de X e
executa a alterao.
Transao 2
soma:=0
read_item(X)
soma:=soma + X
read_item(Y)
soma:=soma + Y
read_item(X)
X:=X+n
write_item(X)
read_item(Z)
soma:=soma+Z
A Transao 2 acessa,
altera e atualiza o valor
de X que usado nas
somas da transao 1,
logo o resultado de todas
as somas da transao 1
estar incorreto.
read_lock(X);
read_item(X);
unlock(X);
write_lock(Y);
read_item(Y);
Y:= X+Y;
write_item(Y);
unlock(Y);
Transao T2
read_lock(Y);
read_item(Y);
unlock(Y);
read_lock(X);
read_item(X);
unlock(X);
write_lock(Y);
read_item(Y);
Y:= X+Y;
write_item(Y);
unlock(Y);
write_lock(X);
read_item(X);
X:= X+Y;
write_item(X);
unlock(X);
O item Y em T1
e X em T2
foram
desbloqueados
cedo demais,
permitindo um
escalonamento
noserializvel.
Transao T2
read_lock(Y);
read_item(Y);
unlock(Y);
write_lock(X);
read_item(X);
X:= X+Y;
write_item(X);
unlock(X);
read_lock(X);
read_item(X);
unlock(X);
write_lock(Y);
read_item(Y);
Y:= X+Y;
write_item(Y);
unlock(Y);
Transao T2
read_lock(Y);
read_item(Y);
write_lock(X);
unlock(Y);
read_item(X);
X:= X+Y;
write_item(X);
unlock(X);
read_lock(X);
read_item(X);
write_lock(Y);
unlock(X);
read_item(Y);
Y:= X+Y;
write_item(Y);
unlock(Y);
Transao T2
read_lock(Y);
read_item(Y);
read_lock(X);
read_item(X);
write_lock(X);
write_lock(Y);