概要
このドキュメントでは、Intelligent Contact Management(ICM)Message Delivery Service(MDS)メッセージおよびその背後のアーキテクチャを介して処理できるデータの最大量について説明します。
背景説明
ICMを使用してデータベース検索を実行すると(ルータと外部データベース間のインターフェイスを提供するプロセスとしてdbworker.exeを使用)、MDSメッセージで処理できるデータ量を超えるデータ量が存在します。
構造化クエリ言語(SQL)応答データ+ dbワーカープロセス(DBW)応答ヘッダーの合計量は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 Thread 4 (ID 5612),transactionID 14583170, Attempt to read the record:
06:33:38:679 ra-dbwトレース:DBWorker Thread 4 (ID 5612),transactionID 14583170, Succeeded.(..)
06:33:38:735 ra-dbwトレース:DBWorker transactionID 14583170, Failed!結果=10
06:33:38:745 ra-dbwトレース:ルックアップ要求をキューに入れる
「10」:SQL Serverからdbwに返されたデータが多すぎて、dbwがRTRに渡せないことを意味します
エラーを印刷するには、次のトレースレベルを使用します。
ポートティコ経由で3にdbwトレースレベル(トレースレベル3はCisco TACの推奨でのみ使用)、rtrtraceツール(c:\icm\bin)経由でRTRに対してこのトレースレベルを使用します。
DBWプロセスによってMDSメッセージがどのように形成されているかの例を次に示します。
02:22:01:273 ra-dbwトレース:DBWorker Thread 2 (ID 15100 Table:ICM_lookup_1):受信した要求:transactionID 3
02:22:01:273 ra-dbwトレース:DBWorker Thread 2 (ID 15100),transactionID 3, Attempt to read the record:
02:22:01:273 ra-dbwトレース:DBWorker Thread 2 (ID 15100),transactionID 3, Succeeded.
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メッセージトレースの入力:クライアント:dbwがMDSプロセスにメッセージを送信しています。
EMT: class=2 type=1 bodisize=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 8e 13 00 00 |.......|
00010 02 00 00 00 00 00 00 00 00 |.......|
00018 00 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 00 |.......|
00040 00 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 00 |.......
00060 00 00 00 00
この例では、SQLクエリーの結果として3つの列が構成され、すべての列のVARCHAR(50)型がDBに存在します。
応答には、最初の列の5バイトのデータと、他の2つの列の0バイトのデータが含まれます。
この応答dbwに基づいて、MDSメッセージが形成されます。各カラムは、24バイトのヘッダー+ 2バイト長+ PAYLOAD + OFFSETで構成されるフィールドにパックされます。
列にデータが含まれていない場合(長さ= 0など)、次の値が使用されます。24バイトヘッダー+ 2バイト長+ 2バイトOFFSET = 28バイト。
解決方法
このシナリオを回避するには、使用していない列をテーブル/構成から削除するか、列名を縮小するか、列のデータ・サイズを縮小します。
関連ドキュメント:
https://www.cisco.com/c/en/us/support/docs/customer-collaboration/unified-contact-center-enterprise/116215-configure-dblookup-00.html