Существуют ли ограничения на количество таблиц, которые можно объединить в Oracle? - PullRequest
3 голосов
/ 17 мая 2011

Я пишу довольно большой запрос, и у меня есть 2 таблицы, внутреннее соединение и 15 таблиц слева-внешнее соединение. когда я добавляю 16, я получаю ORA-03113: конец файла в канале связи . Если я удаляю таблицу, чтобы добавить новую, запрос работает нормально.

Запрос отлично работает для SQL Server, просто Oracle, похоже, испытывает трудности.

Ответы [ 4 ]

7 голосов
/ 17 мая 2011

Ошибки ORA-3113 встречаются, когда соединение между клиентом и базой данных неожиданно прерывается. Две основные причины:

  1. Произошла проблема с сетью.
  2. Серверный процесс, обрабатывающий ваш запрос, был остановлен

Если вы можете надежно создать ORA-3113 с оператором, вы во втором случае, скорее всего, ошибка от Oracle. Когда процесс Oracle неожиданно умирает, он оставляет файл трассировки в вашем USER_DUMP_DEST (в SQL * Plus show parameter user_dump_dest). Откройте файл трассировки в редакторе и найдите другое более существенное сообщение об ошибке (найдите ORA-).

Скорее всего, вы найдете ошибку сервера, такую ​​как ORA-7445 или ORA-600. В этом случае вам нужно будет открыть справку Oracle с идентификатором 153788.1 для дальнейшей идентификации проблемы и ее решения.

2 голосов
/ 17 мая 2011

Различные ограничения для Oracle доступны в Приложении A его документации базы данных.Я не могу найти ничего конкретно по количеству разрешенных в запросе объединений, но, поскольку в запросе разрешено до 255 подзапросов , я не думаю, что 16 оставленных объединений не выходят за рамкиспособности. Редактировать : вам разрешено 255 подзапросов в предложении WHERE.Очевидно, это не ограничено в предложении FROM

Однако в сообщении об ошибке, которое вы указали, будет указываться фактическая длина запроса в целом:

Предел длины оператора SQL зависит от многих факторов, включая конфигурацию базы данных, дисковое пространство и память

2 голосов
/ 17 мая 2011

У меня тоже были такие проблемы, и они были связаны с ошибками в Oracle. В последнее время у меня не было ни одного из них, вероятно, из-за множества исправлений, примененных к нашей базе данных нанятым администратором базы данных.

Эта проблема не возникает из-за объединения 15 таблиц. Я построил запросы, объединяющие намного больше. Я полагаю, что самый большой запрос, который я написал, содержал около 450 строк, объединяя как минимум 50 таблиц разными способами.

Иногда работает написание запроса иначе. Не могли бы вы опубликовать свой запрос? Я могу распознать определенную закономерность, которая также доставила мне неприятности, и предложить альтернативу.

Я хотел бы добавить, что время выполнения запроса вряд ли когда-либо является причиной этого. Я видел запросы, выполняющиеся в течение нескольких минут без каких-либо проблем, в то время как другие давали эту проблему в считанные секунды.

1 голос
/ 17 мая 2011

ORA-03113 означает, что ваше клиентское приложение потеряло связь с теневым процессом Oracle. Поэтому вы можете сначала попробовать другой клиентский инструмент.

ORA-03113 также происходит, когда исполняемый файл Oracle уничтожен, прерван или аварийно завершен, а клиентские соединения не закрыты по порядку. Вы не упомянули, что вам пришлось перезапускать Oracle после этого, поэтому я предполагаю, что это связано с клиентом или сетью. В противном случае вам придется проверять лог-файлы alert.ora и т.д ...

Пожалуйста, будьте уверены, что Oracle хорошо справляется с 15+ таблицами ...

...