web-dev-qa-db-ja.com

oracle:ソケットから読み取るデータはもうありません

Oracle Database 10g Enterprise Editionリリース10.2.0.4.0を使用していますが、クエリでエラーが発生し、エラーが発生します

Error: No more data to read from socket
SQLState:  null
ErrorCode: 17410

クエリは次のようになります

select * from (
    select ... <many, MANY fields>
    from table   
    inner join
    left outer join
    left outer join
    inner join
    where string1='value1' and string2='value2'

) where rownum > 500 and rownum < 510

最後のwhereステートメントを削除しようとすると、クエリは正常に実行されます。また、rownumフィルターをより低いレベルのレコードに「削減」しようとすると、クエリは正常に実行されます。

where rownum<10

インターネットで検索したところ、一部のバージョンのOracleではバグのように見えるパラメーター「cursor_sharing」が「similar」に原因がある可能性があることがわかりました。 「完全」に設定しようとしましたが、残念ながら同じエラーが発生します。

Oracle 10gでは、selectステートメントの取得データにバイト単位の制限があるかどうか疑問に思っていましたが、何も見つかりませんでした。 Oracle8iには制限がありますが、Oracle10gには制限がありません。

別のクライアント(dbvisualizer、squirrel)とOracleコンソールでクエリを実行すると、同じ問題が発生します。

5
egesuato

ソケットからのデータがないということは、たとえば、ORA-600やORA-7445でシャドウプロセスがクラッシュしたことを意味します。 user_dump_destディレクトリでトレースファイルを探すか、アラートログでエントリを探します。これはおそらくバグです

これを参照してください: https://blogs.Oracle.com/db/entry/ora-600_troubleshooting

5
sensware

今後のGoogle社員のために

私のケースは、Hibernateを使用するアプリケーションをホストするGlassFish 2サーバーでした。

エラーの原因はOracle DBサーバーの障害であり、glassfishは回復しません。

サーバーを再起動すると問題が解決します

0
alvaro g