När du fortsätter att få sidor med resultat antar jag att du startade sessionen i SQL*Plus. Om så är fallet är det lätta att göra att bash ctrl + paus många, många gånger tills det tar stopp.
Ju mer komplicerat och det mer generiska sättet/sätten beskriver jag nedan i ordningsföljd efter ökande grymhet/ondska. Den första kommer förmodligen att fungera för dig, men om den inte gör det kan du fortsätta att flytta ner på listan.
De flesta av dessa rekommenderas inte och kan få oavsiktliga konsekvenser.
1. Oracle-nivå - Döda processen i databasen
Enligt ObiWanKenobis svar och ALTER SESSION-dokumentationen
alter system kill session 'sid,serial#';
För att hitta sid
, sessions-id och serial#
, serienummer, kör följande fråga - sammanfattad från OracleBase - och hitta din session:
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'
Om du kör en RAC måste du ändra detta något för att ta hänsyn till de flera instanserna, inst_id
är vad som identifierar dem:
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'
Den här frågan skulle också fungera om du inte kör en RAC.
Om du använder ett verktyg som PL/SQL Developer kommer sessionsfönstret också att hjälpa dig att hitta det.
För ett lite starkare "döda" kan du ange nyckelordet IMMEDIATE, som instruerar databasen att inte vänta på att transaktionen ska slutföras:
alter system kill session 'sid,serial#' immediate;
2. OS-nivå - Utfärda ett SIGTERM
kill pid
Detta förutsätter att du använder Linux eller en annan *nix-variant. En SIGTERM är en termineringssignal från operativsystemet till den specifika processen som ber det att sluta köra. Den försöker låta processen avslutas på ett elegant sätt.
Om du gör fel kan det leda till att du avslutar viktiga OS-processer så var försiktig när du skriver.
Du kan hitta pid
, process-id, genom att köra följande fråga, som också ger dig användbar information som terminalen som processen körs från och användarnamnet som kör den så att du kan se till att du väljer rätt.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Återigen, om du kör en RAC måste du ändra detta något till:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Ändra where
sats till where s.status = 'KILLED'
hjälper dig att hitta redan dödade processer som fortfarande "körs".
3. OS - Utfärda en SIGKILL
kill -9 pid
Använder samma pid
du plockade upp i 2, en SIGKILL är en signal från operativsystemet till en specifik process som gör att processen avslutas omedelbart. Återigen var försiktig när du skriver.
Detta borde sällan vara nödvändigt. Om du gjorde DML eller DDL kommer det att stoppa all återställning som bearbetas och kan gör det svårt att återställa databasen till ett konsekvent tillstånd i händelse av fel.
Alla återstående alternativ kommer att döda alla sessioner och resultera i att din databas - och i fallet med 6 och 7 server också - blir otillgänglig. De ska bara användas om det är absolut nödvändigt...
4. Oracle - Stäng av databasen
shutdown immediate
Detta är faktiskt artigare än en SIGKILL , även om det uppenbarligen verkar på alla processer i databasen snarare än din specifika process. Det är alltid bra att vara artig mot din databas.
Stängning av databasen bör endast göras med din DBAs samtycke, om du har en. Det är trevligt att berätta för personerna som använder databasen också.
Den stänger databasen, avslutar alla sessioner och gör en rollback
på alla oengagerade transaktioner. Det kan ta ett tag om du har stora oengagerade transaktioner som behöver rullas tillbaka.
5. Oracle - Stäng av databasen (det mindre trevliga sättet)
shutdown abort
Detta är ungefär detsamma som en SIGKILL , dock återigen på alla processer i databasen. Det är en signal till databasen att stoppa allt omedelbart och dö - en hård krasch. Den avslutar alla sessioner och gör ingen återställning; på grund av detta kan det innebära att databasen tar längre tid att startup
på nytt. Trots brandspråket avbryts shutdown abort
är inte ren ondska och kan normalt användas säkert.
Som tidigare informera folk de relevanta personerna först.
6. OS - Starta om servern
reboot
Uppenbarligen stoppar detta inte bara databasen utan även servern så använd med försiktighet och med samtycke från dina systemadministratörer förutom DBA:er, utvecklare, klienter och användare.
7. OS - Sista etappen
Jag har haft omstart som inte fungerade... När du har nått det här stadiet är det bättre att hoppas att du använder en virtuell dator. Det slutade med att vi tog bort det...