私はかなり大きなクエリを書いており、内部結合された 2 つのテーブルと左外部結合された 15 個のテーブルがあります。16 を追加すると、ORA-03113: end-of-file on communication channel が表示されます。テーブルを削除して新しいテーブルを追加すると、クエリは正常に機能します。
クエリは SQL Server で正常に実行されます。苦労しているように見えるのは Oracle だけです。
クライアントとデータベース間の接続が予期せず中断された場合、ORA-3113エラーが発生します。2つの主な理由は次のとおりです。
ステートメントを使用してORA-3113を確実に作成できる場合は、2番目のケースであり、おそらくOracleのバグです。Oracleプロセスが予期せず停止すると、USER_DUMP_DEST(SQL * Plus show parameter user_dump_dest
)にトレースファイルが残ります。エディターでトレースファイルを開き、他のより重要なエラーメッセージを探します(を検索しますORA-
)。
ほとんどの場合、ORA-7445やORA-600などのサーバーエラーが発生します。その場合、問題とその解決策をさらに特定するために、OracleサポートノートID153788.1を開く必要があります。
私もこのような問題を抱えていましたが、それらは Oracle のバグに関連していました。おそらく雇われた DBA によってデータベースに多くのパッチが適用されたためでしょう。
15 個のテーブルを結合しているため、この問題は発生しません。より多くのクエリを作成しました。私が書いた最大のクエリは約 450 行で、さまざまな方法で少なくとも 50 のテーブルを結合していたと思います。
クエリの書き方が異なる場合があります。質問を投稿していただけますか?私も問題を引き起こした特定のパターンを認識し、別の方法を提案する場合があります。
クエリの実行時間がこれの原因になることはほとんどないことを付け加えておきます。問題なく数分間実行されているクエリを見てきましたが、他のクエリでは数秒でこの問題が発生しました。
Oracle のさまざまな制限については、データベース ドキュメントの付録 Aを参照してください。クエリで許可されている結合の数について具体的に見つけることはできませんが、クエリで最大 255のサブクエリが許可されているため、16 個の左結合がその能力を超えていないとは思いません。編集WHERE
:句では255のサブクエリが許可されています。どうやらそれは条項で無制限ですFROM
ただし、リストしたエラーメッセージは、クエリ全体の実際の長さを示唆する傾向があります。
SQL ステートメントの長さの制限は、データベース構成、ディスク容量、メモリなど、多くの要因によって異なります。
ORA-03113は、クライアント・アプリケーションがOracleシャドウ・プロセスとの通信を失ったことを意味します。したがって、最初に別のクライアントツールを試すことができます。
ORA-03113は、Oracle実行可能ファイルが強制終了、終了、またはクラッシュし、クライアント接続が正常に閉じられていない場合にも発生します。その後、Oracleを再起動する必要があるとは言わなかったので、クライアントまたはネットワークに関連していると思います。それ以外の場合は、ログファイルalert.oraなどを確認する必要があります...
Oracleは15以上のテーブルを非常にうまく処理しますのでご安心ください...