DBNetLib (データベース ネットワーク ライブラリ) エラーは、BizTalk Server ランタイムがメッセージ ボックスまたは管理データベースと通信できない場合に発生します。 これが発生すると、例外をキャッチする BizTalk Server ランタイム インスタンスがシャットダウンされ、1 分ごとに循環してデータベースが使用可能かどうかを確認します。
DBNetLib エラーの最も一般的な原因は、(多くの可能性がある) メッセージ ボックス データベース サーバーの 1 つが非常にビジー状態になり、さらに通信を試みるとタイムアウトが発生し、DBNetLib 例外が発生する場合です。
メッセージ ボックス データベースが非常にビジーである場合に加えて、複数の MessageBox データベースの 1 つをホストしている BizTalk データベース サーバーが I/O (入力/出力) バインドされると、運用環境で DBNetLib エラーが発生する可能性があります。
このトピックでは、DBNetLib エラーの原因となる可能性のある条件と、これらのエラーを回避するための推奨事項について説明します。
DBNetLib エラーの原因と解決策
DBNetLib エラーの症状
Microsoft BizTalk Server ホスト インスタンスが終了して再起動すると、次のようなエラーが BizTalk Server アプリケーション ログに書き込まれます。
Event Type:Warning
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:5410
Computer:BIZTALKSERVER
Description:
An error occurred that requires the BizTalk service to terminate. The most common causes are the following:
1) An unexpected out of memory error.
OR
2) An inability to connect or a loss of connectivity to one of the BizTalk databases.
The service will shutdown and auto-restart in 1 minute. If the problematic database remains unavailable, this cycle will repeat.
Error message: [DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation.
Error source:
BizTalk host name: BizTalkHost
Windows service name: BTSSvc$BizTalkHost
---------------------------------------------------------
Event Type:Error
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:6913
Computer:BIZTALKSERVER
Description:
An attempt to connect to "BizTalkMsgBoxDb" SQL Server database on server "SQLSERVER " failed.
Error: "[DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation."
メッセージ ボックス データベースをホストする BizTalk データベース サーバーが I/O バインドされる
BizTalk サーバーは、MessageBox データベースをホストしているデータベース サーバーと直接通信して動作します。 MessageBox データベースをホストしているデータベース サーバーのいずれかが消費されすぎて、I/O (入出力) バインド状態になると、応答しなくなる可能性があります。 BizTalk サーバーの 1 つは、これらのデータベース サーバーのいずれかとの接続を失う可能性があり、DBNetLib エラーが発生します。
このテストでは、物理ディスクの "%Idle 時間" が低下し続け、10%未満に達すると、大量に消費されたデータベース サーバーが I/O バインドされることを示しています。 "%Idle 時間" がそのレベルを下回り続ける場合は、データベース サーバーが応答しなくなる可能性があることを示します。
原因
MessageBox データベースをホストしているデータベース サーバーが I/O バインドになる理由はいくつかありますが、その一部を次に示します。
MessageBox データベースをホストしているデータベース マシンが、メモリの不足、プロセッサの数、速度などのハードウェア仕様が低い場合。
MessageBox データベースをホストしているデータベース マシン上の物理ディスクが、高消費の他のデータベースによって共有されている場合。 複数のデータベース (MessageBox を含む) が同時に大量に消費されている場合、物理ディスクが I/O バインド状態になる可能性があります。
このような状況の例を次に示します。
このテストでは、BizTalkDTADb または BAM データベースをホストしているデータベース サーバーが、物理ディスクの %Disk 読み取り/書き込み時間の割合が高い場合があることを示しています。 メッセージ ボックス データベースをホストするデータベース サーバー ディスクが、BizTalkDTADb や BAM などの高度に使用されている別のデータベースによって共有されている場合、両方のデータベースが同時に大量に消費されると、データベース サーバーの物理ディスクが I/O バインドされ、応答しなくなる可能性があります。
BizTalkDTADb と 1 つ以上の MessageBox データベースがデータベース サーバー上で同じ物理ディスクを共有している場合、アーカイブと消去が頻繁に実行されていない場合、ディスクは I/O バインドになる可能性があります。
解決策
BizTalk メッセージ ボックスをホストしているデータベース サーバーが、大量に消費され、応答しなくなる可能性がある状況に陥らないようにします。
サーバー ディスクが大量に消費される主な原因の一部と、この問題を軽減する方法に関する推奨事項を以下に示します。
低スペックハードウェア
テストでは、ハードウェア仕様が処理しようとしている負荷の量に対応できない場合に、サーバーの消費が増え始めるという結果が出ています。 ハードウェア スペックが低いほど、システムはデータベースで発生するアクティビティの量にすぐに圧倒されます。 これにより、サーバーの %Disk 読み取りと書き込み時間が安定せずに増加し続ける可能性があります。また、ディスクの %Idle 時間も減少し続け、10%未満になり、データベース サーバーが応答しなくなる可能性があります。
BizTalk 展開に対するアクティビティと負荷の量に応じて、負荷が高くなる間に応答しないデータベース サーバーが発生する場合は、データベース サーバー内の CPU の数、メモリ、SAN への接続の各部分をアップグレードすることを検討する必要があります。 もちろん、ハードウェアでアップグレードする必要があるボトルネックである部分 (メモリ、CPU の数など) を特定するには、適切な診断を行う必要があります。
BizTalk データベースの複数のグループに対して 1 つのサーバーまたはディスクを共有する
前述のように、BizTalk Tracking (BizTalkDTADb) データベースや BAM データベースなど、メッセージ ボックス以外のデータベースでは、サーバーの物理ディスクで高サイクルが消費される可能性があります。 そのため、これらのデータベースが同じ物理ディスクを MessageBox データベースと共有する場合は、ディスクが不足して応答しなくなる可能性があります。これにより、BizTalk サーバーがメッセージ ボックス データベースとの接続を失い、DBNetLib にヒットする可能性があります。
サーバーの物理ディスクの消費量が多いデータベースを BizTalk メッセージ ボックスから分離し、異なる物理ディスクを共有 (または異なるサーバー上で分離) することを強くお勧めします。 BizTalkDTADb データベースと BAM データベースは、独自の独立したドライブ/サーバーと MessageBox から分離することをお勧めします。また、各メッセージ ボックス データベース (複数ある場合) を独自のディスクに配置することをお勧めします。
アーカイブと消去
BizTalkDTADb データベースとメッセージ ボックス データベースが同じサーバー上で同じディスクを共有している場合は、BizTalkDTADb データベースを定期的にアーカイブして消去する必要があります。そうしないと、データベースは無期限に拡張されます。
テストでは、定期的にアーカイブおよび消去することをお勧めしますが、通常よりも高い負荷で実行する場合は、アーカイブと消去をより頻繁に検討することをお勧めします。 BizTalkDTADb データベースの増加が定期的に維持されていない場合、これらのアクションが最終的に実行されると、実行にかなりの時間がかかり、実行中に使用可能なデータベース サーバー リソースの大部分が消費される可能性があります。