Por que DBMS_MVIEW.UPDATE ter uma implícita cometer?
-
06-07-2019 - |
Pergunta
Eu observei recentemente que chamar DBMS_MVIEW.UPDATE (...), que refresca visualizações materializadas em Oracle, tem uma implícita cometer.
Todas as idéias - que não seja "porque ele faz?" - porque esta ação tem cometer um implícito
Solução
Dependendo da sua versão Oracle e / ou os parâmetros que você fornecer DBMS_MVIEW.UPDATE pode estar fazendo um TRUNCATE seguido por uma carga direta. TRUNCATE é um comando DDL e, como tais questões cometer um implícito. carga direta não requer uma confirmação.
Se você estiver usando uma versão mais recente da Oracle, eu acho 10.2+, você pode definir o parâmetro atomic_refresh para TRUE e vai refrescar em uma única transação, usando / inserções de DELETE padrão. Este método poderia ser um pouco mais lento embora.
Outras dicas
De acordo com Tom Kyte é porque uma decisão foi tomada em tempo de design a considerar refrescante para ser um operação DDL. Desde todas as operações DDL cometer implicitamente, o mesmo acontece com este. Infelizmente ele não responder à pergunta resultando de por que eles escolhem para torná-lo DDL.
Um espalhados trabalho é fazer a chamada para DBMS_MVIEW.UPDATE em uma transação autônoma (criar um procedimento PL / SQL com autonomous_transaction pragma).