OS 환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c parse 실패에 대한 트레이스 걸기
오라클에서 일반적으로 sql 을 실행하면 parsing(Syntax Check, Semantic Check, Shared Pool Check) 과정 그리고 SQL Optimization, SQL Row Source Generation 과정을 거쳐 sql이 최종적으로 실행됨
제일 초기 파싱 과정에서 문제가 발견되면 sql을 실행한 세션창에만 에러가 발생하면서 sql이 실행되지 않음
파싱 과정에서 문제가 발생했을때 alert log에 에러가 남게 할 수 있는 트레이스를 걸수있음
아래와 같이 parse_sql_statement debugger 이벤트를 걸거나 10035 트레이스를 걸면됨
테스트
존재하지 않는 테이블을 조회하는 sql 실행
1
2
3
4
5
|
SQL> select col1 from ttt;
select col1 from ttt
*
ERROR at line 1:
ORA-00942: table or view does not exist
|
sql을 실행한 세션에서만 에러가 발생함
alert log에는 어떤 에러도 발생하지 않음
트레이스 설정
1
2
3
4
5
6
7
8
9
|
SQL> alter session set events 'parse_sql_statement debugger';
Session altered.
or
SQL> alter session set events '10035 trace name context level 12, forever';
Session altered.
|
존재하지 않는 테이블을 조회하는 sql 재실행
1
2
3
4
5
|
SQL> select col1 from ttt;
select col1 from ttt
*
ERROR at line 1:
ORA-00942: table or view does not exist
|
sql을 실행한 세션에서 에러가 발생함
alert log 확인
1
2
3
4
5
6
7
|
2024-04-21T09:47:20.252198+09:00
PARSE ERROR: ospid=9505, error=942 for statement:
2024-04-21T09:47:20.252268+09:00
select col1 from ttt
Additional information: hd=0xb850e868 phd=0xb854b698 flg=0x20 cisid=0 sid=0 ciuid=0 uid=0 sqlid=9rmtjd8dnrnyy
...Current username=SYS
...Application: sqlplus@ora19 (TNS V1-V3) Action:
|
alert log 에 parse 정보를 포함한 내용이 저장됨
2번 째 줄 : ospid 및 에러번호
4번 째 줄 : parse 에러가 발생한 sql
5번 째 줄 : 추가 정보 sqlid 등
6번 째 줄 : sql을 실행한 유저 정보
7번 째 줄 : client 접속 정보
참조 :
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/sql-processing.html
'ORACLE > Admin' 카테고리의 다른 글
오라클 23ai 신기능 update 시 default on null for update (0) | 2024.04.26 |
---|---|
오라클 19c session crash 시키기 (0) | 2024.04.23 |
오라클 19c 체크포인트 발생 상황 테스트(기타 체크포인트) (0) | 2024.04.12 |
오라클 19c 체크포인트 발생 상황 테스트(테이블스페이스 체크포인트) (0) | 2024.04.12 |
오라클 19c 체크포인트 발생 상황 테스트(스레드 체크포인트) (0) | 2024.04.10 |