문서유형ㅣ장애해결
분야ㅣ관리/환경설정
적용제품버전ㅣTibero 7.2.3
오류코드ㅣTBR-12111
문서번호ㅣTADTS070
현상
APPEND 사용 후 바로 같은 테이블에 APPEND insert 사용 시 TBR-12111 오류가 발생할 수 있습니다.
예시
/* TR TR_RE_01 */ INSERT /*+ APPEND */ INTO TAML_ODM_TRUST_EVENT_RULE (CUST_ID,RULE_ID,STND_DATE,CRET_DATE) (SELECT A.CUST_NUM AS CUST_ID, 'TR_RE_01' AS RULE_ID , ... /* TR TR_RE_02 */ INSERT /*+ APPEND */ INTO TAML_ODM_TRUST_EVENT_RULE (CUST_ID,RULE_ID,STND_DATE,CRET_DATE) ( SELECT CUST_ID, ...
- HWM 이후 영역 적재:
APPEND hint를 사용하여 데이터가 테이블의 High Water Mark (HWM) 이후에 할당되지 않은 영역에 직접 기록됩니다. - 데이터 접근 불가능: HWM이 이동하여 새로운 데이터 영역을 공식적으로 포함하기 전까지는, 데이터를 삽입한 자신의 세션(현재 트랜잭션)을 포함하여 어떤 세션도 새로 삽입된 데이터에 접근할 수 없습니다.
- Violations: 두 번째
INSERT /*+ APPEND */를 시도하거나, 삽입 후SELECT또는 다른DML을 시도하면, 시스템은 유효하지 않은 데이터 영역에 접근하려는 시도로 간주하고ERROR_ACCESS_AFTER_DPL_VIOLATION에러를 발생시켜 막습니다. - 트랜잭션 제한: Direct Insert는 **트랜잭션이 종료(COMMIT 또는 ROLLBACK)**되어야 HWM이 이동하고 데이터가 최종적으로 확정되면서 다른 세션 및 자기 세션에서 접근 가능해집니다.
참고
TBR-12111 오류정보 : ERROR_ACCESS_AFTER_DPL_VIOLATION
- /*
- * err: -12111
- * name: ERROR_ACCESS_AFTER_DPL_VIOLATION
- * desc: Unable to read or modify an object after modifying it with DPL/DPI. 설명: DPL/DPI로 객체를 수정한 후에는 해당 객체를 읽거나 수정할 수 없습니다.
- * cause: An attempt was made to read or modify a table which was already modified with DPL/DPI in the current transaction. 원인: 현재 트랜잭션에서 DPL/DPI로 이미 수정된 테이블을 읽거나 수정하려는 시도가 있었습니다.
- * action: This command cannot be executed.; 조치: 이 명령은 실행될 수 없습니다.
- */
원인
Append를 이용한 direct insert의 경우 동일한 transaction 제한을 가지게 됩니다.
(commit하기 전까지 자기가 수정한 데이터를 보지 못 하는 특성)
direct insert의 경우 아직 할당받지 않은 high water mark 이후의 영역에 데이터를 insert 하게 되므로 그 어떤 세션(자신 포함)에서도 select 나 DML을 통해 해당 데이터에 접근할 수 없습니다.
따라서 commit/rollback 전에 select나 DML을 제한하는 로직으로 구성되어 오류가 발생합니다.
해결
하나의 쿼리 수행이 끝난 후 순차적으로 commit 사용할 것을 권장합니다.