「ソケットから読み取るデータがこれ以上ありません」エラーのトラブルシューティングに関する一般的なアドバイス。
これらのエラーは通常、ORA-600エラーなどの別の重大なエラーが原因で発生します。サーバープロセスがクラッシュし、クライアントに適切なエラーメッセージを送信することさえできなかったほど深刻な問題。 (これらのエラーのもう1つの一般的な理由は、SQLNET.EXPIRE_TIMEまたは古いセッションを強制終了するその他のプロセスによって引き起こされるネットワーク切断です。)
アラートログを見て、元のエラーメッセージを見つけてください。
このディレクトリでファイルalert_[name].logを探します。select value from v$parameter where name = 'background_dump_dest';
特定のエラーメッセージと詳細を見つけたら、support.oracle.comにアクセスします。 「ora-600ツール」を使用して、ORA-600メッセージの後の最初の番号を検索します。
通常、その特定のタイプのORA-600エラーに関する1つ以上の記事があります。正確なバージョンとプラットフォームを使用して、考えられるバグのリストを絞り込みます。 (ただし、記事の「影響を受けるバージョン」が間違っていても驚かないでください。「バージョンx.yで修正された」というOracleの主張は必ずしも正しいとは限りません。)
記事では通常、問題がどのように発生したか、考えられる回避策、および通常はパッチまたはアップグレードを伴う解決策について詳しく説明しています。
実際には、解決したいと思うことはめったにありません。 これらの問題。 「一般的な」アドバイスは、Oracleサポートに連絡して、実際に同じ問題が発生していることを確認し、パッチを取得し、許可を取得して環境を停止してから、パッチを適用することです。そして、おそらくパッチが機能しないことに気付くでしょう。おめでとうございます、あなたは多くの時間を無駄にしました。
代わりに、通常は回避できます クエリまたはプロシージャの微妙な変更に関する問題。 Oracleには多くの機能がありますが、ほとんどの場合、それを行う別の方法があります。コードが少し奇妙に見える場合は、将来のプログラマーに警告するコメントを追加してください。「このコードは、バージョンYで修正されるはずのバグXを回避するために奇妙に見えます。」
このコードに関する具体的なアドバイス
それが本当にあなたの手順全体である場合は、次のようなものに置き換える必要があります:
insert into local.tab3(col1, col2, col3, col4)
select tab1.col1, tab1.col2, tab2.col1, tab2.col2
from [email protected] tab1
join [email protected] tab2
on tab1.col1 = tab2.col1
and tab1.col2 = tab2.col2;
一般に、可能であれば、常にSQLで処理を行う必要があります。特に、多くのカーソルを開かないようにすることができる場合。そして特に リモートデータベースに多くのカーソルを開かないようにすることができれば。