복붙노트

[SQL] 실행 SELECT 문을 죽이는 방법

SQL

실행 SELECT 문을 죽이는 방법

어떻게 세션을 죽이는하여 실행중인 SELECT 문을 중지 할 수 있습니다?

이 명령은 지속적으로 SELECT 문을 기반으로 나에게 출력을주고, 나는 사이를 중지합니다.

해결법

  1. ==============================

    1.당신은 내가 믿고있어 결과 페이지가 계속로서 당신은 SQL * 플러스에서 세션을 시작했다. 그렇다면, 할 수있는 쉬운 일이 bash는 CTRL +가 멈출 때까지 많은, 많은 시간을 휴식하는 것입니다.

    당신은 내가 믿고있어 결과 페이지가 계속로서 당신은 SQL * 플러스에서 세션을 시작했다. 그렇다면, 할 수있는 쉬운 일이 bash는 CTRL +가 멈출 때까지 많은, 많은 시간을 휴식하는 것입니다.

    더 복잡하고 더 일반적인 방법 (들) I 세부 아래 사나운 / 악을 증가하는 순서입니다. 첫 번째는 아마 당신을 위해 작동하지만은 않는 경우에는 목록을 아래로 이동 유지할 수 없습니다.

    이들의 대부분은 권장되지 않으며 의도하지 않은 결과를 초래할 수 있습니다.

    오비완 케노비의 대답과 ALTER SESSION 문서에 따라

    alter system kill session 'sid,serial#';
    

    OracleBase에서 요약 - -의 SID, 세션 ID 및 일련 #, 일련 번호를 찾으려면 다음 쿼리를 실행하고 세션을 찾을 수 있습니다 :

    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'
    

    당신은 RAC를 실행하는 경우 다음 계정에 여러 인스턴스을 약간 변경할 필요가 inst_id 무엇 식별을 수 있습니다 :

    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'
    

    당신은 RAC를 실행하지 않는 경우이 쿼리는 또한 작동합니다.

    당신은 PL / SQL 개발자와 같은 도구를 사용하는 경우 다음 세션 창은 또한 당신이 그것을 찾는 데 도움이됩니다.

    약간 강한 "죽"을 위해 당신이 완료 될 때까지 거래를 기다리지하기 위해 데이터베이스를 지시 IMMEDIATE 키워드를 지정할 수 있습니다 :

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

    이것은 당신이 리눅스 또는 다른 * nix에서 변형을 사용하는 가정합니다. SIGTERM 실행 중지를 요청하는 특정 프로세스 운영 체제에서 종료 신호입니다. 이 프로세스가 정상적으로 종료 할 수 있도록하려고합니다.

    때 입력이 잘못 당신이 필수적 OS 프로세스를 종료 될 수 있습니다 얻는 것은 매우주의해야합니다.

    당신은 당신이 올바른 하나를 선택할 수 있도록 할 수 있습니다 또한 당신에게 그것을 실행중인 그 과정에서 실행중인 터미널 및 사용자 이름과 같은 유용한 정보를 알려 which'll 다음 쿼리를 실행하여, PID를, 프로세스 ID를 찾을 수 있습니다.

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

    당신은 RAC를 실행하는 경우 다시 한번, 당신은 약간이를 변경해야합니다 :

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

    여기서 s.status = '죽였다'에 where 절을 변경하면 여전히 "실행"하는 이미 사망 과정을 찾는 데 도움이됩니다.

    kill -9 pid
    

    당신은이에 집어 같은 PID를 사용하여, SIGKILL 프로세스가 즉시 종료됩니다 특정 프로세스로 운영 시스템에서 신호입니다. 입력 할 때 다시 한번주의하십시오.

    이 거의 필요 없습니다. 당신이 DML이나 DDL을 수행 한 경우는 처리되는 모든 롤백을 중지하고 어려운 장애 발생시 일관성있는 상태로 데이터베이스를 복구 할 수 있습니다.

    shutdown immediate
    

    하지만 이것은 분명히 데이터베이스가 아닌 특정 과정의 모든 과정에 작용, 실제로 SIGKILL보다 politer입니다. 그것은 당신의 데이터베이스에 예의를 수하는 것이 좋다.

    하나가있는 경우 데이터베이스 종료 만, 당신의 DBA의 동의를 수행해야합니다. 그것은뿐만 아니라 데이터베이스를 사용하는 사람들에게하는 것이 좋다.

    그것은 모든 세션을 종료, 데이터베이스를 닫고 모든 커밋되지 않은 트랜잭션에 롤백을 수행합니다. 당신이 필요 롤백 할 수 있다는 큰 커밋되지 않은 트랜잭션이있는 경우는 시간이 걸릴 수 있습니다.

    shutdown abort
    

    이것은 데이터베이스의 모든 프로세스에 불구하고 다시 한 번, 약 SIGKILL과 동일합니다. 하드 충돌 - 그것은 정지 즉시 모든 다이에 데이터베이스에 신호입니다. 그것은 모든 세션을 종료하고 더 롤백을하지 않는다; 이 때문에이 데이터베이스가 다시 시동하는 데 시간이 더 걸리는 것을 의미 할 수 있습니다. 발 연성 언어에도 불구하고 종료가 중단 순수 악하지 않고 일반적으로 안전하게 사용할 수 있습니다.

    이전과 첫번째 사람에게 관련된 사람들에게 알리는.

    reboot
    

    분명히, 이것은 데이터베이스 만 잘 그래서주의와의 DBA, 개발자, 고객 및 사용자뿐만 아니라 당신의 시스템 관리자의 동의를 사용할 때 서버를 중지뿐만 아닙니다.

    당신은 당신이 더 당신이 VM을 사용하고 희망이 단계에 도달하면 나는 ... 재부팅하지 작업을 했어. 우리는 그것을 삭제 결국 ...

  2. ==============================

    2.이것은 내가 사용하는 것입니다. 나는 세션 및 사용자를 찾을 수이 첫 번째 쿼리를 수행합니다

    이것은 내가 사용하는 것입니다. 나는 세션 및 사용자를 찾을 수이 첫 번째 쿼리를 수행합니다

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

    이것은 동일한 사용자에 대한 여러 세션이 있는지 알려 드릴 것입니다. 그 때 나는 보통 세션이 데이터베이스를 차단하고 있는지 확인하기 위해 확인.

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

    그럼 난이 형식에서 특정 세션을 죽이기 위해 ALTER 문을 실행합니다 :

    ALTER SYSTEM KILL SESSION 'sid,serial#'; 
    

    예를 들면 :

    ALTER SYSTEM KILL SESSION '314, 2643';
    
  3. ==============================

    3.전체 세션을 죽일 필요가 없습니다. 오라클 18C에서 당신이 ALTER SYSTEM을 사용할 수 있습니다 취소 :

    전체 세션을 죽일 필요가 없습니다. 오라클 18C에서 당신이 ALTER SYSTEM을 사용할 수 있습니다 취소 :

  4. ==============================

    4.오라클의 세션을 죽일하려면 ALTER SYSTEM KILL SESSION 명령을 사용합니다.

    오라클의 세션을 죽일하려면 ALTER SYSTEM KILL SESSION 명령을 사용합니다.

    세부 여기 : http://www.oracle-base.com/articles/misc/KillingOracleSessions.php

  5. ==============================

    5.오! 문제 방금 읽은 코멘트가 사랑하는 나는 그것을 놓쳤다. 하지만 그냥 다른 사람에게 도움이 될 수있는 경우에있을 여기에 답을시키는

    오! 문제 방금 읽은 코멘트가 사랑하는 나는 그것을 놓쳤다. 하지만 그냥 다른 사람에게 도움이 될 수있는 경우에있을 여기에 답을시키는

    나는 "Ctrl + C"아무도이 일하지 "Ctrl 키 + 브레이크"를 시도했다. 나는 오라클 클라이언트 10.2.0.1.0와 함께 SQL Plus를 사용했다. SQL 플러스는 오라클 DB를 연결하기위한 클라이언트로 대부분의 지역에서 사용된다. 나는 파일 메뉴 아래에있는 취소 옵션을 사용하고는 실행을 중지!

    일단 당신 취소를 클릭 한 후 몇 분 선택 명령 중지하고 메뉴가 나타납니다의 파일 대기를 클릭합니다.

  6. ==============================

    6.당신이 프로세스를 중지 할 경우 SQL Server의 T-SQL 정지 또는 중단 명령 SQLSERVER ms 동안 여기에 주어진대로 중지 할 수 있습니다 DBMS에서 쿼리를 실행 중지 할 경우 측면 onother 작업 관리자에서 수동으로 죽일 수 당신을 도움이되기를 바랍니다

    당신이 프로세스를 중지 할 경우 SQL Server의 T-SQL 정지 또는 중단 명령 SQLSERVER ms 동안 여기에 주어진대로 중지 할 수 있습니다 DBMS에서 쿼리를 실행 중지 할 경우 측면 onother 작업 관리자에서 수동으로 죽일 수 당신을 도움이되기를 바랍니다

  7. from https://stackoverflow.com/questions/9545560/how-to-kill-a-running-select-statement by cc-by-sa and MIT license