현상
savepoint 등록 시 할당받은 메모리에 대해서 redzone 에러가 발생했습니다.
-- sys.log
[2025-04-08T15:25:04.096365] [COM-298] [I] Internal Error with condition '!"false"' (alloc_dbginfo.h:388) (pid=21662, sessid=298, tid=298, os_thr_id=22068)
[2025-04-08T15:25:04.130276] [COM-00] [I] Internal Error with condition '!"Reaping a dead working thread " "in a critical section"' (1 args) (tbsvr_mthr.c:1001:mthr_reap_thr) (pid=21397, sessid=0, tid=0)
[2025-04-08T15:27:52.622992] [FRM-00] [I] show OS info
-- tbsvr.out
REDZONE CHECK ERROR. (malloc from:filename=/home/autodist/build_20200327_141138/tibero6/src/tbsvr/tx/tx.c, line=2805, size=184
FRONT REDZONE:
0000: A7 A7 A7 A7 A7 A7 A7 A7 ........
REAR REDZONE:
0000: 4F 52 47 5F 4E 4D 3D EC ORG_NM=.
[298] 2025/04/08 15:25:04.096 Internal Error with condition '!"false"' (alloc_dbginfo.h:388) (pid=21662, sessid=298, tid=298, os_thr_id=22068)
[298] client : ip [10.10.161.146] process [Studio] logon time : [2025/04/08 14:50:23]
[298] prev sql : "SELECT * FROM DUAL"
[298] current sql : "NULL"
[298] *** 2025/04/08 15:25:04.101 ***
[298] callstack dump from tbsvr_WP014 for [WTHR, 298, 22068/21662]
Thread #298 (Session #298): tb_thread_exit: (signo:0, sigtype:15)
Tibero: wthr killed. (pid=21662, tid=298 spinlock cnt=1)
SPINLOCK DUMP: TID 298
SPINLOCK PTR = 00007f3d0e575418 lock = 0 type = SPIN_SHP_ALLOC_MISC
level=13
tid = 298 spin_idx = 0
[0] Internal Error with condition: '!"Reaping a dead working thread " "in a critical section"' (1 args) (tbsvr_mthr.c:1001:mthr_reap_thr) (pid=21397, sessid=0, tid=0)
tid = 298 = 298 = 0x12a
[0] client : ip [] process [] logon time : []
[0] prev sql : "NULL"
[0] current sql : "NULL"
[0] *** 2025/04/08 15:25:04.133 ***
[0] callstack dump from tbsvr for [MPROC, 0, 21397/21397]
[0] ***** FATAL ASSERT (PID = 21397, TID = 0, SESSID = 0):
***** tbsvr_tracedump.c:280 (tb_svr_assert_cmd): Assertion 'false' failed.
***** Program: tbsvr -startup -t NORMAL -SVR_SID EIMSP01
--memlog
savepoint crmresend10
2025/04/08 15:22:54.346048 CSR_ID:243 SELECT * FROM DUAL
2025/04/08 15:22:56.755590 CSR_ID:244 UPDATE CRM_LOG
SET PARAMETER_send = CONCAT(PARAMETER_send, '^SALE_OPTY_ORG_CD=E72^CFGRT_ORG_CD=E72^CFGRT_ORG_NM=동탄호수공원')
WHERE id = 977963
SQL
복사
원인
티베로는 savepoint name 지정시 길이가 128을 초과하지 못하는 제약사항이 있습니다.
SQL> savepoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3;
TBR-23007: Identifier is too long.
SQL
복사
하지만 패키지를 통해 savepoint 를 등록할 경우, 이 제한을 초과하여 등록이 가능해지는 문제가 발생할 수 있습니다.
SQL> create table t1 (c1 number);
SQL> insert into t1 values(1); insert into t1 values(2);
SQL> insert into t1 values(3); insert into t1 values(4);
SQL> commit;
SQL> BEGIN
DBMS_TRANSACTION.SAVEPOINT('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3');
INSERT INTO T1 VALUES (5);
END;
SQL> EXEC DBMS_TRANSACTION.ROLLBACK_SAVEPOINT('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3');
TBR-2131: Generic I/O error.
SQL
복사
해결
1.
패치를 적용해 해결합니다. (적용 패치: 318819)
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
2.
회피책을 설정하여 오류 해결을 시도할 수 있습니다.
•
영구 우회 회피책: 패키지를 통한 savepoint 지정 시, name 길이가 128을 넘지 않도록 지정합니다. (사이드 이펙트가 없음)