기술 정보
home
채널 소개
home

Tibero 7.2.2로 패치 후 TBR-15196 에러 발생

문서 유형
장애 해결
분야
패치/업그레이드
키워드
compile
result_cache
적용 제품 버전
7FS02PS
오류 코드
15196

현상

Tibero 7.2.1에서 7.2.2로 패치 후 오브젝트 컴파일 시 RESULT CACHE 구문 사용하는 오브젝트 TBR-15196: RESULT_CACHE OPTION is not allowed. 에러가 발생하여 INVALID 상태로 변경되는 현상입니다.
아래와 같은 상황에서 result cache 구문을 사용할 경우 컴파일 에러가 발생합니다.
1.
함수에 in, in/out 파라미터가 있을 경우
2.
리턴 혹은 파라미터의 타입이 BLOB, CLOB, NCLOB, REF CURSOR, COLLECTION, OBJECT RECORD가 존재할 경우
3.
PIPELINE 함수일 경우

원인

Tibero 7.2.2에 result cache function의 제약사항을 Oracle 스펙에 맞게 개선한 322411a 패치가 반영되어 해당 구문에 대하여 컴파일을 막아 에러가 발생하였습니다.

해결

1. INVALID 상태 변경

result cache 구문을 사용하는 psm들에 대하여 강제 재컴파일을 시도하여, 변경된 스펙에서 해당 psm 오브젝트 컴파일 실패로 인해 INVALID 상태로 변경합니다.
SQL> set serveroutput on; SQL> DECLARE DDL VARCHAR2(2000); begin for rec in (select * from SYS._DD_PSMUNIT unit, SYS._DD_PSMMEMBER mem, ALL_OBJECTS obj where unit.obj_id = mem.OBJ_ID and unit.obj_id = obj.object_id and BITAND(mem.property , 67108864) = 67108864) loop begin DDL := 'ALTER ' || rec.object_type || ' ' || rec.owner || '.' || rec.object_name || ' COMPILE FORCE'; DBMS_OUTPUT.PUT_LINE('recompile '||rec.object_type||' : '||rec.owner||'.'||rec.object_name); EXECUTE IMMEDIATE DDL; exception when others then DBMS_OUTPUT.PUT_LINE('ERROR recompiling'||rec.object_type||'.'||rec.object_name||'-'||SQLERRM); end; end loop; end; /
SQL
복사

2. 재컴파일 시도

1번의 절차로 인하여 INVALID로 변경된 psm 오브젝트에 대하여 result cache 옵션을 제거(원본 pms 구문 수정 필요)하고 재컴파일 시도합니다.
아래의 경우 PIPELINE 함수로 인하여 패치 후 INVALID된 예시입니다.
TIBERO.TEST PACKAGE 내에 RETURN T_LIST RESULT_CACHE PIPELINED; 구문이 존재합니다.
2.1) 패치 후 1번 SQL 실행으로 강제 재컴파일 시도합니다.
recompile PACKAGE : TIBERO.TEST ERROR recompilingPACKAGE.TEST-TBR-7283: Success with compilation errors.
SQL
복사
2.2) TIBERO.TEST가 VALID 상태에서 INVALID 상태로 변경됩니다.
2.3) RESULT CACHE 구문 제거 후 재컴파일합니다.
RETURN T_LIST RESULT_CACHE PIPELINED; -> RETURN T_LIST PIPELINED;
2.4) TIBERO.TEST VALID 상태로 변경 확인합니다.