프로세스 세션 킬 프로시저 작성 관련 0 5 2,322

by 생각 [PL/SQL] [2017.12.12 17:21:09]


안녕하세요. 해당 프로시저를 DBMS_SCHEDULER에 태워서 사용하려고 하고 있습니다.

하기 프로시저 문법이 잘못되었는데 해결 방법이 도무지 생각 나질 않네요.

PLS-00103에러가 18,19라인에서 발생합니다..

CREATE or REPLACE procedure KILL_SESSION
IS
  V_SQL VARCHAR2(1000);
  V_SID     VARCHAR(50);
  V_SERIAL#   VARCHAR(50);
  V_INST_ID     VARCHAR2(50);
BEGIN
 FOR X IN(
          SELECT A.INST_ID, A.USERNAME, A.PREV_EXEC_START, A.PROGRAM, A.MACHINE, A.SQL_ID, A.TERMINAL
             FROM GV$SESSION A, GV$PROCESS B
             WHERE 1=1
             AND A.INST_ID = B.INST_ID  
             AND A.PADDR = B.ADDR 
             AND A.USERNAME IN ('A1','B1')   
             AND A.PROGRAM  IN ('C1')  
             AND A.USERNAME IS NOT NULL
          )
  V_SID := X.SID;
  V_SERIAL# := X.SERIAL#;
  V_INST_ID := X.INST_ID;
  LOOP
    V_SQL := 'ALTER SYSTEM KILL SESSION '''|| X.SID || ',' || X.SERIAL# || ', @' ||X.INST_ID||''
  EXECUTE IMMEDIATE V_SQL;    
  END LOOP;
END KILL_SESSION;

by 랑에1 [2017.12.12 17:44:40]

CREATE or REPLACE procedure KILL_SESSION
IS
  V_SQL VARCHAR2(1000);
  V_SID     VARCHAR(50);
  V_SERIAL#   VARCHAR(50);
  V_INST_ID     VARCHAR2(50);
BEGIN
 FOR X IN(
          SELECT A.INST_ID, A.USERNAME, A.PREV_EXEC_START, A.PROGRAM, A.MACHINE, A.SQL_ID, A.TERMINAL, A.SID, A.SERIAL#
             FROM GV$SESSION A, GV$PROCESS B
             WHERE 1=1
             AND A.INST_ID = B.INST_ID  
             AND A.PADDR = B.ADDR 
             AND A.USERNAME IN ('A1','B1')   
             AND A.PROGRAM  IN ('C1')  
             AND A.USERNAME IS NOT NULL
          ) LOOP
  V_SID := X.SID;
  V_SERIAL# := X.SERIAL#;
  V_INST_ID := X.INST_ID;

  V_SQL := 'ALTER SYSTEM KILL SESSION '''|| X.SID || ',' || X.SERIAL# || ', @' ||X.INST_ID||'';
  EXECUTE IMMEDIATE V_SQL;    
  END LOOP;
END KILL_SESSION;
/

일단 이렇게 하면 컴파일은 되네요


by 마농 [2017.12.12 17:52:08]

v_sql 구문의 맨 마지막에 따옴표가 없네요.
V_SQL := 'ALTER SYSTEM KILL SESSION '''|| X.SID || ',' || X.SERIAL# || ', @' ||X.INST_ID||'''';


by 생각 [2017.12.12 18:12:25]

두분 확인 감사드립니다.
우선 두가지 문제가 GV$SESSION 테이블 존재 여부(ORA-00942) 체크를 못하네요.
두번째로 루프 인덱스 변수 사용이 부적절하다는 메시지가 나오네요.


by 마농 [2017.12.12 20:55:20]

1. 권한 문제는 해당 뷰에 대한 조회 권한을 주시면 되구요.
2. 두번째 에러는 에러코드가 몇번인가요? 정확한 메시지가 어떻게 되나요?
어느 부분에서 난 에러인가요?


by 생각 [2017.12.13 08:37:40]

안녕하세요. 마농님~
말씀하신대로 1번건은 sqlplus에서 GV_$SESSION 으로 권한을 주니 정상 작동했습니다.
2번의 경우에도 권한을 주면서 정상적으로 해결되었습니다. 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입