SóProvas


ID
148333
Banca
FCC
Órgão
TRT - 16ª REGIÃO (MA)
Ano
2009
Provas
Disciplina
Banco de Dados
Assuntos

Um bloco de transações SQL é iniciado com BEGIN TRANSACTION e deveria executar três transações sequencialmente, porém, na segunda transação ocorre uma falha geral no sistema, o que executará

Alternativas
Comentários
  • Não entendi. :( . Alguém poderia explicar?
  • Cara... tipo ou as 3 transações que estão dentro do bloco begin transaction / end transaction são executadas ou nenhuma delas.
    Respeitando a propriedade da ATOMICIDADE!!!
  • Eu pensava que volteria para o início da segunda transação, já que ela foi executada, mas volta mesmo pro inicio do bloco. Blz, tá aprendido! :)
  • Para a operação voltar a partir da segunda transação seria necessário ter feito um COMMIT depois da primeira transação, mas isso não é falado explicitamente. Pegadinha...
  • Errei esta questão com convicção! Aí fui tentar entendê-la melhor, então a situação ficou ainda pior!. Ocorre o seguinte: as operações manipulam uma transação são:
    1- BEGIN-TRANSACTION: marca o início de uma transação;
    2- READ OU WRITE: especificam operações de leitura ou gravação em itens de bancos de dados;
    3- END_TRANSACTION: especifica que as operações de read e write terminaram.
    4- COMMIT: indica que as alterações efetuadas pela transação poderão ser efetivadas, pois elas já foram testadas e foram aprovadas;
    5- ROLLBACK: indica que as alterações efeturadas pela transação deverão se desfeitas, pois não foram aprovadas, algo deu errado.
    Em um plano de execução podem existir várias transações intercaladas. Nesse caso (intercaladas), por exemplo, um BEGIN_TRANSACTION de uma transação pode ocorrer, seguido de READs e WRITEs, uma outra transação inicia, executa seus READs e WRITEs etc. No final do plano de execução os COMMITs das várias transações podem ser executados. Se esse fosse o caso, até faria sentido o que afirma a questão, tendo em vista que expressamente nenhum COMMIT foi anunciado. Mas a questão diz explicitamente que as transações são SEQUENCIAIS. Eu entendi Isso da segunte forma: a primeira transação inicia e é efetivada (COMMIT), a segunda inicia e é efetivada, a terceira inicia e é efetivada, necessariamente nessa ordem. Portanto, concluo que se durante o processamento do plano (serial) citado na questão houve uma falha durante a segunda transação, a primeira transação já havia sido efetivada. Somente sendo executado o ROLLBACK da segunda transação.
    Não consegui ver o porquê da questão ter sido considerada correta.