주식회사 누리아이티

정보자산의 보안강화를 위한 다계층 인증SW (BaroPAM) 전문기업.

▶ Tuxedo/기술자료

Tuxedo 서비스 내에서 특정 SQL문만 타겟팅하여 SWITCH_GROUP을 트리거하고 싶다면

누리아이티 2026. 7. 4. 10:01
Tuxedo 서비스 내에서 특정 SQL문만 타겟팅하여 SWITCH_GROUP을 트리거하고 싶다면, 세션 전체의 그룹을 바꾸는 것이 아니라 오라클 리소스 관리자의 "Plan Directive"와 "SQL Plan Management" 또는 "SQL 별 속성"을 활용해야 한다.
 
현실적으로 오라클 리소스 매니저는 세션/유저/프로그램 단위로 제어하므로, 특정 SQL문에만 개별 스위칭을 걸려면 다음과 같은 전략이 필요하다.
 
1. 세션 컨텍스트 활용 (가장 추천)
 
특정 SQL을 실행하기 전후로 현재 세션의 Consumer Group을 일시적으로 변경하는 방식이다. 이를 통해 Tuxedo 서비스가 특정 SQL 실행 시에만 제한된 그룹으로 스스로 이동하게 할 수 있다.
 
Tuxedo 서비스 코드 예시:
 
void TUX_SVC(TPSVCINFO *rqst) {
    /* 1. 일반 업무 수행 */
    EXEC SQL ... ;
 
    /* 2. 무거운 SQL 실행 전: 강제로 제한 그룹으로 이동 */
    EXEC SQL BEGIN DECLARE SECTION;
    char *sql = "BEGIN DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP('TUX_LIMIT_GRP', ' '); END;";
    EXEC SQL END DECLARE SECTION;
    EXEC SQL EXECUTE IMMEDIATE :sql;
 
    /* 3. 무거운 작업 실행 */
    EXEC SQL SELECT /*+ PARALLEL(8) */ ... ; 
 
    /* 4. 작업 완료 후: 원래 그룹으로 복귀 */
    sql = "BEGIN DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP('TUX_OLTP_GRP', ' '); END;";
    EXEC SQL EXECUTE IMMEDIATE :sql;
 
    tpreturn(TPSUCCESS, 0, rqst->data, 0, 0);
}
 
2. 힌트(Hint)를 통한 세션 변경
 
오라클은 RESOURCE_CONSUMER_GROUP 힌트를 제공한다. 특정 SQL문 내부에 힌트를 주어 해당 SQL 실행 시에만 그룹을 적용할 수 있다.
 
SELECT /*+ RESOURCE_CONSUMER_GROUP(TUX_LIMIT_GRP) */ 
       col1, col2 
FROM heavy_table;
 
주의: 이 힌트는 모든 환경에서 즉각적으로 세션 그룹을 바꾸지 않을 수도 있다. 환경에 따라 DBMS_SESSION을 통한 명시적 호출이 훨씬 안정적이다.
 
Tuxedo 서버가 여러 서비스를 공유하므로, DBMS_SESSION으로 그룹을 변경한 후에는 반드시 원래 그룹으로 복귀시키는 commit 또는 reset 로직을 포함해야 다른 서비스에 영향을 주지 않는다.