현상
테이블 업데이트 시 , 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
복사