これは私に困惑しているので、他の誰かがこの問題に遭遇したか、回避策を知っているかどうかは分かりませんでした。ビューがORDER BY句で照会されたときの内部Oracleエラー
は、私は次のSELECT
の文を持っている:それは約3000行を返すかなりスロークエリですけれども
SELECT * FROM TPM_VIEWSEARCH_EXPORT VS WHERE (PROJECTTYPEID IN (1))
これは、正常に動作します。しかし、私は結果を注文したい。だから私は試してみてください。私はこれを行うと
SELECT * FROM TPM_VIEWSEARCH_EXPORT VS WHERE (PROJECTTYPEID IN (1)) ORDER BY PROJECTID, VERSIONID
は、クエリが約25秒間実行され、その後、返します
ORA-00600:内部エラー・コード、引数:[kokegPinLob1]、[]、 []、 []、[]、[]、[]、[]、[]、[]、[]、[]
Iはまた、ビュー定義自体にORDER BY
句を移動させることができ、そして同じエラーが発生します。この厄介なことは、私たちのプロダクションサーバ(Linux上で動作します)上のreprosだけであり、Windows上でローカルに動作する私の開発サーバ上ではありません。しかし、それは時間の100%を再現します。
VIEW定義がか重要でない場合がありますが、ここでは、とにかくです:本番サーバーを実行して、DBAは、これは、既知のOracleバグであると主張
CREATE VIEW TPM_VIEWSEARCH_EXPORT AS
SELECT
V.PROJECTID, V.VERSIONID, V.NAME, V.STAGEID, V.REQUESTTYPE, V.PRIORITY, V.HEALTH, V.TRAININGDELIVERYSTART, V.TRAININGDELIVERYEND, V.MEASUREMENTINFO, V.DESCRIPTION, V.BUSINESSSPONSORLEVELINVOLVE,
P.INITIATIVEID, P.LEADERSHIPONLY, P.BUSINESSLAUNCHDATE, P.EXPECTEDBUSINESSRESULTS, P.PROJECTTYPEID,
T.SHORTNAME as ProjectType,
I.NAME as InitiativeName,
C.NAME as TrainingCategory,
S.NAME as StageName,
PTO.FIRSTNAME as PTOFirst, PTO.LASTNAME as PTOLast,
STO.FIRSTNAME as STOFirst, STO.LASTNAME as STOLast,
LTS.FIRSTNAME as LTSFirst, LTS.LASTNAME as LTSLast,
R.FIRSTNAME as ReqFirst, R.LASTNAME as ReqLast,
BS.FIRSTNAME as BSFirst, BS.LASTNAME as BSLast,
(select WM_CONCAT(FIRSTNAME || ' ' || LASTNAME) from TPM_PROJECTVERSIONSME inner join TPM_USER USING (USERID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as SME,
(select WM_CONCAT(NAME) from TPM_PROJECTAREAS inner join TPM_AREAS USING (AREAID) where PROJECTID=V.PROJECTID) as Areas,
(select WM_CONCAT(NAME) from TPM_PROJECTWORKGROUPS inner join TPM_WORKGROUPS USING (WORKGROUPID) where PROJECTID=V.PROJECTID) as Workgroups,
(select WM_CONCAT(NAME) from TPM_PROJECTVERSIONSYSTEMS inner join TPM_SYSTEMS USING (SYSTEMID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as Systems,
(select WM_CONCAT(NAME) from TPM_PROJECTVERSIONTEAMS inner join TPM_DEVELOPMENTTEAMS USING (TEAMID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as SupportingDevTeams
FROM TPM_PROJECTVERSION V
INNER JOIN TPM_PROJECT P ON P.PROJECTID = V.PROJECTID
INNER JOIN TPM_PROJECTTYPES T ON T.PROJECTTYPEID = P.PROJECTTYPEID
INNER JOIN TPM_INITIATIVES I ON I.INITIATIVEID = P.INITIATIVEID
INNER JOIN TPM_PROJECTSTAGE S ON S.STAGEID = V.STAGEID
INNER JOIN TPM_PROJECTCATEGORIES PC ON (PC.PROJECTID=V.PROJECTID)
INNER JOIN TPM_TRAININGCATEGORIES C ON (C.CATEGORYID=PC.CATEGORYID)
INNER JOIN TPM_USER R ON (V.REQUESTOR=R.USERID)
INNER JOIN TPM_USER BS ON (V.BUSINESSSPONSOR=BS.USERID)
LEFT JOIN TPM_USER PTO ON PTO.USERID = V.PRIMARYTRAININGOWNER
LEFT JOIN TPM_USER STO ON (V.SECONDARYTRAININGOWNER=STO.USERID)
LEFT JOIN TPM_USER LTS ON (V.LEADTRAININGSPONSOR=LTS.USERID)
、しかし何のパッチはありません。これは真にOracleのバグか、この問題はビュー定義やデータベース内のデータと関係がありますか?
UPDATE:
Oracleバージョン(作品のDevマシン、):
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta
PL/SQL Release 11.2.0.2.0 - Beta
CORE 11.2.0.2.0 Production
TNS for 32-bit Windows: Version 11.2.0.2.0 - Beta
NLSRTL Version 11.2.0.2.0 - Production
Oracleバージョン(製造):
TNS for Solaris: Version 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
NLSRTL Version 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
クエリプランは両方の環境で同じですか? DBAがエラーを引き起こしていると思われるバグを知っていますか? Metalinkを通らず、生成されるトレースファイルを調べることなく、文書化されていない 'WM_CONCAT'関数を少なくとも部分的に使って問題が発生していると思います。文字列集約を行うために別の手法を使用する可能性はありますか?もしあなたが11.2であれば、代わりに 'LISTAGG'関数を使うことができますか? –
@JustinCave - 両方のバージョンを投稿に追加しました。私は*両方にLISTAGGを持っているようですが、そのクエリで作業するための正しい構文を理解することはできません。 –
@JustinCave - シアトルエリアにいると真面目に飲みます。 LISTAGGに切り替えるとバグは修正されるだけでなく、クエリが46分から30秒に短縮されます。大変だよ.. –