SóProvas


ID
1902508
Banca
FGV
Órgão
IBGE
Ano
2016
Provas
Disciplina
Banco de Dados
Assuntos

Algumas das mais importantes implementações de bancos de dados relacionais dispõem do comando TRUNCATE para remover registros de uma tabela.

Considere as seguintes opções para remover registros de uma tabela T:

I. Usando o comando DELETE;

II. Usando o comando TRUNCATE;

III. Removendo a tabela T e executando um comando CREATE TABLE para recriá-la em seguida.

Sobre essas opções, é correto afirmar que:

Alternativas
Comentários
  •                                            DELETE             -     TRUNCATE

    Command Type:                    DML               -    DDL

    Where Condition:               support             -    does not support

    Transaction Log:        for each delete row  -  one log indicating deallocation of page

    Performance(Speed of execution):  slow  -  much faster then Delete

  • No SQL Server, o camando TRUNCATE permite ROLLBACK!!!

  • O Fabiano está certo: o comando truncate permite rollback, sim.
    Essa história de que truncate não permite rollback é um velho e conhecido MITO.

     

    A alternativa "menos errada" é a "D", mas ainda assim não está certa.
    Essa questão deveria ter sido anulada, mas acho que ninguém entrou com recurso, então... ficou por isso mesmo.

  • Prezados,

    O comando DELETE e o comando TRUNCATE têm finalidades semelhantes, entretanto o TRUNCATE normalmente é mais rápido, porém não permite operação de ROLLBACK.

    Fonte : https://docs.oracle.com/cd/B28359_01/server.111/b2...

    Portanto a alternativa correta é a letra B.

  • Penso que ele quiz priorizar a questão da rapidez de como é feito o TRUNCATE, mas realmente a questão do ROLLBACK caberia recurso!

  • a) as três equivalem-se quando todos os registros são removidos, pois tomam o mesmo tempo de execução e seus efeitos colaterais são os mesmos; ERRADA - delete consome mais tempo do que o truncate

     b) a opção II é geralmente mais rápida, mas tem a desvantagem de não permitir rollback; ERRADA, o truncate é mais rápido que o delete, mas permitir ou não rollback depende da implementação do SGBD

     c)  a opção III é sensivelmente mais rápida, pois não é necessário gravar novas entradas nos arquivos de log; ERRADA: Novamente: existir ou não Rollback depende do SGBD

     d) as opções II e III são plenamente equivalentes, pois a implementação do comando TRUNCATE faz exatamente o que seria feito na opção III; ERRADA: O Truncate não deleta e recria a tabela, apenas apaga os dados e libera as páginas ocupadas

     e) a opção II somente é mais lenta que as demais quando nem todos os registros de tabela devem ser removidos. ERRADA: Truncate é mais rápido que o delete

    Portanto: Questão furada! 

  • Eu acho que vcs poderiam pelo menos citar a fonte das afirmações que vcs fazem.

    Segundo[1], ocasionalmente, os usuários tentam excluir todos os registros de uma tabela de só uma vez. Quando eles encontram erros durante esse processo, reclamam que os segmentos de rollback são muito pequenos quando, de fato, suas transações são muito grandes.

    Um segundo problema ocorre quando todos os registros foram excluidos. Mesmo que o segmento não tenha mais nenhum registro, ele continua a manter todo o espaço que foi alocado a ele. Portanto, excluir todos esses registros não economiza um único byte de espaço alocado. O comando truncate resolve esses dois problemas. É um comando DDL, não um comando DML, portanto, ndo pode ser revertido.

    O comando truncate é a maneira mais rápida de excluir grandes volumes de dados.

    Fonte:

    [1] Oracle Database 10g - Manual Do Dba, KEVIN LONEY, BOB BRYLA