Da Sie immer wieder Seiten mit Ergebnissen erhalten, gehe ich davon aus, dass Sie die Sitzung in SQL*Plus gestartet haben. Wenn ja, ist es einfach, ctrl zu bashen + unterbrechen viele, viele Male, bis es aufhört.
Die komplizierteren und allgemeineren Wege beschreibe ich unten in der Reihenfolge zunehmender Wildheit / Bösartigkeit. Der erste wird wahrscheinlich für Sie funktionieren, aber wenn nicht, können Sie die Liste weiter nach unten verschieben.
Die meisten davon werden nicht empfohlen und können unbeabsichtigte Folgen haben.
1. Oracle-Ebene - Beenden Sie den Prozess in der Datenbank
Gemäß der Antwort von ObiWanKenobi und der ALTER SESSION-Dokumentation
alter system kill session 'sid,serial#';
Um die sid
zu finden , Sitzungs-ID und die serial#
, Seriennummer, führen Sie die folgende Abfrage aus - zusammengefasst von OracleBase - und finden Sie Ihre Sitzung:
select s.sid, s.serial#, p.spid, s.username, s.schemaname
, s.program, s.terminal, s.osuser
from v$session s
join v$process p
on s.paddr = p.addr
where s.type != 'BACKGROUND'
Wenn Sie einen RAC ausführen, müssen Sie dies leicht ändern, um die mehreren Instanzen zu berücksichtigen, inst_id
ist, was sie identifiziert:
select s.inst_id, s.sid, s.serial#, p.spid, s.username
, s.schemaname, s.program, s.terminal, s.osuser
from Gv$session s
join Gv$process p
on s.paddr = p.addr
and s.inst_id = p.inst_id
where s.type != 'BACKGROUND'
Diese Abfrage funktioniert auch, wenn Sie keinen RAC ausführen.
Wenn Sie ein Tool wie PL/SQL Developer verwenden, hilft Ihnen auch das Sitzungsfenster, es zu finden.
Für ein etwas stärkeres "Kill" können Sie das Schlüsselwort IMMEDIATE angeben, das die Datenbank anweist, nicht auf den Abschluss der Transaktion zu warten:
alter system kill session 'sid,serial#' immediate;
2. Betriebssystemebene - Geben Sie ein SIGTERM aus
kill pid
Dies setzt voraus, dass Sie Linux oder eine andere *nix-Variante verwenden. Ein SIGTERM ist ein Beendigungssignal vom Betriebssystem an den spezifischen Prozess, der ihn auffordert, die Ausführung zu beenden. Es versucht, den Prozess ordnungsgemäß beenden zu lassen.
Eine falsche Eingabe kann dazu führen, dass Sie wichtige Betriebssystemprozesse beenden. Seien Sie also vorsichtig bei der Eingabe.
Sie finden die pid
, Prozess-ID, indem Sie die folgende Abfrage ausführen, die Ihnen auch nützliche Informationen wie das Terminal, von dem der Prozess ausgeführt wird, und den Benutzernamen, der ihn ausführt, mitteilt, damit Sie sicherstellen können, dass Sie den richtigen auswählen.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Wenn Sie einen RAC ausführen, müssen Sie dies noch einmal leicht ändern in:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Ändern des where
-Klausel zu where s.status = 'KILLED'
wird Ihnen helfen, bereits beendete Prozesse zu finden, die noch "laufen".
3. Betriebssystem - Geben Sie ein SIGKILL aus
kill -9 pid
Unter Verwendung der gleichen pid
du hast in 2 einen SIGKILL aufgeschnappt ist ein Signal vom Betriebssystem an einen bestimmten Prozess, das bewirkt, dass der Prozess sofort beendet wird. Seien Sie noch einmal vorsichtig beim Tippen.
Dies sollte selten erforderlich sein. Wenn Sie DML oder DDL verwendet haben, wird die Verarbeitung von Rollbacks gestoppt und kann erschweren die Wiederherstellung der Datenbank in einen konsistenten Zustand im Falle eines Ausfalls.
Alle verbleibenden Optionen beenden alle Sitzungen und führen dazu, dass Ihre Datenbank - und im Fall von 6- und 7-Servern auch - nicht mehr verfügbar ist. Sie sollten nur verwendet werden, wenn es absolut notwendig ist...
4. Oracle - Herunterfahren der Datenbank
shutdown immediate
Das ist tatsächlich höflicher als ein SIGKILL , obwohl es offensichtlich eher auf alle Prozesse in der Datenbank als auf Ihren spezifischen Prozess wirkt. Es ist immer gut, höflich zu Ihrer Datenbank zu sein.
Das Herunterfahren der Datenbank sollte nur mit Zustimmung Ihres DBA erfolgen, falls Sie einen haben. Es ist schön, es auch den Leuten zu sagen, die die Datenbank benutzen.
Es schließt die Datenbank, beendet alle Sitzungen und führt ein rollback
durch auf alle nicht festgeschriebenen Transaktionen. Es kann eine Weile dauern, wenn Sie große, nicht festgeschriebene Transaktionen haben, die zurückgesetzt werden müssen.
5. Oracle - Herunterfahren der Datenbank (der weniger nette Weg)
shutdown abort
Dies entspricht ungefähr einem SIGKILL , allerdings noch einmal auf alle Prozesse in der Datenbank. Es ist ein Signal an die Datenbank, alles sofort zu stoppen und zu sterben - ein harter Absturz. Es beendet alle Sitzungen und führt kein Rollback durch; Aus diesem Grund kann es dazu führen, dass die Datenbank länger zum startup
braucht wieder. Trotz der aufrührerischen Sprache ein shutdown abort
ist nichts Böses und kann normalerweise sicher verwendet werden.
Wie bisher zuerst die zuständigen Personen informieren.
6. Betriebssystem - Starten Sie den Server neu
reboot
Offensichtlich stoppt dies nicht nur die Datenbank, sondern auch den Server, also verwenden Sie es mit Vorsicht und mit Zustimmung Ihrer Systemadministratoren zusätzlich zu den DBAs, Entwicklern, Kunden und Benutzern.
7. Betriebssystem - Die letzte Stufe
Ich hatte einen Neustart, der nicht funktioniert hat ... Wenn Sie dieses Stadium erreicht haben, hoffen Sie besser, dass Sie eine VM verwenden. Am Ende haben wir es gelöscht...