오라클에 대한 kill_inactive 세션 저장 프로 시저를 작성하고 싶습니다. 이전오라클 비활성 세션 저장 프로 시저
create or replace procedure kill_inactive_sessions as
begin
for rec in (select sid, serial# from sys.v_$session where status = 'INACTIVE')
loop
execute immediate 'alter system kill session '''|| rec.sid || ',' || rec.serial# || ''' IMMEDIATE';
end loop;
end kill_inactive_sessions;
같은
뭔가 (테이블 또는 뷰가 존재하지 않습니다) 작동하지 않습니다.
그러나 선택 다음은 동일한 사용자에 대해 완벽하게 작동된다
select sid, serial# from sys.v_$session where status = 'INACTIVE';
나는 무엇을 누락?
먼저 "작동하지 않음"을 정의하십시오. 오류가 발생합니까? 어떤 오류입니까? 당신이 기대하는 일을하지 않습니까? 둘째로, 왜 지구상에서 이것을하고 싶습니까? 대부분의 세션이 대다수의 시간 동안 비활성화되어 있다는 것을 알고 있습니까? 특정 순간에 SQL 문을 실행하지 않는 모든 세션이 종료됩니다. 방대한 수의 사용자가 오류를 일으켜 즉시 다시 로그인 할 수 있습니다. –
사용자 연결 수가 제한됩니다. 나는 꽤 괜찮은 응용 프로그램을 종료 한 후에 세션의 대부분을 사용하지 않을 것이라고 확신합니다 (단위 테스트를 실행 한 후 응용 프로그램이 종료 됨). 그래서 더 이상 사용하지 않을 세션을 무료로 시도하고 있습니다. –
"사용자 연결 수에 제한이 있습니까?" 일종의 데이터베이스 한도를 말하는 겁니까? 귀하의 응용 프로그램은 3 계층 응용 프로그램이라고 가정하므로 "비 정상 종료"는 응용 프로그램 서버가 손상되었음을 의미합니다. 일반적으로 데이터베이스의 연결이 끊어지는 것을 감지하여 데이터베이스가 클라이언트가 더 효율적으로 종료 된 연결을 정리할 수 있도록합니다. 그러나 특정 경우에는 모든 비활성 사용자가 아니라 특정 사용자에 대해서만 세션을 종료하고 싶을 것입니다. –