dポイントプレゼントキャンペーン実施中!

お世話になります。
10gR2データベースで動かしていたPL/SQLプログラム内の、とあるSELECT文が、11gR2環境ではエラーが発生してしまい、動きません。

そのSELECT文をそのまま掲載するのは難がありますので、初期サンプルDBでも動くSELECT文に直したものを掲載させて頂きます。
(本物のSELECT文と同じ構文であることに重点を置いているため、掲載するSELECT文の意味不明さは無視して頂ければ幸いです)

-----------
10g環境:Database10g Enterprise Edition 10.2.0.1.0
11g環境:Database11g Enterprise Edition 11.1.0.6.0

10g:まったく問題なく動作する
11g:エラー(下記エラーメッセージ)

行2でエラーが発生しました。
ORA-03113:通信チャネルでend-of-fileが検出されました。

SELECT文:
SELECT A.LAST_NAME
FROM (EMPLOYEES A FULL OUTER JOIN DEPARTMENTS B
ON (A.DEPARTMENT_ID = B.DEPARTMENT_ID
AND ((A.SALARY >11000 AND COMMISSION_PCT IS NULL)
OR B.MANAGER_ID = 100)));
-----------
エラー番号をインターネットで調べるとオラクルサポートに連絡しなければならないようもののようですが・・・接続や通信関係ではなく、オプティマイザや実行計画に問題がある(仕様変更?)のではないかと思います。

結合内の追加条件を外に出し、SELECT文本体のWHERE句に移動すると動きますが、この現象の原因をご存知の方、ご教示いただければ幸いです。

A 回答 (2件)

こちらでも現象を確認しました。


こちらの環境は、11.1.0.7.0です。

どうもSQLの解析に失敗して回線切断しているみたいですね。
今のままで解決して欲しいなら、オラクルサポートに連絡が妥当だと思います。

解決方法もご存知のようなので今さらなんですが、やはりテーブルの結合条件と抽出条件は分けて書かれた方がよいと思います。
・結合条件
 A.DEPARTMENT_ID = B.DEPARTMENT_ID
・抽出条件
 ((A.SALARY >11000 AND COMMISSION_PCT IS NULL)
 OR B.MANAGER_ID = 100)

何の解決にもなってませんが、頑張ってください。
    • good
    • 0
この回答へのお礼

nas02さん、早速のご回答ありがとうございます。

そうですね・・・nas02さんのおっしゃるとおり、オラクルのサポートに相談するのが良さそうですね。もしかすると、これと同じ原因で、他のSQL文でも今後、妙なエラーが出る可能性もあると考えると、根本解決したほうが無難という気もします。

ただ解決方法と考えている、「追加条件をWHERE句に移動」をそのままやると、返ってくる結果が違うのです・・・書き方が間違っているのでしょうか。もう少し試行錯誤する必要がありそうです。

アドバイスありがとうございました。

お礼日時:2009/08/28 09:09

エラーメッセージを見る限り、SQL解析・実行で固まって(?)しまって、回答を待ちきれなくてネットワーク側の機器等でタイムアウトが発生し、セッションを強制的に切られているようにも思えます。


nas02さんのように実環境で検証している訳ではないのであてずっぽうですが、実行計画・コストの差を比較すること、ネットワーク機器・ミドルウェア設定で最短のタイムアウト時間との関連を調査される事をオススメします。
条件の書き方もありますが、SQLの形を見る限り、オプティマイザがそんなに悪化するようなことは無いと思います。
なので仰るとおり、私も索引やパーティション等、リソース環境に原因があるように思います。が、もし切断している原因がネットワーク側に無ければサポート対応か、SQLの形を変えて回避するしか無さそうですね。
    • good
    • 0
この回答へのお礼

lond_nagさん、ご回答ありがとうございます。
ネットワークには問題ないようです。複数の環境(ローカル/リモートなど)で試しましたが同じ現象が起こりました。とりあえずSQLの形を変えて急場をしのぎたいところです。サポートにも連絡してみます。

ありがとうございました。

お礼日時:2009/09/01 09:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す