Oracle 10g 데이터베이스 스키마에서 연결된 사용자 삭제
Oracle 데이터베이스 서비스를 재시작하는 것보다 Oracle 10g 데이터베이스 스키마에서 모든 사용자의 연결을 강제로 끊는 더 좋은 방법이 있습니까?
SQL Developer를 사용하는 여러 개발자가 단일 Oracle 10g 서버에서 동일한 스키마에 접속하고 있습니다.문제는 스키마를 재구축하기 위해 스키마를 폐기하는 경우 불가피하게 누군가가 접속되어 있기 때문에 누군가가 접속되어 있는 동안에는 데이터베이스 스키마 또는 사용자를 폐기할 수 없다는 것입니다.
마찬가지로 다른 사용자가 다른 스키마에 접속하여 해당 스키마를 사용하여 테스트하는 경우가 있기 때문에 다른 스키마에 대한 모든 연결을 끊고 싶지 않습니다.
이 문제를 빨리 해결할 방법을 아는 사람?
세션을 찾으려면 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 문을 생성하는 쿼리는 다음과 같습니다.
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>';
예: 시스템 킬 세션 '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;
/
종료하기 전에 시스템을 변경하고 제한된 세션을 활성화하십시오. 그렇지 않으면 작업이 완료되기 전에 시스템이 데이터베이스에 빠르게 다시 로그인됩니다.
단, 최적의 방법(단기적으로는 가장 빠르지 않을 수 있음)은 각 개발자가 자신의 데이터베이스 인스턴스에서 작업하는 것입니다(데이터베이스 작업에 대해서는 규칙 #1 참조).
Oracle Database 10g Express Edition 이후 개발자 스테이션에 Oracle을 설치하는 것은 쉬운 일이 되었습니다.
ALTER SYSTEM KILL SESSION을 사용해 본 적이 있습니까?V$SESSION에서 SID와 시리얼 번호를 취득하여 다음 작업을 수행합니다.
ALTER SCHEMA KILL SESSION sid,serial#;
SQL만 사용:
disconnect;
conn tiger/scott as sysdba;
언급URL : https://stackoverflow.com/questions/85804/dropping-a-connected-user-from-an-oracle-10g-database-schema
'programing' 카테고리의 다른 글
| TypeError: $.ajax(...)는 함수가 아닙니다. (0) | 2023.03.26 |
|---|---|
| 모바일 디바이스에서 MAMP/wordpress를 사용하여 로컬 서버를 테스트하고 있습니까? (0) | 2023.03.26 |
| C#의 Newtonsoft를 사용하여 JSON 차이를 찾아 반환하시겠습니까? (0) | 2023.03.26 |
| pretty는 .tsx 파일을 포맷하지 않습니다. (0) | 2023.03.26 |
| AssertionError: .accepted_renderer가 django 및 ajax의 응답으로 설정되지 않음 (0) | 2023.03.26 |