Caché Managed Provider を使用して開発をしていますが、インスタンスを Dispose() もしくは Close() しても、ロックが解放されません

管理ポータルで、[運用] > [ロック] より モード/カウント 欄をご確認ください。

もし、こちらが Exclusive->Delock の状態である場合、それらのロックはトランザクション中のロックということになります。

この場合、トランザクションをかけたプロセスが、ロックを保持したままの状態で残っていると考えられます。

ロックを解放するためには、トランザクションを正常に Commit もしくは Rollback する必要があります。

トランザクションを Commit もしくは Rollback していない場合、Cachéデータベースへの接続においてはコネクションプールが既定で有効になっているために、保持されたロックはいつまでも解放されない状態が続きます。

Dispose() もしくは Close() では、コネクションプールの破棄は行われません。

まずは、トランザクションの明示的な Commit もしくは Rollback が行われているかどうかを確認してください。

※コネクションプールについては、以下ドキュメントをご参照ください。
コネクションプールについて


強制的にトランザクションを終了させるには、以下の方法があります。

  1. コネクションプーリングを無効にして接続します

    例:string connStr = "Server=localhost; Port=1972; ... Pooling=false;"
     
  2. 接続をクローズした後に、コネクションプールをクリアします

    例:myCn.Close();
       CacheConnection.ClearPool(myCn);
     

これらの操作を行った場合、プロセスが解放されるため、トランザクション中のロックも解放されます。

ただし、Commit されていないトランザクション中のプロセスは、Rollback されますのでご注意ください。


該当する製品: Caché, Ensemble, 旧HealthShare
関連トピック:
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る