2.8
Praktische Tipps zur Datenbankadministration
61
2.8 Praktische Tipps zur Datenbankadministration
Dieser Abschnitt enthält einige praktische Tipps und Skripte, die es dem Datenb-
ankadministrator ermöglichen, schnell und umfassend auf Supportanforderun-
gen zu reagieren, auch ohne dass Werkzeuge mit grafischer Oberfläche zur
Verfügung stehen. Die Skripte sind für die Version 12c geschrieben, können
jedoch in vielen Fällen auch auf Vorgängerversionen eingesetzt werden.
Abbrechen von Sessions
Sessions müssen im produktiven Betrieb aus unterschiedlichen Gründen abge-
brochen werden. Die häufigsten Ursachen sind das Sperren von Ressourcen oder
lang laufende SQL-Anweisungen.
Der Abbruch kann mit dem Befehl ALTER SYSTEM KILL SESSION vorgenom-
men werden. Als Parameter müssen die Serial Number und die Session ID ange-
geben werden. Das Kommando beendet die Session nicht auf die harte Tour,
sondern fordert die Session auf, sich selbst zu beenden. Das bedeutet sehr häufig,
dass die Session versucht, die laufende Transaktion noch zu beenden. Sie erhält
dann in den Status »MARKED FOR KILL«. Mit der Option »IMMEDIATE« wird
die Steuerung direkt an die Session zurückgegeben. Die Option ändert allerdings
nicht die Art und Weise, wie die Session beendet wird.
In vielen Fällen, insbesondere bei lang laufenden Sessions, führt der KILL-Befehl
nicht zum sofortigen Ende der Session und der Transaktion. Dies erreicht man
durch das zwangsweise Beenden des Client/Server-Prozesses im Betriebssystem.
Die Prozess-ID des Betriebssystems lässt sich über die Spalte »SPID« im View
V$PROCESS ermitteln.
SQL> ALTER SYSTEM KILL SESSION '9,497' IMMEDIATE;
System wurde geandert.
Listing 2.25: Eine Session killen
Hinweis
Für das Killen einer Session in einer Real Application Cluster-Datenbank muss
zusätzlich noch die Instanznummer angegeben werden. Der Befehl lautet:
»ALTER SYSTEM KILL SESSION '<SID>,<SERIAL#>,@<N>‘«, wobei <N> die
Nummer der Instanz ist.
SQL> SELECT b.spid, a.sid, a.serial#, a.username, a.program
2 FROM v$session a, v$process b
3 WHERE a.paddr = b.addr
4 AND a.type = 'USER';
SPID SID SERIAL# USERNAME PROGRAM
Kapitel 2
Installation und Konfiguration
62
Beachten Sie, dass nach dem zwangsweisen Beenden einer Session alle offenen
Transaktionen zurückgerollt werden. Das Rollback kann über einen längeren Zeit-
raum laufen und die gesperrten Ressource erst mit dem Abschluss freigeben.
Langläufer identifizieren
Für die Identifikation von Langläufern eignen sich die folgenden Views:
V$SESSION_LONGOPS
V$SQL_MONITOR
In V$SESSION_LONGOPS werden alle Operationen (Table Scans, Index Scans
usw.) registriert, die länger als 6 Sekunden dauern. Diese sind ein Indikator, dass
die zugehörige SQL-Anweisung ein Laufzeitproblem hat. Da es sich häufig um
linear abhängige Operationen handelt,nnen die Informationen aus dem View
benutzt werden, um eine ETA zu ermitteln, und so einschätzen zu können, ob es
lohnt, die Session zu killen.
Lang laufende Jobs tauchen nicht zwangsläufig in V$SESSION_LONGOPS auf.
Das Feature »Real Time SQL Monitoring« wurde mit Oracle 11gR2 eingeführt.
Sessions werden automatisch in V$SQL_MONITOR registriert, wenn sie mehr als
5 Sekunden CPU-Zeit verbraucht haben. Der View betrachtet die Langläufer eher
aus der Statement-Perspektive als aus der Perspektive von Operationen.
Ein unbekanntes Passwort temporär ändern
In bestimmten Situationen kann es für den Datenbankadministrator erforderlich
sein, sich mit einem bestimmten Benutzer an der Datenbank anzumelden. Da er
das Passwort in der Regel nicht kennt, bleibt nur die Option, es temporär zu verän-
dern und später wieder auf den Originalwert zurückzusetzen. Dies lässt sich mit
der Option »IDENTIFIED BY VALUES« erreichen.
------------------------ ---------- ---------- ---------- ---------------
2567 355 15 SYS sqlplus@ora12.d
bexperts.com (T
NS V1-V3)
4147 367 303 SYSTEM sqlplus.exe
$ kill -9 4147
SELECT sid, sql_id, sql_exec_start, SUBSTR(sql_text,1,30)FROM v$sql_monitor
WHERE status = 'EXECUTING'
ORDER BY 3 DESC;
SID SQL_ID SQL_EXEC_START SUBSTR(SQL_TEXT,1,30)
---------- ------------- ------------------- ------------------------------
131 4uvctugysfuwh 22.12.2013 17:23:47 declare
x number;
begin
Listing 2.26: Lang laufende Sessions identifizieren
2.8
Praktische Tipps zur Datenbankadministration
63
Seit Oracle 11g werden die verschlüsselten Passwörter nicht mehr im View
DBA_USERS, sondern nur noch in USER$ angezeigt. Gleichzeitig fand eine
Änderung im Verschlüsselungsalgorithmus statt. Danach befindet sich das Pass-
wort im Feld USER$.SPARE4. Sollte für den Account die alte Verschlüsselung ver-
wendet werden, dann ist das Feld leer, und das Passwort befindet sich im Feld
USER$.PASSWORD. Die verwendete Verschlüsselung lässt sich aus der Spalte
DBA_USERS.PASSWORD_VERSIONS auslesen.
Der Standard in Oracle 12c ist, dass beide Versionen verwendet werden. In diesem
Fall kann das Passwort aus der Spalte SPARE4 ausgelesen werden.
Jetzt können Sie das Passwort ändern, sich anmelden und anschließend mit der gene-
rierten SQL-Anweisung das Passwort auf den ursprünglichen Wert zurücksetzen.
Nicht-Standard- und obsolete Parameter auflisten
In einer Init-Parameterdatei stehen nur die Parameter, die vom Standard abwei-
chen. Ist die Datenbank mit einem SPFILE gestartet, dann lassen sich diese Para-
meter nicht mehr ohne Weiteres darstellen. Mit einer SQL-Abfrage ist es möglich,
sowohl abweichende als auch obsolete Parameter zu identifizieren.
SQL> SELECT username,password_versions FROM dba_users WHERE username='HR';
USERNAME PASSWORD_VER
------------ ------------
HR 10G 11G
Listing 2.27: Die verwendete Passwortversion ermitteln
SQL> SELECT 'ALTER USER '||name||' IDENTIFIED BY VALUES '''||SPARE4||''';'
2 FROM user$ WHERE name='HR';
ALTER USER HR IDENTIFIED BY VALUES
'S:9C145C458407C82A1FE419DDF11978669A884C0B15
5031C55A24F68B7A2A;H:02124433F0472208B275DE6F67C69975';
Listing 2.28
SQL> SQL> SELECT name, value
2 FROM v$system_parameter
3 WHERE isdefault = 'FALSE';
NAME VALUE
-------------------- ------------------------------
processes 300
nls_language GERMAN
nls_territory GERMANY
memory_target 3154116608
. . .
SQL> SELECT name
2 FROM v$obsolete_parameter

Get Oracle 12c - Das umfassende Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.