기술 정보
home
채널 소개
home

'outlen == enc_coldata_len - salt_size - hash_size' 조건으로 인한 Internal Error 발생

문서 유형
장애 해결
분야
관리/환경설정
키워드
Data Encryption
dd/ddl
trigger
적용 제품 버전
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS
1 more property

현상

테이블 업데이트 시 , Internal Error with condition 'bin->distinct_cnt == 1' 오류가 발생하였습니다.
참고
해당 현상은 아래 환경에서 발생한 사례입니다.
제품 : Tibero
버전 : Tibero6 FS06_CS_1902
테이블 업데이트 수행
에러 없이 테이블 업데이트가 수행되어야 합니다.
SQL> UPDATE GEN_ADM.GSLYT016 SET CAMPS_SE_CODE='1' WHERE YETA_YY='2024' AND EMPNO=XXXX AND WORK_BEGIN_DE='20240501';
SQL
복사
sys 로그 확인
Internal Error with condition 'outlen == enc_coldata_len - salt_size - hash_size' 에러가 발생하며 세션 끊어짐이 확인됩니다.
[07-16T16:03:57.804641] [COM-789] [I] Internal Error with condition 'outlen == enc_coldata_len - salt_size - hash_size' (secu_tde.c:760) (pid=19878, sessid=789, tid=789, os_thr_id=4) [07-16T16:04:00.823545] [FRM-789] [I] THROW. ec=ERROR_SESS_KILLED(-12001) [ Session has been closed. ] (csr_id:3) [tbsvr_tracedump.c:294:tb_thr_assert_cmd] [07-16T16:17:15.853960] [FRM-57] [I] SEND STMT_CANCEL SIGNAL to 678 [07-16T16:17:15.854298] [FRM-678] [I] GET STMT_CANCEL SIGNAL (sessid=678 sess_status=4 tid=678 thr_status=5)
SQL
복사

원인

암호화 컬럼+인덱스+트리거 동시 존재하는 테이블에 업데이트 시 에러 발생
1.
암호화된 컬럼, 인덱스, 트리거가 모두 존재하는 테이블에 대해 UPDATE 문을 실행합니다.
2.
해당 UPDATE 문은 대상 컬럼의 값을 변경하며, 이 과정에서 인덱스 키 값도 갱신됩니다.
3.
이때, UPDATE 대상 컬럼이 아니더라도 내부 로직상 암호화 컬럼의 해시 값이 갱신되는 동작이 수행됩니다.
4.
해시 값 갱신 과정에서 중복된 해시 값 수정이 시도되며 충돌이 발생합니다.
5.
이후 실행되는 트리거에서 위 충돌로 인해 트랜잭션 처리(UPDATE 및 트리거 실행)가 실패하게 됩니다.
6.
UPDATE 문이 롤백되며, 내부 오류(Internal error)가 발생하고 세션이 비정상적으로 종료됩니다.

해결

328713 패치를 적용합니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
참고
SET 절에 암호화된 컬럼을 동일한 값으로 넣어주는 더미 조건을 추가함으로써, 해당 오류를 우회할 수 있습니다.
SQL> UPDATE GEN_ADM.GSLYT016 SET CAMPS_SE_CODE='1', YETA_RRNO=YETA_RRNO WHERE YETA_YY='2024' AND EMPNO=XXXX AND WORK_BEGIN_DE='20240501';
SQL
복사