Dieser Beitrag ist wieder über Slowly Changing Dimensions Type 2, betrachtet aber eine andere Fragestellung. Wie kann man die Erkennung der Änderungen validieren? Wenn wir mehrere Versionen derselben Daten haben, wie kann man prüfen, welche Felder sich von Version zu Version geändert haben? In Kundeprojekten, wo ich mit Systemen wie Siebel CRM gearbeitet habe, die in einigen Tabellen mehr als 500 Spalten haben, fand ich diese Möglichkeit oft sehr nützlich.
Natürlich kann man mit PL/SQL-Mitteln in einer Schleife über die Spalten ihre Werte vergleichen. Ich habe mich spaßeshalber gefragt, ob es auch in „pure SQL“ ginge – hier ist die Lösung. Weiterlesen
Schlagwort-Archive: trivadisContent
MERGE and ORA-30926 – Teil 2 oder Unterschiede bei der Schreibkonsistenz zwischen Merge und Update
Im ersten Teil haben wir gesehen, wie Oracle ein Merge-Statement drei Mal ausführt, wenn es zu einem ORA-30926-Fehler kommt. Um zu verstehen, was dabei eigentlich passiert, sollten wir das Verständnis für das Konzept hinter „update restarts“ oder auch manchmal „mini rollbacks“ genannt, auffrischen. Das Konzept ist sehr gut von Tom Kyte beschrieben: Teil I, Teil II and Teil III. Wenn der Begriff „write consistency“ für Sie unbekannt ist, empfehle ich sehr, ertsmal diesen Links zu folgen. Weiterlesen
MERGE and ORA-30926
Wenn Sie häufiger mal ein MERGE statment verwendet haben, dann kommt Ihnen der folgende Fehler wahrscheinlich bekannt vor: ORA-30926 – unable to get a stable set of rows in the source tables. Möglicherweise haben Sie auch gemerkt, dass die Abfrage in diesem Fall länger dauert. Dreimal länger, um genauer zu sagen, denn die ganze Abfrage wird drei Mal ausgeführt, wie die folgdenden Tests zeigen. Weiterlesen
Zusammenführen der Zeitintervalle mit MATCH_RECOGNIZE
Vor einiger Zeit hat mein Kollege Philipp Salvisberg ein paar interessante Beiträge zum Thema Joinen und Mergen der Zeitintervalle gepostet. Neulich war ich auf der Suche nach Anwendungsbeispielen für die neue MATCH_RECOGNIZE Klausel, die in der 12c Datenbank eingeführt wurde und fand heraus, dass die Abfragen damit deutlich vereinfacht werden.
Weiterlesen
Null Accepting Semi-Joins in 12c
Eine der neuen Optimierungstechniken, die im Query Optimizer 12c Einsatz finden, sind die sogenannten Null accepting semi-joins. Weiterlesen
Subquery Unnesting – wenn es mal nicht funktioniert
Eigentlich leistet der CBO bei den „NOT IN“ Subqueries meistens einen guten Job und generiert effektive Ausführungspläne.
Es sei denn, irgendwas geht schief. Neulich war ich in einer 10.2.0.5 Datenbank lange auf der Ursachenforschung und nur die CBO Trace-Dateien (Event 10053) haben mich letztendlich auf die richtige Spur gebracht. Aber eins nach dem anderen. Weiterlesen
BYE-BYE, BYPASS_UJVC!
Genau dieser Hint /*+ BYPASS_UJVC */ hat mir vor gut zehn Jahren bereits einen Denkzettel für den richtigen Umgang mit undokumentierten Hints in produktiven Umgebungen verpasst. Zugegeben, habe ich ihn seitdem für Ad-hoc-Datenmanipulationen trotzdem ein paar Mal benutzt. Nun sorgt ein seltsames Verhalten in der 11.2 Datenbank dafür, dass ich mir das Thema von „one-pass“ Join-Updates und die Alternative mit Merge nochmal anschauen wollte. Weiterlesen