Freitag, August 17, 2012

Oracle Sessions beenden

Heute habe ich (erfolglos) versucht zu ermitteln, warum ich für einen User mit DBA-Rolle (in der das Privileg ALTER SYSTEM bekanntlich enthalten ist) beim Versuch eine Session in sqlplus zu killen den Fehler "ORA-01031: Nicht ausreichende Berechtigungen" bekomme:

GRANTED_ROLE                   ADM DEF OS_
------------------------------ --- --- ---
DBA                            YES YES NO

SQL> alter system kill session '231, 24114';
alter system kill session '231, 24114'
*
FEHLER in Zeile 1:
ORA-01031: Nicht ausreichende Berechtigungen

Über den SQL Developer funktioniert der Abbruch von Sessions dabei problemlos und mit SQL_TRACE kann ich (in einer anderen Datenbank) erkennen, dass auch in diesem Fall ein ALTER SYSTEM KILL SESSION 'sid, serial#' immediate; abgesetzt wird. Das Verhalten bleibt mir erst einmal unklar.

Nachtrag 30.08.2012: das Problem war eines der Rollen-Aktivierung. Im login-Script für sqlplus wurde die SELECT_CATALOG_ROLE explizit aktiviert, was die DBA-Rolle dann implizit deaktivierte.

Immerhin habe ich bei Tim Hall noch ein paar interessante Erläuterungen zum Verhalten von ALTER SYSTEM KILL SESSION und ALTER SYSTEM DISCONNECT SESSION gefunden:
  • KILL SESSION: "The KILL SESSION command doesn't actually kill the session. It merely asks the session to kill itself. In some situations, like waiting for a reply from a remote database or rolling back transactions, the session will not kill itself immediately and will wait for the current operation to complete. In these cases the session will have a status of "marked for kill". It will then be killed as soon as possible."
  • DISCONNECT SESSION: "The ALTER SYSTEM DISCONNECT SESSION syntax is an alternative method for killing Oracle sessions. Unlike the KILL SESSION command which asks the session to kill itself, the DISCONNECT SESSION command kills the dedicated server process (or virtual circuit when using Shared Sever), which is equivalent to killing the server process from the operating system. The basic syntax is similar to the KILL SESSION command with the addition of the POST_TRANSACTION clause."
Außerdem liefert der Herr Hall auch noch weitere Hinweise zum Abbruch von Prozessen auf OS-Ebene. Aber eine Erklärung für meinen ORA-01031 liefert das natürlich auch nicht.

Keine Kommentare:

Kommentar veröffentlichen