IT박스

Oracle 10g 데이터베이스 스키마에서 연결된 사용자 삭제

itboxs 2020. 11. 27. 07:55
반응형

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

아래와 같은 것을 볼 수 있습니다. Oracle 세션

그런 다음 위 결과에서 추출 된 값으로 아래 쿼리를 실행합니다.

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

참고 URL : https://stackoverflow.com/questions/85804/dropping-a-connected-user-from-an-oracle-10g-database-schema

반응형