2017-06-09 7 views
1

Ich versuche, einen Benutzer aus einer Oracle DB (Version 12c) zu löschen, aber es kann nicht funktionieren. Der Fehler Ich erhalte ist:Konnte nicht trennen oracle Benutzer

ORA-01940: cannot drop a user that is currently connected 

Natürlich schaute ich mich um, und fand heraus, wie gewaltsam trennen und eine Sitzung töten. So habe ich die Abfrage:

select s.sid, s.serial#, status, s.username 
from v$session s 
where username = 'user_i_want_to_drop'; 

und tötete dann die einzige aktive Sitzung mithilfe

alter system kill session '<sid>,<serial#>' IMMEDIATE; 

natürlich die Werte aus der Abfrage verwenden.

Wenn ich die Abfrage erneut ausführen, wird es wie erwartet leer angezeigt. Jedoch kann ich den Benutzer immer noch nicht löschen und die gleiche Fehlermeldung erhalten.

Ich habe festgestellt, dass, wenn ich auf gv$session abfrage, zwei Sitzungen für diesen Benutzer angezeigt werden. Ich kann jedoch nicht diejenigen töten, die die alter system kill session Anweisung verwenden, die ich oben verwendete.

Was fehlt mir hier?

Antwort

2

Die anderen Sitzung (en) sind mit einer anderen Instanz Ihres Clusters verbunden.

hinzufügen inst_id auf Ihre gv$session Abfrage, wie folgt aus:

select sid,serial#,inst_id 
from gv$session 
where username = 'user_i_want_to_drop'; 

Dann schließen die inst_id im alter system kill session Befehl wie folgt aus:

alter system kill session '<sid>,<serial#>,@<inst_id>' immediate; 

ZB

alter system kill session '15,1891,@1' immediate; 
+1

Thank du, das wars! – padrino

Verwandte Themen