Seit Oracle 9i gibt es die Möglichkeit anzugeben, ob die Datenbank die Längenangabe bei CHAR und VARCHAR2 als Byte oder als Zeichenanzahl interpretiert. Dies bezeichnet man als Character Length Semantics. Wozu dient die Angabe und welche Auswirkungen hat sie?
Gerade bei größeren Abfragen ist es immer sinnvoll, Text zu "sparen“, wenn dies ohne zu große Komplexität und Performance-Einbußen möglich ist. Bis einschließlich 19c konnte man dies hauptsächlich über PL/SQL-Funktionen und Views in SQL abbilden. Hierbei funktionieren Views nur auf Tabellenebene und klassische PL/SQL-Funktionen führen in der Regel zu einem Kontext Switch. Mit dem in 20c hinzugekommenen SQL Macros gibt es hier nun eine weitere Möglichkeit.
Die FOR-Schleife in Oracle war bisher im Vergleich zu anderen Sprachen recht begrenzt in ihren Möglichkeiten. Mit Version 21c hat sich das drastisch geändert. Die neue Version bringt eine Menge an Erweiterungen. In diesem Tipp soll die neue Vielfalt anhand einfacher Beispiele erläutert werden.
Es gab und gibt Beschränkungen, mit denen man immer wieder klarkommen muss. Die ein oder andere davon entfällt aber auch im Laufe der Jahre, was einem möglicherweise im Alltag entgeht. Dieser Tipp möchte ein paar kleine aber feine Neuerungen aus den Versionen 12.2 und 18c herausgreifen, die vor allem Entwickler interessieren dürften.
Muniqsoft Consulting unterstützt ihre Kunden bei allen Belangen rund um die Oracle Datenbank. Auch mit speziellen Themen, die grundsätzlich nicht zu den typischen DBA-Aufgaben gehören wie z. B. „Oracle Text“, sind wir vertraut. Dieser Tipp beschreibt den Lösungsweg eines Problemfalls, der bei einem Kunden aufgetreten ist. Wenn Sie bereits grundlegende Kenntnisse mit „Oracle Text“ haben, dann springen Sie bitte direkt zu Punkt 3. Für die anderen Leser erklären wir zuerst, was „Oracle Text“ ist und wie man damit umgeht. Unter dem letzten Punkt finden Sie Links auf weitere von uns verfasste Artikel zum Thema „Oracle Text“.
Records sind in PL/SQL geläufiger als Objekttypen. Nur das Handling war bisweilen etwas mühsam, da jedes Feld einzeln zugewiesen werden musste. Da wünschte man sich doch gelegentlich etwas Analoges zum Konstruktor bei Objekttypen. Mit Version 18c geht dieser Wunsch nun in Erfüllung. :)
Webservices sind aus der modernen Welt des Datenaustausches nicht mehr wegzudenken. Und so haben Aufrufe auch vermehrt Einzug gehalten in PL/SQL-Routinen. Dieser Artikel soll eine kleine Übersicht über Aufrufvarianten via UTL_HTTP geben.
Das JSON-Format (JavaScript Object Notation) erfreut sich zunehmender Beliebtheit, da es im Vergleich zu XML wesentlich weniger Overhead hat. Ausserdem ist es einfacher; es kennt im wesentlichen nur Wertepaare und Arrays. Diese können hierarchisch aufgebaut sein und entsprechen der Javascript-Notation.
In diesem Tipp zeigen wir eine Möglichkeit zur Bewertung verschiedener potentieller Gefahren in der Oracle Datenbank, welche individualisiert überprüft werden können. Da wären SQL Injection-anfällige Eingaben oder auch die Gefährlichkeit der Rechte bzw. Rollen von Datenbanknutzern.
Wie oft möchte man den einen oder anderen Netzwerkparameter aus den Dateien tnsnames.ora, listener.ora oder sqlnet.ora von einem Unix Server auslesen?...Was also tun?
In PL/SQL empfiehlt es sich aus vielen Gründen, mit statischem SQL zu arbeiten, soweit das möglich ist; genannt seien hier vor allem Wartbarkeit und Performance-Vorteile.
Manchmal umfassen Applikationen nicht nur viel Quelltext, sondern auch sehr viele Views, in denen u. a. auch Funktionen aus diversen Packages verwendet werden.
Ein Kollege wollte kürzlich wissen, wie man das Statement eruieren könnte, das nachts für den folgenden Eintrag im Alert.log der Datenbank sorgte: ORA-1652...
Der SQL Developer als Oracle-proprietäres Tool erfreut sich mittlerweile großer Beliebtheit. Entwickler, die den SQL Developer auch zum Debuggen nutzen, werden bei 12c-Datenbanken jedoch erst einmal eine neue Hürde überwinden müssen.
Wer je Daten für eine Web-Applikation bereitstellen musste, kennt das Problem der Pagination. In der Regel holt das Frontend ja nur die Daten, die auf eine Seite passen, und erst wenn mehr angefordert werden, werden auch mehr geholt.
Die Heat Map zeichnet auf Blockebene den Datenzugriff und die Veränderungshäufigkeit auf.
Mit diesem Wissen kann man Daten, die selten verwendet oder verändert werden, an Ort und Stelle komprimieren und auf einen anderen Tablespace (auf ein langsameres und billigeres Medium) verschieben.
Im folgenden Tipp zu Neuerungen in Oracle 12c beschäftigen wir uns mit der Verschleierung bzw. Maskierung von Daten über das Package DBMS_REDACT.
Beachten Sie bitte, dass diese Funktion nur in der Enterprise Edition mit Advanced Security Option verwendet werden darf.
Ein Beispiel, das sich dazu nahezu aufdrängt, sind Kreditkartennummern, die nicht in ihrer vollen Schönheit in einem Report ausgegeben werden sollen. Wir erstellen also eine kleine Tabelle für die Kreditkarteninfos:
Der Export von Tabellen als csv-Files ist immer wieder ein Thema in unseren PL/SQL- und Packages-Kursen, weil die meisten gerne mit Excel arbeiten. Deshalb gebe ich unseren Teilnehmern immer eine einfache Prozedur mit, über die man Inhalte beliebiger Tabellen (solange sie keine LOB-Spalten oder ähnliches enthalten) mittels UTL_FILE als semikolon-separierte Ascii-File exportieren kann. Der Einsatz von UTL_FILE ist nicht der schnellste Weg, aber man kann diese Prozeduren sehr gut in Datenbank-Jobs einbinden oder für andere PL/SQL-Programme verwenden.
Vor einiger Zeit habe ich eine Verbindung zwischen einer Oracle Datenbank Standard Edition 11.2 und einer MySQL Datenbank hergestellt. Nach Einrichtung des Gateways hat das auch soweit funktioniert.
Der Result Cache ist ein - leider auf die Enterprise Edition beschränktes - Feature, das mit Version 11g eingeführt wurde. Er ist sowohl in SQL für Select-Befehle als auch in PL/SQL für Funktionsaufrufe nutzbar. Die Idee dahinter ist in beiden Fällen, dass das Ergebnis bei der ersten Ausführung gespeichert wird und bei weiteren Aufrufen der Befehl selber nicht mehr ausgeführt, sondern das Ergebnis aus dem Cache abgerufen wird. Um Tom Kyte zu zitieren: "Everyone knows the fastest way to do something is – to not do it".
Der Vergleich und die Synchronisation von Tabellen waren schon einmal Gegenstand eines Monatstipps im Mai 2009. Damals beschränkte sich der Vergleich jedoch auf bis zu 4 Spalten. Die hier vorgestellten Packages für Oracle 10g und 11g ermöglichen den Vergleich aller Spalten.
Mit Version 11.2.0.2 wurde das altbekannte Package UTL_SMTP erweitert. Die wichtigste Neuerung liegt darin, dass jetzt auch SSL-verschlüsselte Mails verschickt werden können. Daneben wurde die Authentifizierung am Mailserver vereinfacht, dafür gibt es jetzt einen eigenen Aufruf.
Bereits seit der Version 10.1 kann man mit einer (undokumentierten) Funktion den Inhalt von Betriebssystemordnern auslesen. Diese Prozedur wird vom RMAN bei folgendem Befehl verwendet:
Mit Version 11g Release 2 wurde ein sehr nützliches Feature zur Überwachung von Datenbank-Jobs eingeführt: die automatische Mailbenachrichtigung. Die Einrichtung ist denkbar einfach: Zunächst muss ein Administrator den zu verwendenden Mailserver einmalig konfigurieren.
Um den Inhalt von Tabellen in XML-Files zu überführen, gibt es eine ganze Reihe von Möglichkeiten, u.a. die Verwendung der SQL-XML(SQLX)-Funktionen wie XMLElement, XMLAgg, XMLForest etc., das Package DBMS_XMLGen und die Erzeugung von XML-Daten über das sog. DBUriServlet. In diesem Monatstipp sollen die beiden letztgenannten Methoden kurz vorgestellt werden...
Seit Jahren stellt sich mir immer wieder das gleiche Problem: Wie kann ich eine Aktion x-Mal in der Datenbank ausführen? z.B. Wie kann ich 100 Indizes in einen anderen Tablespace verschieben? Bisher war meine Lösung immer:
Die häufigsten Einsatzfälle dürften sein: eine Suche unabhängig von Groß-/Kleinschreibung zu machen, indem man einen Index auf UPPER(spalte) legt, oder - normalerweise nicht indizierte - NULL-Werte für die Indizierung zugänglich zu machen durch NVL(spalte, ...).
In einem<link http: www.muniqsoft.de tipps monatstipps jahr-2002 maerz-2002.htm internal-link> früheren Beitrag<link http: www.muniqsoft.de tipps monatstipps jahr-2002 maerz-2002.htm internal-link> wurde das Tracing einer Datenbank-Session bereits generell beschrieben, daher soll hier nicht näher auf die Grundlagen eingegangen werden. Neben den dort vorgestellten Methoden gibt es seit Version 10g noch das Package DBMS_MONITOR, das diverse Möglichkeiten zum Tracing bietet.
Seit der Version 7 bietet Oracle die Möglichkeit der Volltextsuche. Die frühen Optionen mußten noch separat installiert werden und in der Oracle -Version 8i war die Textsuche in das kostenpflichtige Zusatzmodul interMedia integriert. Seit Version 9i ist Oracle Text jedoch fester Bestandteil der Datenbank, auch in der Express Edition.
Jeder hat schon mal von den LOB-Datentypen gehört, die für die Speicherung von großen Textdateien bzw. binären Dateien geeignet sind. In der Oracle Datenbankversion 10g können sie Daten bis zu 128 Terabyte pro Feld aufnehmen ((4GB-1) * DB-Blockgröße). Das Einfügen von Bildern in Tabellen ist allerdings nicht über einfachen Insert möglich, sondern nur über PL/SQL-Prozeduren und das Package DBMS_LOB.
Es gibt eine ganze Reihe von Tools zum Vergleich einzelner Oracle-Datenbankobjekte oder ganzen Schemata auf dem Markt (einige der meistgenannten sind in [1] zusammen gefasst). Viele dieser Tools vergleichen aber nicht die Inhalte, sondern nur die Definitionen der Datenbankobjekte.
Sie wollten schon häufiger Datenbankdateien von einem Server A auf den Server B kopieren und waren aber gerade nicht in der Lage sich lokal mit einem der Server zu verbinden und anschließend den anderen zu mounten? Oder es war Ihnen schlichtweg zu umständlich? Dann haben wir hier vielleicht eine ganz praktische Lösung für Sie.
In diesem Tipp des Monats schauen wir uns mal die Speicherbelegung der Tabellen und Indizes an. Es gibt zwar seit Version 10g einen Advisor, der einem die Speicherbelegung der Segmente anzeigt; wir wollen hier aber eine Ausgabe in Tabellenform für mehrere Objekte erzeugen. Wie heißt es so schön: Es gibt kaum eine Information, die man nicht aus einer Oracle-DB herausholen kann, man muss nur die richtige (Öl)-Quelle anzapfen.
Viele Applikationen verwenden die Möglichkeiten zur Mailversendung aus Oracle heraus, sei es mit UTL_SMTP, sei es mit UTL_MAIL. Bis Version 10g reichte es, wenn der Eigentümer der Sende-Prozedur das EXECUTE-Recht auf das jeweilige Package hatte. Soll auf 11g migriert werden, so erfordert dies einen zusätzlichen administrativen Aufwand.
Es kommt immer wieder vor, dass bei einem DML-Trigger für Überprüfungen oder Protokollierungen Daten aus der zu ändernden Tabelle benötigt werden. Ein normaler Row Trigger scheidet dann in der Regel aus, weil man sonst in das Problem mit den Mutating Tables läuft...
Bereits seit Version 9.2 ist es prinzipiell zulässig, Collections für Bulk DML zu verwenden, die als Datentyp einen Record haben. Sinnvolle Einsatzmöglichkeiten dafür gab es aber nur beim INSERT-Befehl, da der Record nur als Ganzes angesprochen werden durfte, aber nicht einzelne Felder daraus. Das bedeutete: Wollte man aus Performance-Gründen mit Bulk Update oder Delete arbeiten, musste man (auch in 10g) für jede einzelne Spalte eine eigene Collection befüllen.
Wir hatten vor kurzer Zeit in einem Projekt das Problem, einen Ref Cursor auszuwerten, von dem nicht bekannt war, wie viele Spalten er zurückliefert. Dies ist aber notwendig, um eine entsprechende Anzahl an Parametern (bzw. Records/Arrays) zu definieren.
Oracle bietet ab Version 8i die Möglichkeit, aufgrund von bestimmten Sessionkriterien den Zugriff auf bestimmte Daten einzuschränken (Application Context). Dadurch können viele statische Views eingespart werden.
Haben Sie sich auch schon mal gewünscht, dass SQL*Plus einen Monat als schönen Kalender darstellt? Mit der folgenden Funktion können Sie sich den aktuellen Monat (Default) oder einen beliebig anderen Monat anzeigen lassen
Reports in Application Express basieren in der Regel auf einem Select-Befehl. Gelegentlich kommt es aber vor, dass man die Werte in Form eines Arrays vorliegen hat und diese als Report anzeigen will. Was tun?
Dynamische Selects zu schreiben ist dank Ref Cursoren mittlerweile ziemlich einfach geworden. Was aber tut man, wenn man die Spaltenliste des Select-Befehls nicht kennt?
Hatten Sie auch schon einmal das Problem, dass Sie einen Datensatz gesucht haben, aber nicht wussten, in welcher Spalte dieser steht? Wir haben noch eines drauf gesetzt und können sogar Werte suchen, von denen man nicht weiß, in welcher Tabelle sie stehen.
Bis zur Version9i waren nur folgende Operationen zum Reorganisieren von Tabellen möglich: Tabelle exportieren (evtl. mit COMPRESS=Y) Tabelle löschen, Tabelle evtl. mit neuen Speicherparametern anlegen,Tabelle importieren,Ab Version 8i wurde folgende Operation ermöglicht:
Mit Version 10g hat Oracle UTL_MAIL herausgebracht, ein neues Package, das wesentlich mehr Anwendungskomfort bietet. Für die Versionen 10.1.x ist jedoch eine ganze Reihe von Bugs beschrieben, die spätestens in Version 10.2. behoben wurden, so dass UTL_MAIL erst ab dieser Version zu empfehlen ist.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklärst du dich damit einverstanden, dass wir Cookies verwenden.