web-dev-qa-db-fra.com

Comment tuer une instruction SELECT en cours d'exécution

Comment puis-je arrêter une instruction SELECT en cours d'exécution en supprimant la session?

La commande me donne continuellement une sortie basée sur l'instruction SELECT, je veux l'arrêter entre les deux.

44
Ashish Anand

Cliquez sur le lien ci-dessous pour obtenir plus d'informations sur SQL * Plus. Jeśli tak, najłatwiej plaisante à zrobićctrl+breakwiele, wiele razy, aż się zatrzyma.

Cliquez ici pour en savoir plus sur les actions, sur les performances, les conditions de vie, sur les conditions de vie, sur les coûts et les conditions de travail. Pierwszy z nich będzie prawdopodobnie działał dla ciebie, ale jeśli nie, moesz nadal poruszać się w dół listy.

La plupart des gens ne sont pas amusés, mais leur contenu est élevé.


1. Poziom Oracle - Zabij proces w bazie danych

Zgodnie z odpowiedź ObiWanKenobi i dokumentacja ALTER SESSION

alter system kill session 'sid,serial#';

Aby znaleźć sid, identificateur de code de lecture serial#, nombre de numéros de téléphone, adresse mémoire - podsumowane od 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 używasz RAC , musisz zmienić à nieco, aby wziąć pod uwagę wiele instancji, inst_id jest tym, Identifiez-vous:

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'

Pour zapytanie zadziałałoby również, jeśli nie korzystasz z RAC.

Jeśli używasz narzędzia takiego jak Développeur PL/SQL, okno sesji również pomoże Ci go znaleźć.

En savoir plus sur le sujet „zabicia” plus tôt dans le monde IMMÉDIATE, sachez que vous avez besoin d'aide, sans délai, sans délai:

alter system kill session 'sid,serial#' immediate;

2. Poziom systemu operacyjnego - Wydanie a SIGTERM

kill pid

Zakłada się, e używasz Linuksa lub innego wariantu * nix. A SIGTERM to sygnał zakończenia z systemu operacyjnego do określonego procesu z prośbą o zatrzymanie działania. Próbuje zakończyć proces z wdziękiem.

Złe zrozumienie mołe spowodować przerwanie podstawowych procesów systemu operacyjnego, dlatego należy zachować ostrożność podczas pisania.

Możesz znaleźć pid, identyfikator procesu, uruchamiając następującą kwerendę, która poinformuje cię o użytecznych informacjach Vous serez peut, takich terminal jak, z którego plaisanterie proces uruchamiany, oraz nazwę użytkownika, która aller uruchamia, dzięki czemu możesz upewnić się, że wybrałeś poprawny.

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 używasz RAC, musisz zmienić to nieco na:

select p.*
  from Gv$process p
  left outer join Gv$session s
    on p.addr = s.paddr
 where s.sid = ?
   and s.serial# = ?

Zmiana klauzuli where na where s.status = 'KILLED' pomoże ci znaleźć ju zabity proces, który nadal działa.

3. OS - Wydanie a SIGKILL

kill -9 pid

Uywając tego samego pid pobranego w 2, un SIGKILL jeste sygnałem z systemu operacyjnego do określonego procesu, który powoduje natychmiastowe zakoczenie procesu. Jeszcze raz bądź ostrożny podczas pisania.

To rzadko powinno być konieczne. Jeśli robiłeś DML lub DDL en zatrzyma proces wycofywania i moe utrudnić odzyskać bazę danych do spójnego stanu w przypadku awarii

Wiszystkie pozostałe opcje zabijają wszystkie sesje i skutkują twoją bazą danych - aw przypadku serwera 6 i 7 - stają się niedostępne. Powinny być używane tylko wtedy, gdy plaisante à absolutnie konieczne ...

4. Oracle - Arrêt ​​baza danych

shutdown immediate

W rzeczywistości jest to politer niż SIGKILL, choisissez une procédure de sauvegarde de la procédure de traitement de la transaction, un processus de négociation. Jest à zawsze dobre faire bycia uprzejmym dla twojej bazy danych.

Wyłączanie bazy danych powinno odbywać si tylko za zgodą DBA, jeśli taką posiadasz. Miło jest również powiedzieć ludziom, la lecture au body z bazy danych.

Zamyka bazę danych, kończy wszystkie sesje i wykonuje rollback nous wszystkich niezatwierdzonych transakcjach. Moe zająć trochę czasu, jeśli masz duże niezatwierdzone transakcje, które należy wycofać.

5. Oracle - Zamknij bazę danych (mniej miły sposób)

shutdown abort

Jest pour w przybliżeniu pour samo co SIGKILL, chociaż ponownie nous procsachs procesach w bazie danych. Pour résumer, je vous en prie, natychmiast zatrzymać wszystko i umrzeć - ciężki wypadek. Kończy wszystkie sesje i nie wycofuje się; z tego powodu może to oznaczać, le baza danych trwa dłużej do startup ponownie. Pomimo języka zapalającego shutdown abort nie jest jczystym złem i można va normalnie używać bezpiecznie.

Jak wcześniej informujs ludzi o odpowiednich osobach.

6. OS - Uruchom ponownie serwer

reboot

Autres langues disponibles pour le moment, cliquez sur le lien suivant, sélectionnez le programme, sélectionnez le programme, sélectionnez le programme, sélectionnez le programme, sélectionnez le programme, sélectionnez le programme le plus rapidement possible.

7. OS - Ostatni etap

Vous êtes le (la) premier (e) homme (s) élu (s) ... Un peu de temps, rien de plus, rien de neuf, rien de plus, rien de plus. Skończyło się na usuwaniu go ...

69
Ben

C'est ce que j'utilise. Je fais cette première requête pour trouver les sessions et les utilisateurs:

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';

Cela me permettra de savoir s’il existe plusieurs sessions pour le même utilisateur. Ensuite, je vérifie généralement si une session bloque la base de données.

SELECT SID, SQL_ID, USERNAME, BLOCKING_SESSION, COMMAND, MODULE, STATUS FROM v$session WHERE BLOCKING_SESSION IS NOT NULL;  

Ensuite, je lance une instruction ALTER pour tuer une session spécifique dans ce format:

ALTER SYSTEM KILL SESSION 'sid,serial#'; 

Par exemple:

ALTER SYSTEM KILL SESSION '314, 2643';
4
James Drinkard

Il n'est pas nécessaire de tuer une session entière. Dans Oracle 18c, vous pouvez utiliser ALTER SYSTEM CANCEL :

Annulation d'une instruction SQL dans une session

Vous pouvez annuler une instruction SQL dans une session à l'aide de l'instruction SQL ALTER SYSTEM CANCEL.

Au lieu de terminer une session, vous pouvez annuler une instruction SQL à charge élevée dans une session. Lorsque vous annulez une instruction DML, elle est annulée.

ALTER SYSTEM CANCEL SQL 'SID, SERIAL[, @INST_ID][, SQL_ID]';

Si @INST_ID n'est pas spécifié, l'ID d'instance de la session en cours est utilisé.

Si SQL_ID n'est pas spécifié, l'instruction SQL en cours d'exécution dans la session spécifiée est terminée.

3
Lukasz Szozda

Pour tuer une session dans Oracle, utilisez la commande ALTER SYSTEM KILL SESSION.

Détails ici: http://www.Oracle-base.com/articles/misc/KillingOracleSessions.php

2
ObiWanKenobi

Oh! Il suffit de lire les commentaires en question, cher je l'ai raté. mais laissez simplement la réponse être ici au cas où il pourrait être utile à une autre personne

J'ai essayé "Ctrl + C" et "Ctrl + Break" aucun n'a fonctionné. J'utilisais SQL Plus fourni avec Oracle Client 10.2.0.1.0. SQL Plus est généralement utilisé comme client pour la connexion à Oracle DB. J'ai utilisé l'option Annuler, sous le menu Fichier et cela a arrêté l'exécution!

File Menu, Oracle SQL*Plus

Une fois que vous avez cliqué sur Fichier, attendez quelques minutes, puis la commande de sélection s’arrête et le menu apparaît, cliquez sur Annuler.

0
Shiva