Warum hat DBMS_MVIEW.REFRESH eine implizite begehen?
-
06-07-2019 - |
Frage
bemerkte ich vor kurzem, dass dbms_mview.refresh Aufruf (...), die materialisierte Ansichten in Oracle aktualisiert, hat eine implizite begehen.
Alle Ideen - anders als „weil es tut?“ - warum diese Aktion hat eine implizite commit
Lösung
Abhängig von Ihrer Oracle-Version und / oder die Parameter, die Sie dbms_mview.refresh liefern kann eine TRUNCATE durch eine direkte Belastung gefolgt tun. TRUNCATE ist ein DDL-Befehl und als solche Probleme ein implizite begehen. Direkte Belastung erfordert keine begehen.
Wenn Sie eine neuere Version von Oracle verwenden, glaube ich 10.2+, können Sie den atomic_refresh Parameter auf TRUE gesetzt und es wird innerhalb einer einzigen Transaktion aktualisieren, unter Verwendung von Standard DELETE / INSERTs. Diese Methode könnte jedoch durchaus etwas langsamer sein.
Andere Tipps