Einfügen von Zeilen aus Excel im SQL Developer

Dass der SQL Developer ein großartiges Tool ist, dem ich womöglich verfallen wäre, wenn ich meine Seele nicht an sqlplus verkauft hätte, habe ich vielleicht gelegentlich schon mal erwähnt. Ein in entsprechender Situation sehr nützliches Detail zeigt Jeff Smith in einem aktuellen Blog-Eintrag: die Möglichkeit, Daten aus Excel per Copy&Paste im SQL Developer in eine Tabelle einzufügen. Das zumindest kann ich mit sqlplus nicht durchführen...

Implizite Typ-Konvertierung und Index-Zugriff

Das Thema wurde sicherlich schon in diversen Blog-Einträgen erläutert - ich war aber zu faul, um danach zu suchen. Außerdem wollte ich hier mal wieder ein kleines Code-Beispiel unterbringen.

Um was es geht, ist Folgendes: Oracle sieht großzügig über fehlerhafte Typ-Angaben bei den Einschränkungen von Abfragen hinweg und korrigiert sie stillschweigend via implizite Typ-Umwandlung. Grundsätzlich ist das eine nette Geste, aber natürlich bringt das Verhalten gelegentlich auf Probleme mit sich. Unter anderem gibt es Situationen, (more...)

Charles Hooper über Troubleshooting Oracle Performance

Zu meinen für das laufende Jahr ernsthaft ins Auge gefassten Vorsätzen gehört es, eine Besprechung zum zweiten Band der Poetik des Aristoteles ... - ich wollte sagen: zur zweiten Auflage von Christian Antogninis Standardwerk Troubleshooting Oracle Performance zu schreiben. Da ich dazu aber noch ein paar Vorarbeiten zu leisten habe - zu denen die Lektüre des Buches zählt... -, beschränke ich mich vorläufig auf einen Link auf die umfangreiche und detaillierte (ich könnte auch sagen: geradezu einschüchternde) Besprechung (more...)

Partitial Join Evaluation in 12c

Franck Pachot erläutert im dbi service Blog eine interessante Transformation, die in 12c eingeführt wurde: die Partial Join Evaluation (PJE). Diese Option erlaubt es dem Optimizer, einen Join, der eine distinkte Ergebnismenge liefern soll, intern in einen Semi-Join umzuwandeln und dadurch die Prüfung zu beenden, wenn ein erster Datensatz gefunden wird, der die Bedingung erfüllt. Seine Test-Query:
select distinct deptno,dname from dept join emp using(deptno)
wird in 11g über einen HASH JOIN mit folgendem HASH (more...)

Partion Views in 11.2

Zu den ersten Ergebnissen, die Google bei der Suche nach "Partition View" liefert, gehört Oracle7 Tuning, release 7.3.3. Jenes Release 7.3 wurde 1996 veröffentlicht und seit mehr als zehn Jahren wird man bei Oracle nicht müde zu betonen, dass die "Partition Views" als Feature deprecated sind - aber offenbar funktionieren sie auch in Release 11.2 noch immer, wie ich heute beim Durchspielen eines im OTN-Forum vorgestellten Beispiels feststellen konnte. Ich spare (more...)

SQL Plan Baselines und Parse Probleme

Jonathan Lewis erinnert in seinem Blog daran, dass Baselines keinen positiven Effekt auf Parse-Probleme haben: "The first thing that the optimizer does for a query with a stored sql plan baseline is to optimize it as if the baseline did not exist." In solchen Fällen sind SQL Profiles, SQL Patches oder einfache Query-Hints möglicherweise eine bessere Lösung.

Default-Werte für Datumsintervallendpunkte

Stew Ashton, der sich in seinem Blog in der Regel mit komplexen SQL-Queries beschäftigt, hält dort ein Plädoyer für den Verzicht auf NULL-Werte bei der Angabe der minimalen und maximalen Werte für Datumsintervalle. Stattdessen spricht er sich für die Verwendung der klassischen Minimal- und Maximalwerte aus, die durch den Oracle Datentyp DATE nahegelegt werden, also den 01.01.4712 B.C. (ich nehme an, das ist Oracles Version von der Erschaffung der Welt) und (more...)

Multi-Attribut-Vergleiche

Ein interessanter Hinweis von Jonathan Lewis, der auf eine Präsentation von Markus Winand bei den Trivadis CBO-Tagen zurückgeht (die ich mir auch gern angeschaut hätte, wenn ich mir dergleichen leisten könnte): in manchen RDBMS ist es möglich, mehrspaltige Vergleiche der folgenden Form durchzuführen:

where (col1, col2) < (const1, const2)

Die Logik dabei ist: das Prädikat liefert TRUE, wenn col1 < const1 ist, oder wenn gilt: col1 = const1, aber col2 < const2 (und NULL-Werte (more...)

Datenmodellierungsverfahren für das Core Data Warehouse

Wieder nur ein Link: aus dem Hause Trivadis stammt das white paper Comparison of Data Modeling Methods for a Core Data Warehouse, geschrieben vom Autorenteam Maren Eschermann, Adriano Martino und Dani Schnider (dem ich gelegentlich versprochen habe, seinen Namen nicht mehr falsch zu schreiben). Das Papier erläutert die folgenden Modellierungsverfahren:
  • Dimensional Core Modeling with dimensions and fact tables (basierend auf Kimballs Methodologie)
  • Relational Core Modeling with master data versioning
  • Data Vault Modeling with Hubs, (more...)

PDF über PL/SQL erzeugen

Zur Unterstützung meines unterstützungsbedürftigen Gedächtnisses: Morton Braten zeigt einige Möglichkeiten zur Erzeugung von PDF-Reports über PL/SQL.

Verwendung von SQL Server Query Hints

In der SQL Server Welt betrachtet man Query Hints offenbar ähnlich argwöhnisch wie im Oracle Umfeld - als "best pratice" gilt: man sollte sie vermeiden und alle Entscheidungen dem Optimizer überlassen. Thomas Kejser sieht das ein wenig anders:
For a complete novice of SQL Server, I would agree. But to call avoiding query hints a “best practise” is taking it too far. For anyone with a little experience who knows what they are doing, I (more...)

Rowsource-Statistiken nach Query-Abbruch

Ein nützlicher Hinweis von Randolf Geist im OTN-Forum:
one thing that is not so commonly known about the Rowsource Statistics is that *no matter how* the statement execution completed, the data will be available. So a long running query can be cancelled and the Rowsource Statistics will still be populated (but only after the statement execution stopped in some way). Usually the information then available is already good enough to tell why the execution takes (more...)

Autonomes Logging mit postgres

Im Rahmen von ETL-Operationen ergibt sich immer wieder die Situation, dass man eine Log-Message in ein ETL-Log schreiben möchte, ohne dadurch die eigentliche Transaktion per commit festzuschreiben, denn der Umfang der Transaktionen sollte nicht durch die Log-Einträge bestimmt werden. Da die Log-Nachricht im Fall eines Rollbacks der Transaktion ebenfalls zurückgerollt werden würde, kann man sich allerdings auch nicht auf den Abschluss der eigentlichen ETL-Operation verlassen. Zur Lösung dieses Problems bietet Oracle das Pragma Autonomous Transaction (more...)

NULL-Werte in Indizes

Jonathan Lewis hat in seinem Blog zuletzt zwei Artikel veröffentlicht, die sich mit der Speicherung von NULL-Werten in Indizes beschäftigen:
  • Bitmap Nulls: liefert ein kompaktes Beispiel für die Möglichkeit der Verwendung von Bitmap-Indizes bei der Einschränkung über ein IS NULL Prädikat: bekanntlich enthält ein B*Tree-Index keine Einträge für Datensätze, bei denen alle indizierten Spalten einen NULL-Wert enthalten - während im Bitmap Index ausnahmslos jeder Datensatz indiziert wird. Somit kann eine Bedingung column IS NULL im (more...)

Hadoop-Einführung für Oracle-Nutzer

Eine kompakte und gut verständliche Einführung zum Thema Hadoop for Oracle Professionals hat Arup Nanda veröffentlicht, der darin diverse BigData-Termini und -Konzepte in die Sprache eines RDBMS-Benutzers übersetzt. 

Interpretation von AWR Reports

Ich behaupte zwar bisweilen allerlei - aber nicht, ein Experte auf dem Gebiet der Interpretation von AWR-Reports zu sein. Normalerweise schaue ich fast ausschließlich auf die Query-Abschnitte. Aber wenn ich eine detaillierte Interpretation eines AWR-Reports durchführen müsste, dann würde ich mich an der von Jonathan Lewis in seinem Blog erstellten Link-Sammlung orientieren. Eine hübsch gestaltete einführende Präsentation zum Thema gibt's von Franck Pachot.

Bestimmung der Log-Writer-Aktivität mit strace

Craig Shallahamer zeigt in einem Artikel und einem zugehörigen Mini-Video (Laufzeit 3:11 min) mit Hilfe eines strace-Aufrufs, dessen Ergebnisse er in eine Log-Datei schreiben lässt, dass der log-Writer-Prozess LWGR auch in 12c in einem beschäftigungslosen System alle drei Sekunden aufgeweckt wird, um zu prüfen, ob es etwas zu erledigen gibt. Im Trace-File findet sich regelmäßig ein Aufruf der Semaphoren-Operation semtimedop, die dazu dient einen Prozess für eine bestimmte Zeit in den sleep-Modus zu versetzen, sofern (more...)

Neue Auflage für Troubleshooting Oracle Performance

Eines der besten Bücher zum Thema "Oracle Performance" ist Christian Antogninis Troubleshooting Oracle Performance, dessen zweite Auflage dieser Tage erschienen ist. Offenbar handelt es sich um eine recht umfangreiche Überarbeitung, weshalb ich davon ausgehe, dass sich die Anschaffung auch für Käufer der ersten Auflage noch einmal lohnt.

Flame Graphs zur Analyse der Entwicklung des Oracle Optimizer

Luca Canali kombiniert in seinem Artikel Oracle Optimizer Investigated with Flame Graphs die von Brendan Gregg entwickelte Visualisierungstechnik der Flame Graphs mit den von Tanel Poder zusammengetragenen Informationen zur stack trace Analyse im Rahmen des Troubleshootings in Oracle Datenbanken. Dabei zeigt er anhand eines überschaubaren Beispiels die unterschiedlichen Graphen, die sich für eine Query ergeben, die zunächst mit dem rule based optimizer (RBO), dann mit dem cost based optimizer (CBO) der Version 11 und schließlich (more...)

Details zu dbms_space.space_usage

Man lernt eine Menge, wenn man versucht, anderen Anwendern die Arbeitsweise interner Oracle-Mechanismen zu erklären. Noch mehr lernt man, wenn Jonathan Lewis die Erläuterungen redigiert, die man beigesteuert hat.

Im OTN-Forum wurde dieser Tage die Frage gestellt, auf welcher Datengrundlage die Prozedur dbms_space.space_usage ihre Aussagen zum Füllgrad von Tabellen-Blocks generiert. Da ich darauf nicht unmittelbar eine Antwort wusste und eine halbherzige Google-Suche keine Ergebnisse brachte, habe ich ein SQL Trace (Event 10046) erstellt und (more...)