DBEAVER, TOAD와 같은 일부 SQL툴에서는 자동으로 쿼리를 실행시키기 때문에 마지막에 실행한 실행계획을 보기 어렵다
* DBEAVER 증상
BEGIN DBMS_OUTPUT.GET_LINE(:1, :2); END;
SELECT SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA' ) FROM DUAL
SET SERVEROUTPUT OFF => org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [922] [42000]: ORA-00922: 누락된 또는 부적합한 옵션
* TOAD 증상
SELECT * FROM DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL , 'ALLSTATS LAST -ROWS +ALIAS +OUTLINE')
=> 플랜에 이대로 표시
DBMS_XPLAN.DISPLAY_CURSOR를 사용할 땐 SQL_ID를 기준으로 실행계획을 봐야한다.
아니면 CTRL+SHIFT+E 눌러 실행계획을 봐야하는데 이 실행계획은 OPTIMIZER에서 제공하는 실행계획으로
정확하다고 보기 어렵다.
매번 SQL_ID를 입력하는게 번거로워 간단히 볼 수 있는 쿼리를 작성했다.
SQL_ID로 실행계획 확인하는 방법 DBMS_XPLAN.DISPLAY_CURSOR
/* 이런 메세지가 뜬다면 권한이 없다는 내용으로 해당 세션에 권한을 부여한다
NOTE: cannot fetch plan for SQL_ID: , CHILD_NUMBER: 0
Please verify value of SQL_ID and CHILD_NUMBER;
It could also be that the plan is no longer in cursor cache (check v$sql_plan) */
ALTER SESSION SET STATISTICS_LEVEL=ALL;
SELECT *
FROM
TABLE/* KEYWORD */;
SELECT S.SQL_ID, S.SQL_TEXT,
DBMS_XPLAN.DISPLAY_CURSOR(S.SQL_ID, NULL, 'ALLSTATS LAST -ROWS +ALIAS +OUTLINE') AS PLAN
FROM
V$SQLTEXT S
WHERE
S.SQL_TEXT LIKE '%KEYWORD%'
AND S.COMMAND_TYPE = 3
ORDER BY SQL_TEXT DESC;
'DB > Oracle DB' 카테고리의 다른 글
ORACLE INTERVAL 윤년 윤달 (0) | 2024.02.29 |
---|---|
tnsnames.ora 위치 (0) | 2022.11.04 |
ORACLE 프로시저 호출 변수 선언 (0) | 2022.06.08 |
Oracle 설치 없이 Toad 사용하기 (0) | 2021.09.01 |
ORACLE SQL 팁 - 특정 컬럼 SELECT (0) | 2020.07.05 |