Внутренняя ошибка Oracle, когда представление запрашивается предложением ORDER BY - PullRequest
2 голосов
/ 16 марта 2012

Это меня поставило в тупик, поэтому я подумал, что увижу, столкнулся ли кто-нибудь еще с этой проблемой и / или узнает об обходном пути.

У меня есть следующее 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, или эта проблема связана с определением представления или данными в базе данных.

ОБНОВЛЕНИЕ:

Версия 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

Ответы [ 2 ]

2 голосов
/ 17 апреля 2012

Решение, которое рекомендовал Джастин Кейв в комментарии, состояло в том, чтобы переключиться на функцию LISTAGG вместо WM_CONCAT. Этот метод не только предотвращает сбои, но также увеличивает скорость запроса с примерно 46 минут до примерно 30 секунд. Обновленный код:

  (select LISTAGG(LASTNAME || ', ' || FIRSTNAME, '; ') WITHIN GROUP (ORDER BY LASTNAME, FIRSTNAME) from TPM_PROJECTVERSIONSME inner join TPM_USER USING (USERID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as SME,
  (select LISTAGG(NAME, '; ') WITHIN GROUP (ORDER BY NAME) from TPM_PROJECTAREAS inner join TPM_AREAS USING (AREAID) where PROJECTID=V.PROJECTID) as Areas,
  (select LISTAGG(NAME, '; ') WITHIN GROUP (ORDER BY NAME) from TPM_PROJECTWORKGROUPS inner join TPM_WORKGROUPS USING (WORKGROUPID) where PROJECTID=V.PROJECTID) as Workgroups,
  (select LISTAGG(NAME, '; ') WITHIN GROUP (ORDER BY NAME) from TPM_PROJECTVERSIONSYSTEMS inner join TPM_SYSTEMS USING (SYSTEMID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as Systems,
  (select LISTAGG(NAME, '; ') WITHIN GROUP (ORDER BY NAME) from TPM_PROJECTVERSIONTEAMS inner join TPM_DEVELOPMENTTEAMS USING (TEAMID) where PROJECTID=V.PROJECTID and VERSIONID=V.VERSIONID) as SupportingDevTeams
0 голосов
/ 16 марта 2012

Это общий внутренний номер ошибки для исключений программы Oracle. Это указывает на то, что процесс обнаружил непредвиденное состояние низкого уровня. Причины этого сообщения включают в себя:

таймауты

повреждение файла

неудачные проверки данных в памяти

ошибки оборудования, памяти или ввода-вывода

неправильно восстановленные файлы

Первый аргумент - внутренний номер сообщения. Другими аргументами являются различные числа, имена и строки символов. Числа могут изменить значения между различными версиями Oracle.

Действие: Сообщите об этой ошибке в службу поддержки клиентов Oracle после сбора следующей информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...