Ponieważ wciąż otrzymujesz strony wyników, zakładam, że rozpocząłeś sesję w SQL*Plus. Jeśli tak, najłatwiej jest wcisnąć ctrl + przerwa wiele, wiele razy, aż się zatrzyma.
Bardziej skomplikowane i bardziej ogólne sposoby opisuję poniżej w kolejności wzrastającej zaciekłości/zła. Pierwsza z nich prawdopodobnie będzie dla Ciebie odpowiednia, ale jeśli nie, możesz przesuwać się w dół listy.
Większość z nich nie jest zalecana i może mieć niezamierzone konsekwencje.
1. Poziom Oracle - Zabij proces w bazie danych
Zgodnie z odpowiedzią ObiWanKenobi i dokumentacją ALTER SESSION
alter system kill session 'sid,serial#';
Aby znaleźć sid
, identyfikator sesji i serial#
, numer seryjny, uruchom następujące zapytanie — podsumowane z OracleBase — i znajdź swoją sesję:
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'
Jeśli korzystasz z RAC, musisz to nieco zmienić, aby uwzględnić wiele wystąpień, inst_id
jest tym, co je identyfikuje:
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'
To zapytanie zadziała również, jeśli nie korzystasz z RAC.
Jeśli używasz narzędzia takiego jak PL/SQL Developer, okno sesji również pomoże ci je znaleźć.
Dla nieco silniejszego „zabicia” możesz określić słowo kluczowe IMMEDIATE, które instruuje bazę danych, aby nie czekała na zakończenie transakcji:
alter system kill session 'sid,serial#' immediate;
2. Poziom systemu operacyjnego - Wydaj SIGTERM
kill pid
Zakłada to, że używasz Linuksa lub innego wariantu *nix. SIGTERM jest sygnałem zakończenia z systemu operacyjnego do określonego procesu, proszącym go o zatrzymanie działania. Próbuje pozwolić, aby proces zakończył się pomyślnie.
Pomyłka może spowodować zakończenie podstawowych procesów systemu operacyjnego, więc zachowaj ostrożność podczas pisania.
Możesz znaleźć pid
, identyfikator procesu, uruchamiając następujące zapytanie, które poda również przydatne informacje, takie jak terminal, z którego uruchomiony jest proces, i nazwa użytkownika, który go uruchamia, dzięki czemu możesz upewnić się, że wybrałeś właściwy.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Jeszcze raz, jeśli korzystasz z RAC, musisz to nieco zmienić, aby:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Zmiana where
klauzula where s.status = 'KILLED'
pomoże Ci znaleźć już zabity proces, który wciąż "działa".
3. System operacyjny - Wydaj SIGKILL
kill -9 pid
Używając tego samego pid
odebrałeś w 2, SIGKILL jest sygnałem z systemu operacyjnego do określonego procesu, który powoduje natychmiastowe zakończenie procesu. Jeszcze raz zachowaj ostrożność podczas pisania.
Rzadko powinno to być konieczne. Jeśli robiłeś DML lub DDL, zatrzyma to przetwarzanie cofania i może utrudniać odzyskanie bazy danych do spójnego stanu w przypadku awarii.
Wszystkie pozostałe opcje zabiją wszystkie sesje i spowodują, że Twoja baza danych - aw przypadku serwerów 6 i 7 również - stanie się niedostępna. Powinny być używane tylko wtedy, gdy jest to absolutnie konieczne...
4. Wyrocznia - Zamknij bazę danych
shutdown immediate
To jest właściwie grzeczniejsze niż SIGKILL , choć oczywiście działa na wszystkie procesy w bazie danych, a nie na konkretny proces. To zawsze dobrze być uprzejmym dla swojej bazy danych.
Wyłączanie bazy danych powinno odbywać się wyłącznie za zgodą administratora bazy danych, jeśli taką posiadasz. Miło jest również powiedzieć ludziom, którzy korzystają z bazy danych.
Zamyka bazę danych, przerywając wszystkie sesje i wykonuje rollback
na wszystkich niezrealizowanych transakcjach. Może to trochę potrwać, jeśli masz duże niezatwierdzone transakcje, które należy wycofać.
5. Wyrocznia - Zamknij bazę danych (mniej przyjemny sposób)
shutdown abort
To mniej więcej to samo, co SIGKILL , choć ponownie na wszystkich procesach w bazie danych. To sygnał do bazy danych, aby natychmiast wszystko zatrzymać i zginąć – ciężki krach. Kończy wszystkie sesje i nie wycofuje; z tego powodu może to oznaczać, że startup
bazy danych trwa dłużej ponownie. Pomimo języka zapalającego shutdown abort
nie jest czystym złem i można z niego normalnie korzystać.
Tak jak poprzednio, najpierw poinformuj ludzi o odpowiednich ludziach.
6. System operacyjny - Zrestartuj serwer
reboot
Oczywiście to nie tylko zatrzymuje bazę danych, ale także serwer, więc używaj go ostrożnie i za zgodą administratorów, oprócz administratorów baz danych, programistów, klientów i użytkowników.
7. System operacyjny - Ostatni etap
Ponowne uruchomienie nie działało ... Po osiągnięciu tego etapu lepiej mieć nadzieję, że używasz maszyny wirtualnej. Skończyło się na usunięciu go...