현상
XMLTYPE 관련된 오류로, 특정 MERGE INTO 쿼리 수행 시 세그멘테이션 오류(이하 SIGSEGV)가 발생하며 세션이 끊어집니다.
(아웃파일)
[87] *** 2024/07/02 16:29:33.387 *** Signal 11 (SIGSEGV) caught (TID = 87, SESSID = 87, OS_THR_ID = 25070, PID = 24892): si_addr = 0000000000000000 : the cause of the signal can be found in a process callstack file.
[87] Thread stack: 00007faa1afe0000--00007faa1b7f0000
[87] client : ip [203.247.70.62] process [python.exe] logon time : [2024/07/02 16:11:30]
[87] prev sql : "
MERGE INTO TB_CCTV_DISTING_DATA TBCDD
USING DUAL ON (TBCDD.EQMT_ID = '0550C00037')
WHEN MATCHED THEN
UPDATE SET
TBCDD.ANALY_DT = to_date('20240702 162403', 'YYYYMMDD HH24MISS'),
TBCDD.WEATHER_DISCERN_CD = '00',
TBCDD.DAY_CD = '1',
TBCDD.THUMB_IMG = ?
WHEN NOT MATCHED THEN
INSERT (
TBCDD.EQMT_ID,
TBCDD.ANALY_DT,
TBCDD.WEATHER_DISCERN_CD,
TBCDD.DAY_CD,
TBCDD.THUMB_IMG
(ppdump)
Binding [csr_id=5944]:
param #0: type=BLOB,len=0,val=[(null)]
param #1: type=BLOB,len=0,val=[(null)]
EX dump:
ppn id: 1
PP dump: /sw/tibero/tibero6/instance/kma_monitor/dump/tracedump/pp2xml.39.xml
op node: 36 OP_MERGE
cols L:
colcnt=20
col 0: [11]
0000: 0A DB 15 00 00 CB 54 DE 20 21 00 ......T. !.
col 1: [11]
0000: 0A 30 35 35 30 43 30 30 30 33 37 .0550C00037
col 2: [9]
0000: 08 78 7C 07 02 10 0D 37 00 .x|....7.
col 3: [NULL dtv]
col 4: [NULL dtv]
col 5: [2]
0000: 01 31 .1
col 6: [3]
0000: 02 30 30 .00
col 7: [NULL dtv]
col 8: [NULL dtv]
col 9: [NULL dtv]
col 10: [NULL dtv]
col 11: [NULL dtv]
col 12: [NULL dtv]
col 13: [NULL dtv]
col 14: [NULL dtv]
col 15: [NULL dtv]
col 16: [NULL dtv]
col 17: [NULL dtv]
col 18: [97]
0000: 60 4D 7E 01 01 12 00 00 00 DD 60 77 0D 00 00 00 M~.......w....
0010: 00 00 00 00 00 0D 00 08 00 16 6E 27 00 00 00 00 ..........n'....
0020: 00 15 B1 CA F4 01 00 00 00 47 0C 8F 00 32 71 2C .........G...2q,
0030: 00 32 71 00 00 00 00 00 00 DC 15 00 00 CB 54 DE .2q...........T.
0040: 20 21 00 00 00 00 00 00 00 20 CF 49 D5 AE 7F 00 !....... .I....
0050: 00 DB 15 00 00 00 00 00 00 FF FF FF 7F FF FF FF ................
0060: 7F .
col 19: [NULL dtv]
cols R:
colcnt=0
Thread #87 (Session #87): tb_thread_exit: (signo:11, sigtype:15)
Process #3 get restart thread (#87) msg
(콜스택)
Thread 6 (Thread 0x7faa1b7e7700 (LWP 25070)):
#0 0x00007fb06b3cc41d in nanosleep () from /lib64/libc.so.6
#1 0x00007fb06b3fd014 in usleep () from /lib64/libc.so.6
#2 0x0000000000ebf182 in sync_sig_handler (signo=11, siginfo=0x7faa080104b0, context=0x7faa08010380) at /home/autodist/build_20171205_213246/tibero6/src/tbsvr/frame/tbsvr_signal.c:1524
#3
#4 0x0000000001c9af07 in expcn_reset (expcn=0x7faa2a532ce0, expcn_regs=0x7faa2a53b588) at /home/autodist/build_20171205_213246/tibero6/src/tbsvr/ex/expcn.c:595
#5 0x0000000001c3e8ad in ex_reset_expcn (ex=0x7faa2a531e58, is_recovery=) at /home/autodist/build_20171205_213246/tibero6/src/tbsvr/ex/ex.c:428
#6 0x0000000001c711fb in csr_close (csr=0x7faf18f0b7c0, is_recovery=160 '\240') at /home/autodist/build_20171205_213246/tibero6/src/tbsvr/ex/csr.c:1692
#7 0x0000000000e98ade in so_csr_marker_cleanup (so=0x1, sessid=, flag=144 '\220') at /home/autodist/build_20171205_213246/tibero6/src/tbsvr/frame/so_registry.c:163
#8 0x0000000000e91d60 in so_cleanup_after (id=87, so_list=0x7faa2d0cd040, marker=0x7faf18ef6870) at /home/autodist/build_20171205_213246/tiber
SQL
복사
원인
유효하지 않은 주소값의 정보를 사용하여 발생한 현상 입니다.(temp lob관련)
XMLType 데이터 삽입 시 형식에 맞지 않는 입력값에 대한 에러 처리가 누락되어, 비정상적인 입력값을 사용하는 경우 temp lob 참조가 발생하여 SIGSEGV 가 발생합니다.
해결
xmltype에 형식에 맞지 않게 insert 시 에러 처리 될 수 있도록 패치를 적용해 해결합니다.
(적용패치: 6 FS06_CS_145041a)
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.