OS 환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c session crash 시키기
오라클 환경에서 세션을 강제로 충돌을 발생시켜 종료시키는 방법을 설명함
방법은 간단함 이벤트명 뒤에 crash 를 붙여주면 됨
예시
1
|
SQL> alter session set events '<event name> crash';
|
테스트
1. 본인 세션 즉시 종료
2. parse 실패한 세션 강제 종료
3. 특정 에러 발생시 강제 종료
테스트
1. 본인 세션 즉시 종료
1
2
3
4
5
6
7
|
SQL> alter session set events 'immediate crash';
alter session set events 'immediate crash'
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 15951
Session ID: 20 Serial number: 8709
|
ORA-03113이 발생하며 세션이 종료됨
alert log에는 별다른 내용이 남지 않음
마지막에 생성된 트레이스 파일 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
$ vi oracle19_ora_15951.trc
Trace file /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace/oracle19_ora_15951.trc
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Build label: RDBMS_19.3.0.0.0DBRU_LINUX.X64_190417
ORACLE_HOME: /ORA19/app/oracle/product/19.0.0/db_1
System name: Linux
Node name: ora19
Release: 4.18.0-147.el8.x86_64
Version: #1 SMP Tue Nov 12 11:05:49 PST 2019
Machine: x86_64
Instance name: oracle19
Redo thread mounted by this instance: 1
Oracle process number: 36
Unix process pid: 15951, image: oracle@ora19 (TNS V1-V3)
*** 2024-04-21T09:59:16.645058+09:00
*** SESSION ID:(20.8709) 2024-04-21T09:59:16.645076+09:00
*** CLIENT ID:() 2024-04-21T09:59:16.645079+09:00
*** SERVICE NAME:(SYS$USERS) 2024-04-21T09:59:16.645082+09:00
*** MODULE NAME:(sqlplus@ora19 (TNS V1-V3)) 2024-04-21T09:59:16.645085+09:00
*** ACTION NAME:() 2024-04-21T09:59:16.645088+09:00
*** CLIENT DRIVER:(SQL*PLUS) 2024-04-21T09:59:16.645090+09:00
Shadow_Core_Dump = partial
ksdbgcra: writing core file to directory '/ORA19/app/oracle/diag/rdbms/oracle19/oracle19/cdump'
|
트레이스 파일에 나와있는 경로의 파일 확인
1
2
3
|
$ cd /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/cdump/core_15951
$ ls
(파일 미존재)
|
세션이 강제로 종료되여 core dump 가 발생했다고 나오지만
실제로 파일을 보면 아무것도 남지 않았음
2. parse 실패한 세션 강제 종료
이전게시글에서 설명한 parse 실패한 세션에 대해서도 crash 를 발생시켜 세션을 종료시킬 수 있음
참고 : 오라클 19c parse 실패에 대한 트레이스 걸기 ( https://positivemh.tistory.com/1084 )
트레이스 설정 후 존재하지 않는 테이블을 조회하는 sql 실행
1
2
3
4
5
6
7
8
9
10
11
|
SQL> alter session set events 'parse_sql_statement crash';
Session altered.
SQL> select abc from def;
select abc from def
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 19862
Session ID: 780 Serial number: 22025
|
parse가 실패한뒤 바로 세션이 종료됨
alert log 에는 따로 로그가 남지않음
3. 특정 에러 발생시 강제 종료
특정에러가 발생했을때 트레이스를 남길수 있음, 이 경우에도 동일하게 충동을 일으켜 강제 종료시킬 수 있음
참고 : 오라클 11gR2 특정에러 trace 확인, 에러스택 확인 ( https://positivemh.tistory.com/946 )
샘플 테이블 생성(number type 컬럼)
1
2
3
|
SQL> create table test1 (col1 number);
Table created.
|
데이터 삽입(문자형)
1
2
3
4
5
|
SQL> insert into test1 values ('a');
insert into test1 values ('a')
*
ERROR at line 1:
ORA-01722: invalid number
|
number 형의 컬럼에 문자를 넣으려고 하면 ORA-01722 에러가 발생함
1722 에러에 대해 트레이스 crash 설정
1
2
3
|
SQL> alter system set events '1722 crash';
System altered.
|
데이터 삽입(문자형)
1
2
3
4
5
6
7
|
SQL> insert into test1 values ('A');
insert into test1 values ('A')
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 20905
Session ID: 2 Serial number: 13200
|
쿼리 실행 시 바로 세션이 종료됨
alert log 에는 따로 로그가 남지않음
참조 :
https://positivemh.tistory.com/946
https://positivemh.tistory.com/1084
https://oraclue.wordpress.com/2009/03/05/crash-and-debugger-events/
'ORACLE > Admin' 카테고리의 다른 글
오라클 OCI 2024 Generative AI Professional 무료 강의 및 무료 자격증 (0) | 2024.05.02 |
---|---|
오라클 23ai 신기능 update 시 default on null for update (0) | 2024.04.26 |
오라클 19c parse 실패에 대한 트레이스 걸기 (0) | 2024.04.21 |
오라클 19c 체크포인트 발생 상황 테스트(기타 체크포인트) (0) | 2024.04.12 |
오라클 19c 체크포인트 발생 상황 테스트(테이블스페이스 체크포인트) (0) | 2024.04.12 |