소개
이 문서에서는 ICM(Intelligent Contact Management) MDS(Message Delivery Service) 메시지를 통해 처리할 수 있는 최대 데이터 양과 그 뒤에 있는 아키텍처를 설명합니다.
배경 정보
ICM을 사용하여 데이터베이스 조회를 수행할 때(라우터와 외부 데이터베이스 간의 인터페이스를 제공하는 프로세스로 dbworker.exe 사용) MDS 메시지를 통해 처리할 수 있는 데이터 양보다 많은 양의 데이터가 있습니다.
SQL(구조적 쿼리 언어) 응답 데이터 + DBW(db worker process) 응답 헤더의 총 양은 4096바이트를 초과할 수 없습니다.이는 MDS 메시지에 대한 하드코딩된 제한입니다.
사용되는 구성 요소
이 문서의 정보는 ICM 버전 11.6을 기반으로 합니다.
문제
너무 많은 데이터가 SQL Server에서 dbw로 반환되고 dbw가 이를 라우터(RTR)에 전달할 수 없는 경우 다음과 같이 오류 조건이 생성됩니다.
06:33:38:639 ra-dbw 추적:조회 요청 큐
06:33:38:644 ra-dbw 추적:DBWorker 스레드 4(ID 5612 테이블:Stores_Reception_BT.SRDB_NEW):수신된 요청:transactionID 14583170
06:33:38:658 ra-dbw 추적:DBWorker 스레드 4(ID 5612),transactionID 14583170, 레코드를 읽으려고 합니다.
06:33:38:679 ra-dbw 추적:DBWorker 스레드 4(ID 5612),transactionID 14583170, 성공...)
06:33:38:735 ra-dbw 추적:DBWorker transactionID 14583170, 실패!결과=10
06:33:38:745 ra-dbw 추적:조회 요청 큐
"10" - 너무 많은 데이터가 SQL Server에서 dbw로 반환되었으며 dbw에서 RTR로 전달할 수 없음을 의미합니다.
오류를 인쇄하기 위해 이 추적 수준이 사용됩니다.
Portico를 통해 dbw trace level to 3(trace level 3은 Cisco TAC의 권장 사항에만 사용) 및 rtrtrace 툴을 통해 RTR에 대한 이 추적 레벨(c:\icm\bin):
다음은 DBW 프로세스를 통해 MDS 메시지를 구성하는 방법의 예입니다.
02:22:01:273 ra-dbw 추적:DBWorker 스레드 2(ID 15100 테이블:ICM_lookup_1):수신된 요청:트랜잭션 ID 3
02:22:01:273 ra-dbw 추적:DBWorker 스레드 2(ID 15100),transactionID 3, 레코드를 읽으려고 합니다.
02:22:01:273 ra-dbw 추적:DBWorker 스레드 2(ID 15100),transactionID 3, 성공했습니다.
02:22:01:273 ra-dbw 추적:MDS:MDSAllocBuffer 입력
02:22:01:273 ra-dbw 추적:SQLConnection::SetupColumnData:열 1의 열 데이터 길이 = 5
02:22:01:273 ra-dbw 추적:SQLConnection::SetupColumnData:열 2의 열 데이터 길이 = 0
02:22:01:273 ra-dbw 추적:SQLConnection::SetupColumnData:열 3의 열 데이터 길이 = 0
02:22:01:273 ra-dbw 추적:MDS:MDSSendInput02:22:01:273 ra-dbw 메시지 추적 입력:클라이언트:MDS 프로세스에 메시지를 보내는 dbw
EMT: class=2 type=1 bodysize=116
MDS: rsrvd=0 hdrsize=16 bodysize=100 src=56 dst=1 priority=high
MDS: flags=02 { side_a } vtime=0006f03b seqno=0000 class=4 type=16
00000 03 00 00 00 00 00 00 00 00 |........|
00008 03 00 00 00 00 8e 13 00 00 |........|
00010 02 00 00 00 00 00 00 00 00 |........|
00018 00 00 00 00 00 00 00 00 00 |........|
00020 00 00 00 00 05 00 38 30 |......80|
00028 31 30 34 00 8c 13 00 00 |104.....|
00030 02 00 00 00 00 00 00 00 00 |........|
00038 00 00 00 00 00 00 00 00 00 |........|
00040 00 00 00 00 00 00 00 00 00 |........|
00048 8d 13 00 00 02 00 00 00 |........|
00050 00 00 00 00 00 00 00 00 00 |........|
00058 00 00 00 00 00 00 00 00 00 |.........
00060 00 00 00 00
이 예에서는 구성된 테이블에 대한 SQL 쿼리의 결과로 3개의 열이 있으며, 모든 열에는 DB에 VARCHAR(50) 유형이 있습니다.
Response(응답)에는 1번째 열의 5바이트 데이터와 나머지 2개의 열에 0바이트가 포함됩니다.
이 응답 dbw를 기반으로 각 열이 필드에 가득 찬 MDS 메시지를 형성합니다. 이 필드는 24바이트 헤더 + 2바이트 길이 + PAYLOAD + OFFSET으로 구성됩니다.
열에 데이터가 포함되지 않은 경우(예: 길이 = 0), 다음과 같이 계속 사용됩니다.24바이트 헤더 + 2바이트 길이 + 2바이트 오프셋 = 28바이트
솔루션
이 시나리오를 해결하려면 테이블/구성 또는 열 이름 축소와 함께 사용하지 않는 열을 제거하거나 열 데이터 크기를 줄입니다.
관련 문서:
https://www.cisco.com/c/en/us/support/docs/customer-collaboration/unified-contact-center-enterprise/116215-configure-dblookup-00.html