OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c sql 취소 기능(alter system cancel sql)
오라클 18c 버전부터 내 세션의 sql 이 아닌 다른 세션의 sql 을 kill이 아닌 취소를 할수 있게됨
오래 실행되는 sql을 수행중인 세션을 kill 하는것이 아니라 sql 만 취소시킬 수 있음
dml문의 경우 이 기능을 이용해 세션 sql을 취소하면 dml이 롤백됨
테스트해본결과 sqlplus 에서 Ctrl+C를 눌려 캔슬하는것처럼 동작되는듯함
아래와 같이 사용가능함
구문
1
|
SQL> alter system cancel sql 'sid, serial, @inst_id, sql_id';
|
kill 구문과 비슷하게 sid와 serial이 들어감, 그리고 rac인 경우 instance_id 를 넣어줄 수 있음, 그리고 sql_id 지정이 가능함
테스트
세션1 sid 확인
1
2
3
4
5
|
SQL> select sid, serial# from v$mystat where rownum <= 1;
SID
----------
142
|
오래 걸리는 쿼리 수행
1
2
|
SQL> select count(*) from dba_segments, dba_segments;
(실행중)
|
세션2에서 세션1 sid, serial# 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
set lines 200 pages 1000
col username for a10
col sql_text for a50
select s.sid, s.serial#, s.username, s.sql_id, q.sql_text
from v$session s, v$sql q
where s.sql_id = q.sql_id
and s.username = 'SYS'
and s.sid = 142;
SID SERIAL# USERNAME SQL_ID SQL_TEXT
---------- ---------- ---------- ------------- --------------------------------------------------
142 33381 SYS 9xa63mc99x00u select count(*) from dba_objects, dba_objects
142 33381 SYS 9xa63mc99x00u select count(*) from dba_objects, dba_objects
|
세션1의 sql 취소
1
2
3
|
SQL> alter system cancel sql '142, 33381, 9xa63mc99x00u';
System altered.
|
세션1 확인
1
2
3
4
|
SQL> select count(*) from dba_objects, dba_objects
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
|
sql이 정상적으로 취소됨(Ctrl+C 를 눌려 취소한것과 같은 에러메세지가 발생함)
참조 :
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-processes.html#GUID-7D8E5E00-515D-4338-8B86-C2044F6D2957
https://oracle-base.com/articles/18c/alter-system-cancel-sql-18c
'ORACLE > Admin' 카테고리의 다른 글
오라클 23ai 신기능 자동 인덱스 개선 (0) | 2024.11.21 |
---|---|
오라클 23ai 신기능 Parallel DML 에 대한 트랜잭션 제한 해제 (0) | 2024.11.18 |
오라클 23ai 신기능 스테이징 테이블(Staging) (0) | 2024.11.08 |
오라클 23ai 신기능 스키마 레벨 권한 부여 (0) | 2024.11.05 |
오라클 23ai 신기능 sql 이력 확인뷰 v$sql_history (0) | 2024.10.31 |