WITH-Clause Reloaded: Hierarchie und Rekursion

Vor ein paar Jahren hatte ich schon einmal über die “WITH-Klausel” geschrieben, als sie noch ein relativ unbekanntes SQL-Feature war.

Mittlerweile hat sich auch die Oracle-Welt weiter gedreht, und es sind neue Möglichkeiten seit 11g hinzugekommen — z.T. Features, die mit dem ISO-Standard SQL1999 schon etwa 10 Jahre zuvor verabschiedet wurden.

Zeit also, sich einmal wieder mit der Syntax der WITH-Clause zu beschäftigen und sie mit Oracles bisherigen, proprietären Lösungen zu vergleichen!

Weiterlesen

sqlplus, ezconnect, ORA-12504 und kein Passwort

Aus der Kategorie “Heute dazugelernt”: Beim Versuch, mittels EZCONNECT (s. “Easy Connect Naming Method“) unter Verwendung eines Wallets eine Verbindung aufzubauen (um kein Passwort auf der Kommandozeile/im Script zu hinterlassen), wurde das stets mit einem “ORA-12504″ quittiert.

[oracle@myorabox bin]$ sqlplus scott@localhost/orcl

SQL*Plus: Release 11.2.0.3.0 Production on Mon Feb 24 16:19:14 2014

Copyright (c) 1982, 2011, Oracle. All rights reserved.

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Seltsam — der Service “orcl” ist doch angegeben?! Werfen wir mal einen Blick ins listener.log:

(CONNECT_DATA=(SERVICE_NAME=)(CID=(PROGRAM=sqlplus)(HOST=myorabox)(USER=oracle))) * establish * 12504

Tatsache — der “SERVICE_NAME” ist leer.

Interessanterweise findet sich bei MOS nichts dazu, aber Mark Williams hat das Problem schon mal gelöst und netterweise gebloggt! Offenbar “verheddert” sich SQL*Plus am fehlenden “/” vor dem nicht übergebenen Passwort; Wird der Connect String jedoch in Anführungszeichen gesetzt, dann geht’s!

sqlplus scott@\"localhost/orcl\"

SQL*Plus: Release 11.2.0.3.0 Production on Mon Feb 24 16:31:38 2014

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

Hyperthreading in HP-UX aktivieren

Jan Karremans aus den Niederlanden erwähnte kürzlich in seinem Blog-Artikel “Can you boost your Oracle database performance on HP-UX for free?” ein Szenario, das auch mir schon untergekommen ist:

Wenn Hyperthreading in HP-UX (ia64) nicht aktiviert ist, zeigt sich das z.B. in “top” daran, dass die Numerierung der CPUs nicht fortlaufend sondern unterbrochen ist.

Da Oracle vom Hyperthreading profitiert, ist es sinnvoll es anzuschalten. Dies geht durch den Kernel-Parameter lcpu_attr, der per Default auf 0 steht, aber dynamisch geändert werden kann. Dazu sollten die Datenbanken auf dem betroffenen Server zuvor heruntergefahren werden.

Weitere Details im Original-Artikel (Englisch)

Daten blitzschnell nach CSV entladen mit dem Pro*C-unloader

Heute möchte ich auf ein altes, aber bewährtes Tool von Tom Kyte verweisen, das nach meiner Erfahrung weitgehend unbekannt oder unterbewertet ist, das aber extrem hilfreich ist, wenn man Daten aus Oracle mit bestmöglichem Durchsatz entladen will: Auftritt “unloader”!

Weiterlesen

JDBC, Linux und reiner Zufall

Manche Probleme — besonders die, die nur sporadisch auftreten — sind nicht so leicht zu diagnostizieren und erfordern einen tieferen Einstieg in die Materie. In diesem Praxisbeispiel bedeutet das: SQL*Net Tracing und Verständnis für die Funktionsweise des Betriebssystems, speziell die Generierung von Zufallszahlen.

Der vorliegende Fall eignet sich daher sehr gut, um eine Vorgehensweise beim Troubleshooting von Verbindungen zur Datenbank exemplarisch darzulegen.

Weiterlesen

Browser-Plug-ins erneuert (oerr, Oracle Docs 12c, OakTable Search)

Eine Kurzmeldung zum Wochenende: Ich habe die URLs der alten Oracle-Such-Plugins für Browser z.T. erneuert und drei neue hinzugefügt:

  • “oerr” für Oracle-Fehlermeldungen in der RDBMS-Version 12.1
  • “OraDoc” zur Suche in der Oracle 12.1-Dokumentation
  • “OakTable Search”: Die Web-Suche des OakTable Networks bietet eine vorgefilterte Suche zu Oracle-Themen im Web. Manche irrelevanten oder unerwünschten Websites werden dort weiter hinten in die Ergebnisse eingeordnet. Das ist natürlich eine subjektive Kategorisierung, ich selbst nutze die Suche aber gerne, um schneller an qualitativ gute Inhalte zu gelangen.

Die Plugins gibt’s  hier: http://www.searchplugins.net/pluginlist.aspx?nickname=Oraculix

Neues vom Clustering Factor

Richard Foote (der “Index-Guru”) hat auf seinem Blog in mittlerweile drei Artikeln Neues zur Berechnung des Clustering Factors (CF) verkündet:

  1. Erster Artikel: Ein Patch für Oracle 11.2 führt eine neue Option “TABLE_CACHED_BLOCKS” für die Berechnung mit DBMS_STATS ein. Dieser kann von 0-255 oder auf AUTO gesetzt werden und sorgt für eine Berücksichtigung von Caching-Effekten, die bislang nicht in die Berechnung des Clustering Factors eingegangen sind. Dadurch können unberechtigt zu hohe CFs deutlich reduziert werden, wenn die indizierten Rows innerhalb der nächsten n Blöcke der Zieltabelle liegen. n wird bei AUTO auf 1% der Tabellengröße in Blöcken gesetzt.
  2. Im zweiten Artikel geht Richard Foote auf Bedenken aus den Kommentaren zu Teil 1 ein, speziell die Bedenken, daß der CF nunmehr zu niedrig werden könnte. Ein ausführlicher Testfall mit einer großen Tabelle zeigt, daß hier selbst das Maximum von TABLE_CACHED_BLOCKS=255 keine gravierende Änderung zur Folge hat.
  3. Im dritten Artikel wird als Gegenbeispiel die maximale Einstellung auf eine kleine Tabelle angewendet und dargestellt, dass in solchen Fällen ein hoher Wert für TABLE_CACHED_BLOCKS, der nahe an der Anzahl an Datenblöcken der Tabelle liegt, kontraproduktiv sein kann.

Eine “Best Practice” wird sich wohl erst noch herauskristallisieren müssen. Meine persönliche Vermutung anhand der bislang diskutierten Testfälle geht dahin:

  • TABLE_CACHED_BLOCKS = AUTO als DB-weite Einstellung
  • Wo es dann immer noch Probleme mit einem zu hohen CF gibt, Objekt-spezifische Einstellung dieser Option.

Weiterlesen