우선 답변 감사드립니다. 답변을 다음과 같이 해주셨는데요..
------------------------------------------------------------------------------------------------------------
100% 동일한 SQL 문장인데도 불구하고 공유되지 않는 경우 Child 커서를 생성하게 됩니다.
완벽하게 똑같은 SQL이라면 유저가 다르더라도 SQL구문은 하나만 등록하여 공유하고(v$sqlarea)
구문은 같으나 실행계획이 달라야 할 경우에는 하나의 SQL구문에 Child 커서를 생성합니다(v$sql)
------------------------------------------------------------------------------------------------------------
child cursor가 생기는 이유에 대해서는 숙지를 했습니다.
그럼 v$sqlarea(parent cursor)의 module 컬럼 내용이 그대로 v$sql(child cursor)의 module 컬럼에 반영된다는
말씀이신가요? 만약 Orange에서 SELECT c2 FROM t1 WHERE c1 = :v2;를 실행을 했고
sqlplus에서 동일한 쿼리인 SELECT c2 FROM t1 WHERE c1 = :v2;를 실행을 하면 항상
Orange에서 먼저 실행한 module 이름만 v$sql에 반영이 되는 건가요?
아래 내용은
t1테이블을 testa, testb 유저에서 각각 만들었으며 SELECT c2 FROM t1 WHERE c1 = :v2;
와 같이 동일한 쿼리를 실행을 한 결과 입니다.
v$sql 내용 :
ADDRESS HASH_VALUE CHILD_NUMBE CHILD_AD PARSING_SCH MODULE
-------- ----------- ----------- -------- ----------- --------------------- ------------------
9E955860 3308946817 0 9E95577C 61 Orange for ORACLE DBA <-- testa 유저에서 Orange로 쿼리실행.
9E955860 3308946817 1 9E9371A8 62 Orange for ORACLE DBA <-- testb 유저에서 Sqlplus로 쿼리 실행
두번째 행의 Module이름은 Sqlplus가 되야 될것 같은데요??
고수님들의 많은 답변 부탁드리겠습니다. 그럼 오늘도 좋은 하루 되세요.