Pular para o conteúdo

Fóruns Banco de dados Oracle Remover o auto commit nos comando dml Remover o auto commit nos comando dml

#103827
felipeg
Participante

    Olá,

    Partindo do princípio de conhecer a arquitetura do banco, não faria o mínimo sentido ter esta opção.

    Basicamente um DDL é composto de:
    BEGIN
    COMMIT;
    COMANDO DDL;
    COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK;
    RAISE;
    END;

    Por que o primeiro commit?
    Basicamente, para dar um “OK” em qualquer transação que a própria sessão tenha deixado em aberto, imagine o seu DDL lockado por causa de um delete que você não commitou?
    E também para garantir a integridade das informações até aquele ponto.

    E o segundo commit?
    Basicamente para salvar as alterações no dicionário de dados, afinal, você acaba de alterar a estrutura de um objeto que pode ser compartilhado por mais sessões, que podem inseriralterardeletar dados e quem podem, caso sua alteração não seja transparente, comprometer a integridade das informações.

    O problema aqui não está no banco e sim na forma como estes scripts ou como a aplicação é tratada, na minha humilde opinião, o melhor caminho é separar as alterações (DMLDDL) sempre que possível.

    A única maneira de você fazer isso dentro de uma mesma sessão é usando o Autonomous Transaction (que na verdade abre uma outra sessão), mas, novamente, não recomendo.

    Atenciosamente,
    Felipe.