0

現在、レコードが 1 つしかないストアド プロシージャから ref カーソルが返されると、フェッチ操作がハングしてフリーズするという奇妙な問題があります。ストアド プロシージャの実行は非常に高速で、フェッチ プロセスがハングするだけです。ref カーソルに複数のレコードがある場合は、すべて問題ありません。誰かが以前に同様の問題を抱えていますか?

Oracle サーバーは、Linus で実行されている 11g です。クライアントは Windows Server 2003 です。Windows Server で汎用の Oracle sqlplus ツールを使用してこれをテストしています。

ヘルプやコメントをいただければ幸いです。ありがとう。

4

2 に答える 2

4

ハングアップとはどういう意味ですか?

データベースでセッションがまだアクティブな場合 (V$SESSION のステータス)、何らかのイベントを待っている可能性があります (たとえば、クライアントからの SQL*Net は、クライアントが何かを行うのを待っていることを意味します)。

行がもうないことを確認するのに、クエリに長い時間がかかっている可能性があります。インデックスのない 10,000,000 行のテーブルを考えてみましょう。クエリは、テーブルを完全にスキャンし、最初の行が基準に一致することを検出する場合があります。次の 9,999,999 行をスキャンして、そうでないことを確認する必要があります。しばらく時間がかかる場合があります。

于 2011-03-01T22:30:58.380 に答える
1

プロセスがハングしていると言っているので、カーソルが「選択」ではなく「更新の選択」を行う可能性はありますか? 複数のレコードをフェッチしてもこのエラーは発生しないと言っているので、そうではない可能性があります。

select と fetch のコード (または再現可能な小さなテスト/サンプル) を見せていただけますか。

また、次のクエリを使用して v$locked_objects をチェックし、テーブル名を指定して、問題のオブジェクトがロックされているかどうかを確認できます。繰り返しますが、現在のクエリに「更新用」が含まれていない限り、このフェッチはハングしません。

select do.* 
  from v$locked_objects vo,
       dba_objects      do
  where vo.object_id = do.object_id
    and vo.object_name = '<your_table_name>'
于 2011-03-01T21:32:56.953 に答える