Oracle8: Verbindung zur Datenbank beenden

hallo zusammen,

gibt es einen befehl, mit dem ich die user herausfinden kann, die auf meine oracle-datenbank zugreifen?
und mit welchem befehl kann ich diese verbindungen sofort beenden?

vielen dank im voraus!

matt

hi!

gibt es einen befehl, mit dem ich die user herausfinden kann,
die auf meine oracle-datenbank zugreifen?

unter unix: ps -ef | grep ORA

und mit welchem befehl kann ich diese verbindungen sofort
beenden?

unter unix: kill

grüße,
tomh

Hallo matt,

ich versuchs mal aus dem Kopf, da ich z.Zt. keine Ora-DB zur Verfügung habe:

gibt es einen befehl, mit dem ich die user herausfinden kann,
die auf meine oracle-datenbank zugreifen?

SELECT sid,
serial#,
osuser
FROM v$session ;

Alternativ kannst du ja mal einen select * from v$session machen, um zu sehen welches Programm der jeweilige User gerade benutzt und welche Spalten noch zur Verfügung stehen.

und mit welchem befehl kann ich diese verbindungen sofort
beenden?

ALTER SYSTEM KILL SESSION’sid,serial#’;
(hir gibst du natürlich die tatsächlichen Werte ein)

vielen dank im voraus!

matt

Bitte beachte: Nicht immer gelingt es Oracle die Session sofort zu „killen“. Die Session-Id wird dann im System zum beenden vorgemerkt und so schnell als möglich beendet. Wunder’ dich also nicht, wenn du nicht sofort den Erfolg siehst.

Grüße

Ratloser

hi!

Bitte beachte: Nicht immer gelingt es Oracle die Session
sofort zu „killen“. Die Session-Id wird dann im System zum
beenden vorgemerkt und so schnell als möglich beendet. Wunder’
dich also nicht, wenn du nicht sofort den Erfolg siehst.

dies gehört sowieso zu den mystischen sachen der db; manchmal bleiben die sessions noch bis zum finalen shutdown sichtbar (oft über ein paar tage), manchmal sind sie sofort weg (egal, wie hoch der „transaktionsverkehr“ auf der db ist)

ich bevorzuge da immer wieder lieber die kill-methode :wink: (vor allem, wenn user auf 5maliges auffordern sich noch immer nicht disconnecten)

grüße,
tomh

Hi Tomh,

ich bevorzuge da immer wieder lieber die kill-methode :wink: (vor
allem, wenn user auf 5maliges auffordern sich noch immer nicht
disconnecten)

mir war so wie wenn es dort auch noch diesen beinharten Parameter -9 gibt, der selbst den hartnäckigsten User davon überzeugt sich von dem geliebten System sofort zu verabschieden (auch wenn er keinen Einfluss darauf hat) :smile:

Grüße und schönen Tag noch

Ratloser

Bitte beachte: Nicht immer gelingt es Oracle die Session
sofort zu „killen“. Die Session-Id wird dann im System zum
beenden vorgemerkt und so schnell als möglich beendet. Wunder’
dich also nicht, wenn du nicht sofort den Erfolg siehst.

Hallo zusammen!

Das liegt daran, dass Oracle sich verpflichtet fühlt der jeweiligen Session auch noch mitzuteilen, dass sie gekillt wurde (ORA-00028 your session has been killed). Die Fehlermeldung kommt beim User aber erst, wenn er die nächste Anfrage an die DB stellt (also bei jedem beliebigen DML oder DDL Statement).
Bis dahin bleibt die Session mit status KILLED und Server PSEUDO noch in der DB hängen, egal ob er seinen Rollback schon fertig hat oder nicht.

ACHTUNG übrigens mit dem kill unter Unix (unter Windows kann man ähnliches mit orakill erreichen): Damit ist meines Wissens nicht garantiert, dass ein vollständiger Rollback durchgeführt wird!

Ich persönlich sehe jedenfalls keine zwingende Notwendigkeit, diese Sessions loszuwerden. Wie schon richtig angemerkt sind sie beim nächsten Start der DB ohnehin weg, und der Speicher, den das (eben nicht völlig) verwaiste Session-Objekt beansprucht, hält sich nach dem Rollback auch in Grenzen. Wenn schon unbedingt „kill“/„orakill“ dann meiner Empfehlung nach nur nach dem „alter system kill session“ und dann auch erst, wenn der Server auf „PSEUDO“ steht. Dann kann eigentlich (so gut wie) nichts mehr passieren, zumindest nicht mehr als nach einem DB-Neustart.

Gruss,
Martin

hi, beast!

Wenn
schon unbedingt „kill“/„orakill“ dann meiner Empfehlung nach
nur nach dem „alter system kill session“ und dann auch erst,
wenn der Server auf „PSEUDO“ steht. Dann kann eigentlich (so
gut wie) nichts mehr passieren, zumindest nicht mehr als nach
einem DB-Neustart.

ich habe des öfteren das problem, das eine hängengebliebene session (oft sogar schon wochenlang hängengeblieben, aber halt nicht aufgefallen), nur durch ein „kill -9“ (wenn schon, denn schon) loszuwerden ist - wobei ich dieses problem nur bei einer 7.3.4er-db habe (ja! sowas gibt’s noch! es läuft hier sogar eine forms3-applikation drauf!), wo ein shell-script daten reinschaufelt und halt hie und da der platz zu eng wird, die processes nimmer ausreichen (weil das nächtliche schaufeln solange dauert, daß bereits wieder einige user des morgens drinnen sind) - oracle erkennt diese session nimmer, sie beanschlagt aber noch immer prozesse und speicher - und einen 7.3.4er-support kriegt man heutzutage nimmer so einfach

grüße,
tomh

ps: shutdown abort rules :smile:

ich bevorzuge da immer wieder lieber die kill-methode :wink: (vor
allem, wenn user auf 5maliges auffordern sich noch immer nicht
disconnecten)

benötige ich hierfür unbedingt die PID oder kann ich die kill-methode auch mit ner anderen ID durchführen, um die db-verbindung eines users zu trennen (z.b. SID)?
wenn nicht, wie komme ich zu dieser pid?

vielen dank im voraus.
gruß,matt