Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.

Kategorie "Oracle"

01. Jul 2009
Teaser

Oracle: Kalenderwoche (KW) in Datum umrechnen

In Oracle kann aus einer Kalenderwoche (KW) einfach das Startdatum und Enddatum berechnet werden:

SELECT 
  TRUNC(TO_DATE('25112009', 'DDMMYYYY'), 'IYYY') + (26 - 1) * 7 AS date_from,
  TRUNC(TO_DATE('25112009', 'DDMMYYYY'), 'IYYY') + (26 - 1) * 7 + 6 AS date_to
FROM sys.dual;

Das Beispiel gilt für die Woche 26/2009. Für andere Kalenderwochen ändern Sie bitte beide Werte “26” im SQL Statement in Ihre gewünschte Woche um. Das Jahr (im Beispiel “2009”) ggf. ebenfalls angepasst werden.

Das folgende Beispiel zeigt Ihnen den Aufbau der Query:

SELECT 
  TRUNC(TO_DATE('2511[Jahr]', 'DDMMYYYY'), 'IYYY') + ([KW] - 1) * 7 AS date_from,
  TRUNC(TO_DATE('2511[Jahr]', 'DDMMYYYY'), 'IYYY') + ([KW] - 1) * 7 + 6 AS date_to
FROM sys.dual;

Dabei ist das Datum im SQL Befehl (hier der 25.11.) unwichtig.

27. Mai 2009
Teaser

Oracle: Stored Procedures auflisten

Mit dem folgenden SQL Script können Sie alle in der Datenbank gespeicherten Stored Procedures (SP) auflisten:

select * from user_procedures
25. Mai 2009
Teaser

Oracle: Beschreibung (Aufbau) einer Tabelle per SQL Befehl

Mit dem Befehl

desc Muster

wird Ihnen der Aufbau der Tabelle “Muster” angezeigt.
Folgende Daten werden als Liste angezeigt:

  • Table
  • Column
  • Datentyp
  • Länge
  • Gesamtstellenzahl
  • Anzahl Nachkommastellen
  • Primärschlüssel
  • Auf Null setzbar
  • Standard
  • Kommentar
10. Apr 2009
Teaser

Oracle: Zahl mit führenden Nullen

Wenn Sie eine Zahl mit führenden Nullen auffüllen möchten, nutzen Sie folgenden Befehl:

select to_char(zahlfeld, '0000000')

Würde als Beispiel im Feld “Zahlfeld” eine 2 stehen, erhalten Sie 000002.

05. Apr 2009
Teaser

Oracle: sqlplus mit Benutzernamen & Passwort starten

Wenn Sie unter Oracle das SqlPlus Programm als sysdba (Datenbank-Administrator) starten möchten, dann nutzen Sie folgende Befehle:

Bei Oracle 8.0 (Clientversion):
sqlplus 'sys/oracle@datenbank as sysdba'
Bei Oracle 8i: (Meist geht auch die Eingabe wie unter Oracle 8.0)
sqlplus \"sys/oracle@datenbank as sysdba\"
Bei Oracle 9i:
sqlplus "sys/oracle@datenbank as sysdba"
02. Apr 2009
Teaser

Oracle: Performance von Sortierungen messen (In-Memory Sort Ratio)

Mit dem folgenden SQL Befehl können Sie auf Ihrer Oracle Datenbank prüfen, wie der “In-Memory Sort Ratio” auf Ihrem Datenbankserver ist:

SELECT a.value/(b.value + a.value) "Sort Ratio"
FROM v$sysstat a, v$sysstat b
WHERE a.name = 'sorts (memory)'
AND b.name = 'sorts (disk)'

Ihnen wird als Ergebnis eine Zahl angezeigt.

Bei gut optimierten Datenbanken liegt der “In-Memory Sort Ratio” über 0,95 (also 95%).

Im Beispiel würde es bedeuten, dass mehr als 95 % sämtlicher Sortieraktionen im Hauptspeicher stattfinden.

01. Apr 2009
Teaser

Oracle: MERGE Beispiel

Um Daten automatisch entweder in die Tabelle einzufügen oder upzudaten, können Sie den MERGE Befehl von Oracle nutzen. Im folgenden PHP-Beispiel wird die Nutzung verdeutlicht. Dabei ist zusätzlich eine automatische Löschung des Datensatzes eingebaut, wenn kein Benutzername übergeben wurde (Erklärung s.u.):

foreach ($users as $id => $username) {
  if (empty($username))
    $sql = "DELETE FROM users WHERE id = $id";
  else {
    $sql = "MERGE INTO users U
            USING dual ON (dual.dummy is not null and U.id = $id)
            WHEN MATCHED
              THEN UPDATE SET name = $username
            WHEN NOT MATCHED
              THEN INSERT (id, name) VALUES ($id, $username)";
  }
}

Als SQL Beispiel:

MERGE INTO users U
USING dual ON (dual.dummy is not null and U.id = 10)
WHEN MATCHED
  THEN UPDATE SET name = 'Max Muster'
WHEN NOT MATCHED
  THEN INSERT (id, name) VALUES (10, 'Max Muster')

Das Script sucht nach dem Benutzer mit der ID “10”. Wird er gefunden, dann wird der Name per UPDATE geändert. Wird der Eintrag nicht gefunden, dann wird per INSERT ein entsprechender Datensatz angelegt.

Bei Fragen oder Anmerkung schreiben Sie uns gerne einen Kommentar.
Wir freuen uns auch über Einträge, wenn Ihnen dieser Artikel half.

31. Mrz 2009
Teaser

Oracle: Optimierung von SQL Befehlen durch entfallende Sortierungen

Die folgenden Oracle Befehle lösen (je nach Umfang aufwändigere) Sortierungen aus:

  • ORDER BY
  • GROUP BY
  • SELECT DISTINCT
  • CREATE INDEX
  • ANALYZE
  • UNION
  • INTERSECT
  • MINUS
  • JOIN
    Nur Joins von Tabellen mit nicht indexierten Spalten

Bei großen Datenmengen können diese Befehle / Optionen so aufwändig werden, dass Sie mehrere Sekunden bis Minuten nur wegen der Sortierung warten. Kombinieren oder kapseln Sie diese Befehle noch, vervielfacht sich der Rechenaufwand für den Datenbankserver und die performance sinkt dementsprechent stark.

Um die Performance zu verbessern, können Sie folgende Maßnahmen umsetzen:

  • Sortiervorgänge vermeiden
    Das Vermeiden der Sortiervorgänge ist die erste (und beste !) Maßnahme.
    Die folgenden Punkte geben einige Hinweise, wie Sie Sortiervorgänge vermeiden können:

    • Benutzen Sie UNION ALL anstelle von UNION (nicht immer möglich)
    • Indizieren Sie alle Tabellen (Felder), die Sie in einer Join-Operation verwenden
    • Spalten, die Sie in ORDER BY und GROUP BY Funktionen verwenden, sollten mit einem Index versehen werden
    • Benutzen Sie den COMPUTE Befehl für die Analyse von Tabellen und Indizes
  • Vergrößerung der Sort Area
    Seit Oracle9i ist der Initialisierungsparameter “PGA_AGGREGATE_TARGET” verfügbar. Dieser legt fest, wie viel Hauptspeicher in der PGA für alle Serverprozesse der Instanz zur Verfügung gestellt wird. Oracle versucht dabei, dass die Größe des Private Memorys nicht über diese Größe hinaus anwachsen zu lassen.
    Um diesen Parameter festzulegen bestimmen Sie bitte, wieviel Hauptspeicher der Oracleinstanz zur Verfügung steht. Subtrahieren Sie davon die Größe der SGA. Den Rest können Sie im Parameter PGA_AGGREGATE_TARGET festlegen.
    Hinweis:
    Seien Sie bei der Definition der Sort Area Größe vorsichtig !
    Beachten Sie, dass eine Sort Area pro Benutzer angelegt wird. Bei 1000 Benutzern und einer Sort Area Größe von einem MB wird ca. ein GB Hauptspeicher belegt – wenn alle Benutzer gleichzeitig sortieren sollten.

Beachten Sie auch unseren Artikel zur Messerung der Sortierperformance.

26. Mrz 2009
Teaser

Oracle: Monat aus einem Datum extrahieren

Um aus einem Datum den Monat zu erhalten, hilft der folgende Oracel SQL-Befehl:

to_number(to_char(Datumfeld, 'n'))

Beispiel:
Möchte man wissen, ob das Datum im Feld “Startdatum” im August liegt:

to_number(to_char(Startdatum, 'n')) = 8
19. Mrz 2009
Teaser

Oracle: Create Tablespace

Um Tablespace auf einem Oracle System anzulegen, nutzen Sie folgenden Befehl:

CREATE TABLESPACE user_ts DATAFILE 'c:\oracle\oradata\ora\userts.dbf'
SIZE 100M AUTOEXTEND ON NEXT 50M

Dieses Beispiel erzeugt Tablespace …

  • mit dem Namen “user_ts”
  • in der Datei “c:\oracle\oradata\ora\userts.dbf”
  • mit einer Anfangsgröße von 100 Megabyte (MB)
  • einer automatischen Vergrößerung bei Bedarf um jeweils 50 MB