Pivotal アプリケーション (5.9) を実行していますが、常にクラッシュするサーバー プロセスがあります (MS SQL エラー 1206)。
- クリックすると、サーバー プロセス (VB 6 カスタム DLL) を呼び出す更新ボタンを備えた Pivotal の「アクティブ フォーム」があります。
- このカスタム DLL :
- Pivotal API を使用して Pivotal アプリケーションを使用できるすべてのユーザーのリスト (「ユーザー」標準テーブル) を取得し、接続文字列を使用して別のデータベースへの独自の接続を作成します)。
- ユーザーごとに、クエリを作成して実行します。
- strSql = select SUM(stoResourceSize) totalResourceSize from " & dbName & ".dbo.Resource where StorageID = 3 and XptDestinationAddress like " strSql = strSql & "'%" & userName & "%'"
クエリの実行に使用される接続文字列は次のとおりです。
strConnect = "Driver={SQL Server};" & _
"Server=" & SatteliteName & ";" & _
"UID=" & SyncStreamDBName & ";" & _
"Trusted_Connection=Yes"
正常に動作しますが、約 80 人のユーザーが処理された後、エラー 1206 および SQLState = 37000 でクエリがクラッシュします。
私は毎回その問題を再現できます。ある時点で、このクエリはクラッシュします。
多くのトレースを追加しましたが、サーバー上で「手動で」実行すると、最後のクエリは正常に機能します。毎回同じユーザーでクラッシュするわけではなく、ランダムのようです。さらに、アプリケーションには、同じクエリを実行できるが 1 人のユーザーに対してのみ実行できる別のサーバー プロシージャが存在します。それは正常に動作し、クラッシュすることはありません。また、ODBC トレースを有効にしようとしましたが、有用な情報は得られません。
私はそれが接続または構成の問題であるとかなり確信していますが、何がわかりません。この問題は、開発環境とテスト環境の両方で再現可能です。
編集:実際には、サーバー プロセスがさまざまな時点でクラッシュする可能性があるようです。必ずしもその要求を実行するときではありません。ADODB レコードセットを開くとクラッシュするようです (もちろん、レコードセットに触れる前に、EOF と BOF の両方が false であることを確認します)。