SóProvas


ID
1395910
Banca
FGV
Órgão
PROCEMPA
Ano
2014
Provas
Disciplina
Banco de Dados
Assuntos

A ideia do uso da serialização (serializable isolation) para conflitos entre transações concorrentes em um banco de dados está baseada no aumento do throughput em ambientes em que a probabilidade de conflito é pequena.

Uma transação T1 serializável gera um erro de conflito quando há uma tentativa de

Alternativas
Comentários
  • O nível Serializable fornece o isolamento de transação mais rigoroso. Este nível emula a execução serial das transações, como se todas as transações fossem executadas uma após a outra, em série, em vez de simultaneamente. Entretanto, os aplicativos que utilizam este nível de isolamento devem estar preparados para tentar executar novamente as transações, devido a falhas de serialização.

    Quando uma transação está no nível serializável, o comando SELECT enxerga apenas os dados efetivados antes da transação começar; nunca enxerga dados não efetivados ou alterações efetivadas durante a execução da transação por transações simultâneas (Entretanto, o comando SELECT enxerga os efeitos das atualizações anteriores executadas dentro da sua própria transação, mesmo que ainda não tenham sido efetivadas). É diferente do Read Committed, porque o comando SELECT enxerga um instantâneo do momento de início da transação, e não do momento de início do comando corrente dentro da transação. Portanto, comandos SELECT sucessivos dentro de uma mesma transação sempre enxergam os mesmos dados.

    Os comandos UPDATE, DELETE e SELECT FOR UPDATE se comportam do mesmo modo que o comando SELECT para encontrar as linhas de destino: somente encontram linhas de destino efetivadas até o momento do início da transação. Entretanto, alguma linha de destino pode ter sido atualizada (ou excluída ou marcada para atualização) por outra transação simultânea no momento em que foi encontrada. Neste caso, a transação serializável aguarda a transação de atualização que começou primeiro efetivar ou desfazer as alterações (se ainda estiver executando). Se a transação que começou primeiro desfizer as alterações, então seus efeitos são negados e a transação serializável pode prosseguir com a atualização da linha original encontrada. Porém, se a transação que começou primeiro efetivar (e realmente atualizar ou excluir a linha, e não apenas selecionar para atualização), então a transação serializável é desfeita com a mensagem

    ERRO: não foi possível serializar o acesso devido a atualização simultânea

    porque uma transação serializável não pode alterar linhas alteradas por outra transação após a transação serializável ter começado.


  • Não entendi ainda  =/

  • Na questão, poderá ocorrer o erro independente do tipo de operação (leitura/escrita) da transação T1 (que é a serializável).

    O erro acontecerá se a transação concorrente (T2 e não a T1) efetivar seus comandos depois de T1 iniciar, porque se acontecer antes, os comandos já estão confirmados, não afetando as operações de T1.

  • Achei a redação das alternativas muito mal feita