Oracle 10g 데이터베이스 스키마에서 연결된 사용자 삭제
Oracle 데이터베이스 서비스를 다시 시작하는 것보다 Oracle 10g 데이터베이스 스키마에서 모든 사용자를 강제로 연결 해제하는 더 좋은 방법이 있습니까?
단일 Oracle 10g 서버에서 동일한 스키마에 연결하는 SQL Developer를 사용하는 여러 개발자가 있습니다. 문제는 스키마를 삭제하여 재 구축 할 때 필연적으로 누군가가 여전히 연결되어 있고 누군가가 연결되어있는 동안 데이터베이스 스키마 또는 사용자를 삭제할 수 없다는 것입니다.
마찬가지로 다른 사람들이 여전히 연결되어 있고 해당 스키마로 테스트 할 수 있기 때문에 다른 스키마에 대한 모든 연결을 삭제하고 싶지는 않습니다.
이 문제를 해결하는 빠른 방법을 아는 사람이 있습니까?
세션을 찾으려면 DBA는
select sid,serial# from v$session where username = '<your_schema>'
SQL Developer를 사용하는 세션 만 가져 오려면 and program = 'SQL Developer'
. 특정 개발자에게 속한 세션 만 종료하려면 다음에 제한을 추가 할 수 있습니다.os_user
그런 다음 그들을 죽여
alter system kill session '<sid>,<serial#>'
(예를 들어
alter system kill session '39,1232'
)
준비된 kill-statement를 생성하는 쿼리는 다음과 같습니다.
select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = '<your_schema>'
그러면 해당 사용자에 대해 세션 당 하나의 kill 문이 반환됩니다.
alter system kill session '375,64855';
alter system kill session '346,53146';
다음 쿼리를 사용하여 DB에 대한 기존 세션을 찾습니다.
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.program
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
아래와 같은 것을 볼 수 있습니다.
그런 다음 위 결과에서 추출 된 값으로 아래 쿼리를 실행합니다.
ALTER SYSTEM KILL SESSION '<put above s.sid here>,<put above s.serial# here>';
예 : ALTER SYSTEM KILL SESSION '93, 943 ';
내 제안은 다음과 같은 간단한 익명 블록입니다.
DECLARE
lc_username VARCHAR2 (32) := 'user-name-to-kill-here';
BEGIN
FOR ln_cur IN (SELECT sid, serial# FROM v$session WHERE username = lc_username)
LOOP
EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || ln_cur.sid || ',' || ln_cur.serial# || ''' IMMEDIATE');
END LOOP;
END;
/
시스템을 변경하고 제한된 세션을 활성화했는지 확인하십시오. 그렇지 않으면 작업을 완료하기 전에 데이터베이스에 빠르게 다시 로그인합니다.
SQL을 사용하십시오.
disconnect;
conn tiger/scott as sysdba;
내 2 센트 만 : 최선의 방법 (단기적으로 가장 빠르지는 않을 것임)은 아마도 각 개발자가 자신의 데이터베이스 인스턴스에서 작업하는 것입니다 ( 데이터베이스 작업에 대한 규칙 # 1 참조 ).
Oracle Database 10g Express Edition 이후로 개발자 스테이션에 Oracle을 설치하는 것은 쉬운 일이 아닙니다 .
ALTER SYSTEM KILL SESSION을 사용해 보셨습니까? 주어진 스키마의 각 세션에 대해 V $ SESSION에서 SID 및 SERIAL #을 가져온 다음
ALTER SCHEMA KILL SESSION sid , serial # ;
'IT박스' 카테고리의 다른 글
사용자 10102와 현재 프로세스 모두 android.permission.READ_PHONE_STATE가 없습니다. (0) | 2020.11.27 |
---|---|
Error : com.android.builder.dexing.DexArchiveBuilderException : guava-21.0.jar Android 3.1 개발자 채널 처리 실패 (0) | 2020.11.27 |
Ruby에서 'Monkey Patching'은 정확히 무엇을 의미합니까? (0) | 2020.11.27 |
jQuery 슬라이드가 불안정합니다. (0) | 2020.11.27 |
OCaml 또는 Haskell의 기계 학습? (0) | 2020.11.27 |