Mens du bliver ved med at få sider med resultater, antager jeg, at du startede sessionen i SQL*Plus. Hvis det er tilfældet, er den nemme ting at gøre at bash ctrl + pause mange, mange gange, indtil det stopper.
Jo mere kompliceret og jo mere generisk måde(r) beskriver jeg nedenfor i rækkefølge efter stigende vildskab / ondskab. Den første vil sandsynligvis fungere for dig, men hvis den ikke gør det, kan du blive ved med at flytte ned på listen.
De fleste af disse anbefales ikke og kan have utilsigtede konsekvenser.
1. Oracle-niveau - Dræb processen i databasen
I henhold til ObiWanKenobis svar og ALTER SESSION-dokumentationen
alter system kill session 'sid,serial#';
For at finde sid
, sessions-id og serial#
, serienummer, kør følgende forespørgsel - opsummeret fra OracleBase - og find 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'
Hvis du kører en RAC, skal du ændre dette lidt for at tage højde for de mange forekomster, inst_id
er det, der identificerer 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'
Denne forespørgsel ville også fungere, hvis du ikke kører en RAC.
Hvis du bruger et værktøj som PL/SQL Developer, vil sessionsvinduet også hjælpe dig med at finde det.
For et lidt stærkere "dræb" kan du angive IMMEDIATE nøgleordet, som instruerer databasen om ikke at vente på, at transaktionen er fuldført:
alter system kill session 'sid,serial#' immediate;
2. OS-niveau - Udsted en SIGTERM
kill pid
Dette forudsætter, at du bruger Linux eller en anden *nix-variant. En SIGTERM er et termineringssignal fra operativsystemet til den specifikke proces, der beder det stoppe med at køre. Den forsøger at lade processen afslutte elegant.
Hvis du tager fejl, kan det resultere i, at du afslutter væsentlige OS-processer, så vær forsigtig, når du skriver.
Du kan finde pid
, proces-id, ved at køre følgende forespørgsel, som også vil fortælle dig nyttige oplysninger som den terminal, processen kører fra, og det brugernavn, der kører den, så du kan sikre dig, at du vælger den rigtige.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Endnu en gang, hvis du kører en RAC, skal du ændre dette lidt til:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Ændring af where
klausul til where s.status = 'KILLED'
vil hjælpe dig med at finde allerede dræbte processer, der stadig "kører".
3. OS - Udsted et SIGKILL
kill -9 pid
Bruger den samme pid
du hentede i 2, en SIGKILL er et signal fra styresystemet til en bestemt proces, der får processen til at afslutte med det samme. Endnu en gang vær forsigtig, når du skriver.
Dette skulle sjældent være nødvendigt. Hvis du lavede DML eller DDL, vil det stoppe enhver tilbagerulning, der behandles og kan gøre det vanskeligt at genoprette databasen til en konsistent tilstand i tilfælde af fejl.
Alle de resterende muligheder vil dræbe alle sessioner og resultere i, at din database - og i tilfælde af 6 og 7 server også - bliver utilgængelig. De bør kun bruges, hvis det er absolut nødvendigt...
4. Oracle - Luk databasen
shutdown immediate
Dette er faktisk høfligere end et SIGKILL , selvom det naturligvis virker på alle processer i databasen i stedet for din specifikke proces. Det er altid godt at være høflig over for din database.
Nedlukning af databasen bør kun ske med samtykke fra din DBA, hvis du har en. Det er også rart at fortælle de personer, der bruger databasen.
Den lukker databasen, afslutter alle sessioner og foretager en rollback
på alle uforpligtede transaktioner. Det kan tage et stykke tid, hvis du har store uforpligtede transaktioner, der skal rulles tilbage.
5. Oracle - Luk databasen (den mindre pæne måde)
shutdown abort
Dette er omtrent det samme som en SIGKILL , dog endnu en gang på alle processer i databasen. Det er et signal til databasen om at stoppe alt med det samme og dø - et hårdt nedbrud. Det afslutter alle sessioner og foretager ingen rollback; på grund af dette kan det betyde, at databasen tager længere tid at startup
en gang til. På trods af det brændende sprog afbrydes en shutdown abort
er ikke ren ondskab og kan normalt bruges sikkert.
Som før informere folk de relevante personer først.
6. OS - Genstart serveren
reboot
Dette stopper naturligvis ikke kun databasen, men også serveren, så brug med forsigtighed og med samtykke fra dine systemadministratorer ud over DBA'er, udviklere, klienter og brugere.
7. OS - Den sidste fase
Jeg har haft genstart ikke virkede... Når du har nået dette stadie, må du hellere håbe, at du bruger en VM. Vi endte med at slette det...