현상
DB Link 를 통해 PSM 수행 시 컴파일 TBR-8164 에러가 발생합니다.
컴파일 에러 발생
SQL> show error;
Errors for Procedure MTCFP.SP_SDR_WORK_OPERATION:
ERROR DESCRIPTION
--------------------------------------------------------------------------------
TBR-8164: Unable to convert data due to character set mismatch.
at line 60, column 13 of null:
select b.site_code site_id, b.worder, b.wchasu,
^
1 row selected.
SQL
복사
sys.log 및 gateway log 에 아래와 같은 에러 메세지 발생
[10-06T16:52:20.959921] [FRM-378] [I] THROW. ec=ERROR_DML_DIFF_CHARSET_NOT_PERMITTED(-8164) [ Unable to convert data due to character set mismatch.] (csr_id:4294967295)
[dml_dblink.c:282:dml_dblink_make_lp_column]
SQL
복사
원인
Tibero와 Gateway 간에 문자셋(CHARSET) 차이가 존재할 시, 해당 차이로 인해 DML 문이 실패하는 현상이 발생할 수 있습니다. 이 경우, CHARSET의 영향을 받는 쿼리는 실행되지 않으며 오류가 반환됩니다.
해결
_ALLOW_DIFF_CHARSET_INSTANCE=Y 파라미터를 활성화함으로써 문자셋(CHARSET)의 차이가 있더라도 쿼리가 정상적으로 수행되도록 설정할 수 있으며, 이를 통해 관련 오류를 방지할 수 있습니다.
파라미터 동적 적용
QL> ALTER SYSTEM SET _ALLOW_DIFF_CHARSET_INSTANCE = ‘Y';
System altered.
SQL> select name, value, dflt_value, is_dynamic
from vt_parameter
where name in(' _ALLOW_DIFF_CHARSET_INSTANCE ');
NAME VALUE DFLT_VALUE IS_DYNAMIC
------------------------------- ---------- ---------- -----------
_ALLOW_DIFF_CHARSET_INSTANCE YES NO 1
SQL
복사
TIP 파일 영구 적용
]$ vi $TB_HOME/config/$TB_SID.tip
_ALLOW_DIFF_CHARSET_INSTANCE=Y
SQL
복사
참고
다른 인코딩 간의 DB Link 를 허용하는 경우, 인코딩 차이로 인해 문자열 자체가 깨져보일 수 있습니다.