기술 정보
home
채널 소개
home

Internal Error with condition 'str_len % 2 == 0' 오류 발생

문서 유형
장애 해결
분야
패치/업그레이드
키워드
InternalError
적용 제품 버전
6FS07
1 more property

현상

client에서 char(1) 타입을 nvarchar 타입으로 bind 하여 사용 시 Internal Error 발생 현상입니다.
## callstack 일부 Thread 9 (Thread 0x7fedd602b700 (LWP 57678)): #0 0x00007ff05811d85d in nanosleep () from /lib64/libc.so.6 #1 0x00007ff05811d6f4 in sleep () from /lib64/libc.so.6 #2 0x0000000000dbc016 in tb_system (cmdstring=0xdda4c60 <cmd> "/usr/bin/pstack 57164 >> /home/tibero/tibero6/instance/SPORTAL2/tbsvr.callstack.57164 2>&1", ds=0x40e43c0 <debug_dstream>, kill_child=<optimized out>, timeout_in_sec=297) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/frame/callstack.c:297 #3 callstack_dump_internal (ds=ds@entry=0x40e43c0 <debug_dstream>, tid=tid@entry=202, os_thr_id=os_thr_id@entry=57678, pid=pid@entry=57164, dump_dest_dir=dump_dest_dir@entry=0x0) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/frame/callstack.c:440 #4 0x0000000000dbc55e in callstack_dump_ex (ds=0x40e43c0 <debug_dstream>, tid=202, tid@entry=-1, dump_dest_dir=dump_dest_dir@entry=0x0) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/frame/callstack.c:472 #5 0x0000000000dba9c4 in tb_tracedump (tracedump_cause=tracedump_cause@entry=TRACEDUMP_ASSERT) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/frame/tbsvr_tracedump.c:91 #6 0x0000000000dbb0c5 in tb_assert_msg (msg=msg@entry=0x279c462 "str_len % 2 == 0", filename=filename@entry=0x279b672 "tbstr_charset.h", lineno=lineno@entry=344) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/frame/tbsvr_tracedump.c:239 #7 0x0000000000d1d599 in check_is_all_trailing_space (charset=<optimized out>, str_len=9, str=0x7fedd74de371 "a") at /home/chef/workspace/Build_centos_7-3/tibero6/src/include/tbstr_charset.h:344 #8 nchar_cmp (s2_len=1, s2=0x7fedd74dde48 "", s1_len=<optimized out>, s1=<optimized out>) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/include/dt.h:1095 #9 dtv_compare_nvarchar (ctx=<optimized out>, val1=<optimized out>, val2=<optimized out>) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/dt/dt_nvarchar.c:423 #10 0x0000000001212ee8 in stat_op_selec_eq_height (alloc=0x7fedd0011680, need_free=1 '\001', expctx=0x7fedd7481d40, res=0x7fedd74de320, stat=0x7fedd74ddc28) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/stat.c:727 #11 stat_op_selec_eq (stat=0x7fedd74ddc28, val=0x7fedd74b1bd0, modify_stat=<optimized out>, use_default=use_default@entry=0x7fedd6027400 "", expctx=0x7fedd7481d40, alloc=0x7fedd0011680) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/stat.c:948 #12 0x00000000011666c6 in oexp_op_selec_eq_ (e=e@entry=0x7fedd74b1d08, cols=cols@entry=0x0, modify_stat=modify_stat@entry=0 '\000', use_default=use_default@entry=0x7fedd6027400 "") at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/oexp.c:2201 #13 0x0000000001168d56 in oexp_selec_op_ (use_default=<optimized out>, stack=<optimized out>, chg_mod_node=<optimized out>, modify_stat=<optimized out>, cols=<optimized out>, visit_no=<optimized out>, e=<optimized out>) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/oexp.c:2096 #14 oexp_selec (root=0x7fedd74a8328, cols=cols@entry=0x0, modify_stat=modify_stat@entry=0 '\000') at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/oexp.c:2035 #15 0x000000000117914f in opt_calc_exps_selec () at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/opt_ctx.c:952 #16 0x0000000001170688 in build_best_path () at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/opt.c:48 #17 0x0000000001173050 in build_best_path_inc_rwqr (lp_ctx2=0x7fedd6027bc0, lp_ctx1=0x7fedd6027870) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/opt.c:169 #18 optimize () at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/opt/opt.c:328 #19 0x00000000006297cf in sql_hardparsing (alloc=alloc@entry=0x7fedd0010d60, sql=0x7fedd74809b8 "SELECT B.NOTIFY_NO, A.SERVER_ID, A.SERVER_IP, A.CREATE_DT, A.ALERT_CONT FROM WISE_NEO_TBL_ALERT A, WISE_NEO_TBL_ALERT_NOTIFY B WHERE A.ALERT_NO=B.ALERT_NO AND B.READ_YN='N' AND B.USER_ID = ?", pp_sql=0x7fedd74809b8 "SELECT B.NOTIFY_NO, A.SERVER_ID, A.SERVER_IP, A.CREATE_DT, A.ALERT_CONT FROM WISE_NEO_TBL_ALERT A, WISE_NEO_TBL_ALERT_NOTIFY B WHERE A.ALERT_NO=B.ALERT_NO AND B.READ_YN='N' AND B.USER_ID = ?", psm_params=psm_params@entry=0x7fedd6028f00, csr=0x7fefe1e792e0, ecs_ctx=ecs_ctx@entry=0x7fedd60287c0, dd_lock_acquired=dd_lock_acquired@entry=0x7fedd60286a9 "\001\001", rc=rc@entry=0x7fedd60286c0, pp=pp@entry=0x7fedd6028ec0) at /home/chef/workspace/Build_centos_7-3/tibero6/src/tbsvr/body/tbsvr_sql_process.c:1907
SQL
복사

원인

client에서 bind 파라미터를 포함하는 쿼리 수행 시, 컬럼의 통계 정보와 bind 파라미터 값 비교 도중 endian 차이로 인해 에러가 발생하였습니다.

해결

패치를 적용합니다. (적용 패치: 228431a)
통계 정보와 bind 파라미터의 값의 타입이 동일하면 오류가 발생하지 않으므로, 두 값을 비교하기 전에 동일한 타입으로 casting하도록 수정한 패치 적용이 필요합니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.