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.
Idealmente, as transações devem ser serializáveis. Diz-se que as transações são serializáveis se os resultados da execução simultânea forem os mesmos que os resultados da execução serial – ou seja, uma após a outra. Não é importante qual transação é executada primeiro, apenas que o resultado não reflita qualquer mistura das transações.
Por exemplo, suponha que a transação A multiplica os valores dos dados por 2 e a transação B soma 1 aos valores dos dados. Agora suponha que existem dois valores de dados: 0 e 10. Se estas transações forem executadas uma após a outra, os novos valores serão 1 e 21 se a transação A for executada primeiro, ou 2 e 22 se a transação B for executada primeiro. Mas e se a ordem em que as duas transações são executadas for diferente para cada valor? Se a transação A for executada primeiro no primeiro valor e a transação B for executada primeiro no segundo valor, os novos valores são 1 e 22. Se esta ordem for invertida, os novos valores são 2 e 21. As transações são serializáveis se 1, 21 e 2, 22 forem os únicos resultados possíveis. As transações não são serializáveis se 1, 22 ou 2, 21 for um resultado possível.
Então, porque é que a serializabilidade é desejável? Por outras palavras, porque é importante que pareça que uma transação termina antes do início da seguinte? Considere o seguinte problema. Um vendedor está a registar encomendas ao mesmo tempo que um empregado envia as faturas. Suponha que o vendedor insere uma encomenda da Empresa X mas não a compromete; o vendedor ainda está a falar com o representante da Empresa X. O funcionário solicita uma lista de todas as encomendas em aberto, descobre a encomenda da Empresa X e envia-lhes uma fatura. Agora o representante da Empresa X decide que quer alterar a encomenda, por isso o vendedor altera-a antes de comprometer a transação. A Empresa X recebe uma fatura incorreta.
Se as transações do vendedor e do empregado fossem serializáveis, este problema nunca teria ocorrido. Ou a transação do vendedor teria terminado antes do início da transação do empregado, caso em que o empregado teria enviado a fatura correta, ou a transação do funcionário teria terminado antes do início da transação do vendedor, caso em que o funcionário não teria enviado a fatura à Empresa X de todo.