Это меня заводит в тупик, поэтому я подумал, что посмотрю, столкнулся ли кто-нибудь с этой проблемой и/или знает об обходном пути.Внутренняя ошибка Oracle, когда запрос запрашивается с предложением ORDER BY
У меня есть следующий SELECT
заявление:
SELECT * FROM TPM_VIEWSEARCH_EXPORT VS WHERE (PROJECTTYPEID IN (1))
Это прекрасно работает, хотя это довольно медленный запрос, который возвращает около 3000 строк. Тем не менее, я хочу заказать результаты. Поэтому я стараюсь:
SELECT * FROM TPM_VIEWSEARCH_EXPORT VS WHERE (PROJECTTYPEID IN (1)) ORDER BY PROJECTID, VERSIONID
Когда я делаю это, запрос выполняется в течение примерно 25 секунд, а затем возвращает:
ORA-00600: внутренний код ошибки, аргументы: [kokegPinLob1], [], [], [], [], [], [], [], [], [], [], []
можно также перемещать пункт ORDER BY
в само определение вида, и получить ту же ошибку. Досадно, что это репродуцируется только на нашем производственном сервере (который работает на Linux), а не на моем сервере разработки, который работает локально в Windows. Однако он воспроизводит 100% времени.
Определение VIEW может или не может иметь значение, но здесь это все равно:
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, однако не патч не доступен. Действительно ли это ошибка 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
Является ли план запросов одинаковым в обеих средах? Знаете ли вы, какая ошибка, с которой полагаются администраторы баз данных, вызывает ошибку? Не переходя через Metalink и глядя на созданный файл трассировки, я предполагаю, что проблема, по крайней мере, частично связана с использованием недокументированной функции WM_CONCAT. Могли бы вы использовать другой метод для агрегации строк? Если вы используете 11.2, можете ли вы использовать функцию 'LISTAGG'? –
@JustinCave - Я добавил обе версии к сообщению. Я * кажется * имею LISTAGG для обоих, но не могу понять правильный синтаксис, чтобы заставить его работать с этим запросом. –
@JustinCave - Серьезно, если вы когда-либо находитесь в районе Сиэтла, я должен вам выпить. Переход на LISTAGG не только исправляет ошибку, но и ускоряет мой запрос с 46 минут до 30 секунд! Святое дерьмо .. –