ORA-01792: максимальное количество столбцов в таблице или представлении - 1000

У меня есть Java-приложение, использующее Oracle db. В веб-приложении используется спящий режим. У меня есть 2 экземпляра oracle - первый в сервере, второй - в локальной виртуальной машине linux.

Когда я подключаюсь к локальному экземпляру oracle в какой-то момент, я получаю

ORA-01792: максимальное количество столбцов в таблице или представлении 1000

исключение. Но когда я подключился к oracle (который находится на сервере), не получайте это исключение. Я делаю точно такое же действие, и дамп - то же самое. Так что я думаю, проблема в оракуле. возможно, какая-то конфигурация отличается.

Может ли кто-нибудь сказать мне, что может быть различием между серверами оракула, что приводит к этой ситуации?

UPDATE. некоторые части из stacktrace

Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection:
Caused by: java.sql.SQLSyntaxErrorException: ORA-01792: maximum number of columns in a table or view is 1000

Ответ 1

ORA-01792: максимальное количество столбцов в таблице или представлении 1000

Этот предел применим не только к таблицам и представлениям, но также к временному встроенному представлению и временной внутренней памяти таблицы, которые Oracle создает при выполнении подзапроса.

Например,

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

Вызвано: org.hibernate.exception.SQLGrammarException: не удалось инициализировать коллекцию:

Приведенная выше ошибка указывает на то, что вы пытаетесь создать коллекцию, которая превышает допустимый предел количества столбцов, то есть общее количество столбцов превышает 1000.

Ответ 2

Чтобы избежать этого исключения и пропустить проверку этого предела, вы можете установить параметр _fix_control, как:

ALTER SESSION SET "_fix_control" = '17376322: OFF'

или

ALTER SYSTEM SET "_fix_control" = '17376322: OFF'

(работает с Oracle 12.1.0.2 Standard и Enterprise)