Ora 00604 ошибка на рекурсивном sql уровне

When I’m trying to drop table then I’m getting error

SQL Error: ORA-00604: error occurred at recursive SQL level 2
ORA-01422: exact fetch returns more than requested number of rows
00604. 00000 -  "error occurred at recursive SQL level %s"
*Cause:    An error occurred while processing a recursive SQL statement
           (a statement applying to internal dictionary tables).
*Action:   If the situation described in the next error on the stack
           can be corrected, do so; otherwise contact Oracle Support.

asked May 27, 2015 at 9:15

Ravi's user avatar

RaviRavi

30.9k42 gold badges119 silver badges173 bronze badges

9

One possible explanation is a database trigger that fires for each DROP TABLE statement. To find the trigger, query the _TRIGGERS dictionary views:

select * from all_triggers
where trigger_type in ('AFTER EVENT', 'BEFORE EVENT')

disable any suspicious trigger with

   alter trigger <trigger_name> disable;

and try re-running your DROP TABLE statement

answered May 27, 2015 at 10:14

Frank Schmitt's user avatar

Frank SchmittFrank Schmitt

30.2k12 gold badges73 silver badges107 bronze badges

2

I noticed following line from error.

exact fetch returns more than requested number of rows

That means Oracle was expecting one row but It was getting multiple rows. And, only dual table has that characteristic, which returns only one row.

Later I recall, I have done few changes in dual table and when I executed dual table. Then found multiple rows.

So, I truncated dual table and inserted only row which X value. And, everything working fine.

answered May 28, 2015 at 6:58

Ravi's user avatar

RaviRavi

30.9k42 gold badges119 silver badges173 bronze badges

2

I know the post is old and solved, but maybe someone is facing or will face my situation, so I want to leave the aquired knowledge here, after deal with the error for a week. I was facing the error: «ORA-00604: error occurred at recursive SQL level 1″ , but with the internal error: » ORA-06502: error: character string buffer too smal numeric or value», this happened only when I try to logon the database, and using an specific driver, trying to connect from an Visual Studio C# application, the weirdest thing on that moment was that I connect from SQLDeveloper or TOAD and everything worked fine.
Later I discovered that my machine name had this format «guillermo-aX474b5», then I proceed to rename it like this «guillermo» without the «-» and the other stuff, and it worked!! Looks like in some drivers and situations, ORACLE Database does’nt like the «-» in the LogOn connection.

Hope it helps!

answered Oct 4, 2022 at 12:53

Guillermo Alvarado's user avatar

In my previous article, I have explained about the most common errors in Oracle. In This article, I will try to explain another most common error, which has been searched approximately 20000 times in a month by DBAs and developers. While working with a database and performing different scenarios of database every developer or dba might have faced error called as ORA-00604: error occurred at recursive SQL level 1. While working with databases I have frequently faced ORA-00604: recursive error and struggled to solve and debug this issue. I would like to share my experience working and debugging this error. This is most common error and very tricky to solve it.

A recursive SQL statement is a statement that is applied to internal dictionary table.

Why ORA-00604 error will come?

There may be multiple reasons for which this error will come. In this section, I will try to explain what will be possible root cause of this error. Because there are many, possible reasons for the error, Oracle simply states that if the situation described in the next error on the stack can be corrected, it should be corrected. Otherwise, the user should contact the Oracle support line.

Reason 1:

Table and view does not Exist

This may be the one possible cause of this error. If due to any reason if one of the table (system table of oracle) is deleted and user tries to insert or update the data in the table this error will occur.

Reason 2:

Trigger Error

This may be another cause of the error. If trigger attempting to insert the records in audit_log table and audit_log table is dropped by cleanup script then this kind of error will come. This kind of error will occur mostly in system triggers.

Reason 3:

User attempts to run newly created table

When user attempts to run the newly created table this error will occure.The package related to the newly created table needs to be compiled to resolve this error.

ORA-00604

NO TIME TO READ CLICK HERE TO GET THIS ARTICLE

Resolution of the error:

I have explained that there is no specific reason of this error. There might be the different possible causes of this error, which I have explained above. In this section, I will try to explain the resolutions of this error.

Solution 1:

Check for table availability

Check for whether all tables used in the triggers are available or not in that oracle schema.If the table is not available then user needs to create the table.

Solution 2:

Trigger Issue Resolution

To check whether this issue is because of trigger execution you need to check:

Alter system set “_system_trig_enabled”=FALSE;

View all triggers where trigger_type is before each row and after each row:

SELECT * FROM dba_triggers

WHERE trigger_type not in (‘before each row’,’after each row’);

To find the most relevant triggers, filter the triggering_event column.

Find the trigger that is causing the problem and disable it or drop it to resolve the issue. Usually, this error occurs in the Oracle database by the system level triggers on DDL or SYSTEM events.

Solution 3:

New table creation issue

If this error will occur due to newly created table then user needs to check the related system packages of oracle and compile package specification and body once.

Example:

User needs to recompile DBMS_CDC_PUBLISH package. User needs to compile all invalid packages that are no longer viewed.So this may be the third possible solution to resolve this kind of error.

Hope you like this article.Please don’t forget to share it with everyone.

I m getting the below SQL exception and I don’t know what’s the root cause for this exception? I am also closing db connection and statement too.

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-01000: maximum open cursors exceeded

Following is my code:

 while(true)
 {

   Statement stmt2 = conn1.createStatement();
   ResultSet rs2 = null;

   int rec_count=0;
   rs2 = stmt2.executeQuery("select count(*) as cnt from   some_table");                                  
    while(rs2.next())
   {
     rec_count = rs2.getInt("cnt");
   }

   if(rec_count>0)
   {
     update_qry_b_trg1 = "update some_table set to_be_triggered=1,algo_status='D',dealer_id='HD001',price_trig_date=sysdate where buy_sell = 'SELL' and ordertype = 'BNLD' and to_be_triggered = 0 and algo_status = 'P' and Mod(group_ref_no,5)="+th_id;

   String final_qry = "BEGIN \n"+update_qry_b_trg1+";\n"+";\n END;";

   int rows = stmt1.executeUpdate(final_qry);
   stmt1.close();
   }

   rs2.close();
   stmt2.close();

   }

RAS's user avatar

RAS

8,10016 gold badges64 silver badges86 bronze badges

asked Nov 6, 2012 at 10:43

praveen2609's user avatar

3

Whereever stmt1 is initialized, it is a better idea to close it in a finally block. In your case you are closing it in an if condition. if the condition doesn’t pass, the statement will remain open and you will get this

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1

Also you have this running in a while loop, so you need to make sure, you close each and every Statement which is opened.

answered Apr 25, 2013 at 17:13

Hiren's user avatar

HirenHiren

7729 silver badges23 bronze badges

Problem:

Connection from the SQL Developer fails with the following error:

ORA-00604: error occurred at recursive SQL level 1 ORA-12705: Cannot access NLS data files or invalid environment specified

Solution:

Find sqldeveloper.conf file:

$ find / -name sqldeveloper.conf 2>>/dev/null

^@/System/Volumes/Data/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf
/Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf

Add the following two parmeters in /Applications/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin/sqldeveloper.conf

AddVMOption -Duser.language=en
AddVMOption -Duser.country=US

Restart SQL Developer and try connection again.

Антон (LogRus)

Глобальный модератор

ru
Offline Offline
Пол: Мужской

Внимание! Люблю сахар в кубиках!

WWW


Добрый день!

Довольно много времени убил на борьбу с этой ошибкой при подключении к серверу Oracle Express Edition из VS.NET 2005

В сети полезной информации почти не нашел, то что нашел было или не по руски и невнятно или по руски и невнятно Улыбаюсь

База UNICODEная.

Решение такое лезем в реестр HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ODACHome1\NLS_LANG устанавливаем в значение RUSSIAN_RUSSIA.AL32UTF8, где:
RUSSIAN это NLS_LANGUAGE на серваке
RUSSIA это NLS_TERRITORY на серваке
AL32UTF8 это NLS_CHARACTERSET на серваке

в общем случае NLS_LANG устанавливаем в NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET

может еще кому поможет.


Записан

Странно всё это….

RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


http://ora-00604.ora-code.com/

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

NLS — это первым делом, сразу после установки. В том числе и для клиентов.

« Последнее редактирование: 08-06-2007 06:14 от RXL »
Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Антон (LogRus)

Глобальный модератор

ru
Offline Offline
Пол: Мужской

Внимание! Люблю сахар в кубиках!

WWW


RXL, не разу е ставил оракл и не настраивал клиентов Улыбаюсь

а в описании ошибки не говорилось откуда она взялась, видимо глюк какой-то в реализации ODP.NET
мне выдавалась ошибка «error occurred at recursive SQL level %s»
видимо вместо %s должно было быть описание, но его не было.


Записан

Странно всё это….

Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


LogRus, клиент оркала под винду? Нет ничего проще Улыбаюсь
Единственная задача настроить один раз одного клиента.
А потом, тупое копирование веток реестра и папок Оракла.

Offtopic:

Мой бывший шеф ставил оракл-клиента каждый раз с пакета инсталляции, и каждый раз забывал его пропатчить на руссификацию.
Я ему показал способ быстрой инсталяции.
Он и дальше продолжал инсталить.

Встретился с бывшим коллегой, он сказал что История с инсталляцией продолжается.
Бывает необходимость быстро подготовить машинку для отправки клиенту, ну а так как есть «оракловские админы» мой собутыльеседник никаких действий не принимает и ждет самого последнего  момента перед отправкой, а когда админы хватаются за головы, типа «пошел установлю», опс а машинка уже на объекте и уже работает.  (грустно)

В случае возникновения ошибок, лучше всего искать на оракловских сайтах, а только потом в инете


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Антон (LogRus)

Глобальный модератор

ru
Offline Offline
Пол: Мужской

Внимание! Люблю сахар в кубиках!

WWW


Клиент виндовый, сервер виндовый на тойже машине. Клиент ко всему прочему еще и .NET
Sla, учту на будующие, если вдруг буду ставить


Записан

Странно всё это….

RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


ORA-00604:   error occurred at recursive SQL level string
Cause:   An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables).
Action:   If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Support.

Вот эта самая следующая ошибка есть?


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Антон (LogRus)

Глобальный модератор

ru
Offline Offline
Пол: Мужской

Внимание! Люблю сахар в кубиках!

WWW


она, только в ней
ORA-00604:   error occurred at recursive SQL level string
только тут вместо string должнобыть более подробное описание что именно развалилось, а негодяйский ODP.NET туда ставит просто %s как будто тут printf должен был еще что-то подставить.


Записан

Странно всё это….

RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


LogRus, думаю, нужно рыться на оракловом сервере — возможно под эту траблу есть патч. Другой вопрос, что там все на английском и большая часть информации (metalink) доступна лишь имеющим поддержку.


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Falsehood

Молодой специалист

ru
Offline Offline
Пол: Женский

не может быть


привет.

Решение такое лезем в реестр HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ODACHome1\NLS_LANG устанавливаем в значение RUSSIAN_RUSSIA.AL32UTF8, где:
RUSSIAN это NLS_LANGUAGE на серваке
RUSSIA это NLS_TERRITORY на серваке
AL32UTF8 это NLS_CHARACTERSET на серваке

в общем случае NLS_LANG устанавливаем в NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET

может еще кому поможет.

поможет, если объясните, как узнать, какие NLS_LANGUAGE на серваке, NLS_TERRITORY на серваке и NLS_CHARACTERSET на серваке. пожалуйста  Скромно так...


Записан

Славная трава...

Антон (LogRus)

Глобальный модератор

ru
Offline Offline
Пол: Мужской

Внимание! Люблю сахар в кубиках!

WWW


В случае Oracle Express Edition
просто заходим на базу через WebInterface и смотри в разделе о базе раздела о национальных настройках.

в остальных случаях не знаю Улыбаюсь не моя это сфера знаний


Записан

Странно всё это….

PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Falsehood, на каком именно серваке? какой у тебя туда доступ? или ты имеешь ввиду как программо узнать?


Записан

Удачного всем кодинга! -=x[PooH]x=-

Falsehood

Молодой специалист

ru
Offline Offline
Пол: Женский

не может быть


Лёш, спасибо Улыбаюсь

при подключении к БД Oracle 10g Express Edition (из NetBeans 5.5.1, но это, наверное, не очень важно) генерится ошибка:
ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
сервер на той же машине. его настройки:
NLS_CHARACTERSET   AL32UTF8
NLS_LANGUAGE   RUSSIAN
NLS_TERRITORY   RUSSIA
в реестре ключ NLS_LANG поменяла в соответствии с приведенной LogRus формулой на
RUSSIAN_RUSSIA.AL32UTF8,
но ошибка не ушла. помогите  Жаль


Записан

Славная трава...

PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


http://ora-12705.ora-code.com/

ORA-12705:   Cannot access NLS data files or invalid environment specified
Cause:   Either an attempt was made to issue an ALTER SESSION command with an invalid NLS parameter or value; or the environment variable(s) NLS_LANG, ORA_NLSxx, or ORACLE_HOME was incorrectly specified, therefore the NLS data files cannot be located.
Action:   Check the syntax of the ALTER SESSION command and the NLS parameter, correct the syntax and retry the statement, or specify the correct directory path/values in the environment variables.

что у тебя в переменных окружения?


Записан

Удачного всем кодинга! -=x[PooH]x=-

Falsehood

Молодой специалист

ru
Offline Offline
Пол: Женский

не может быть


ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server


Записан

Славная трава...

PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


вот, что нашел: http://www.ors.kz/?mod=html&id=277

т.е. у нас фактически 2 пути обхода этой ошибки (WORKAROUND)

Первый путь подразумевает 5 действий:
Сохранить локализацию по умолчанию;
Установить локализацию по умолчанию в en_US;
Соединиться;
Восстановить локализацию по умолчанию;
Послать ALTER SESSION для установки сессии NLS установок.

Второй путь, использовать драйвер 10.1.0.3. Данный драйвер можно найти в установленной СУБД Oracle Database 10g 10.1.0.3 в каталоге {oracle_home}\jdbc\lib

Второй путь проще. Методом проб выяснилось, что для исправления ошибки необходимо заменить библиотеки ojdbc14dms.jar и ojdbc14.jar драйвера Oracle JDBC, который поставляется вместе с JDeveloper 10g, на библиотеки драйвера 10.1.0.3.

Заменяем библиотеки, которые находятся по пути {jdeveloper_home}\jdbc\lib.
После этого все отлично работает.

Библиотеки можно скачать тут (http://www.ors.kz/mod/stat.php?dir=20142210020052006110652/lib10103.rar&id=34&id_type=170).


Записан

Удачного всем кодинга! -=x[PooH]x=-

Falsehood

Молодой специалист

ru
Offline Offline
Пол: Женский

не может быть


СПАСИБО!!! драйвера помогли Улыбаюсь))


Записан

Славная трава...

Andrusha

Новенький

ua
Offline Offline


Здраствуйте ребята.
Прошу помощи в решении проблемы похожей на описаную Falsehood.

при подключении к БД Oracle 10g Express Edition (из NetBeans 5.5.1, но это, наверное, не очень важно) генерится ошибка:
ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
сервер на той же машине. его настройки:
NLS_CHARACTERSET   AL32UTF8
NLS_LANGUAGE   RUSSIAN
NLS_TERRITORY   RUSSIA
в реестре ключ NLS_LANG поменяла в соответствии с приведенной LogRus формулой на
RUSSIAN_RUSSIA.AL32UTF8,
но ошибка не ушла. помогите  Жаль

Сервер Oracle Express Edition 10, локальный, работает на CL8MSWIN1251 кодировке.
Из-за системы безопасности копаться в реестре, если и удасться, то уголовно наказуемо.

Насколько я понял ей помогли другие драйвера, то у меня такое не прокатит. Ибо работаю на режимном предприятии, где что-бы закнуть «из вне» безобидную фотографию на рабочий стол, надо пол предприятия оббегать и собрать пачку А4 справок.
Мб как-то можно другими способами решить роблему?
Буду рад любой светлой мысли.


Записан
RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


Andrusha, если ты прочел последние два поста, то должен понять, что ей помогло обновление клиентских драйверов БД до 10.1.0.3. На текущий момент это жутко старый драйвер. Обратись на работ в службу, заведующую обновлением ПО и затребуй обновление ораклового клиента до 10.2.0.1. Т.е. не надо делать это самостоятельно—запроси соответствующий отдел.

Я для NSL_LANG на виндовых клиентах ставлю NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 и настраиваю форматы дат в программе через ALTER SESSION. Работает стабильно.

« Последнее редактирование: 11-09-2012 04:24 от RXL »
Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Andrusha

Новенький

ua
Offline Offline


Andrusha, если ты прочел последние два поста, то должен понять, что ей помогло обновление клиентских драйверов БД до 10.1.0.3. На текущий момент это жутко старый драйвер. Обратись на работ в службу, заведующую обновлением ПО и затребуй обновление ораклового клиента до 10.2.0.1. Т.е. не надо делать это самостоятельно—запроси соответствующий отдел.

Я для NSL_LANG на виндовых клиентах ставлю NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 и настраиваю форматы дат в программе через ALTER SESSION. Работает стабильно.

Спасибо большее за оперативный подробный ответ.
Кажется я понял о чем Вы.
А оракловский клиент 10+ существует бесплатная версия? И подойдет ли она для для данных целей?


Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


Andrusha, насколько я знаю, клиент идет в составе сервера. Если ORA-сервер куплен, то и клиент есть.

Но непонятно, почему стоит неправильный клиент на серваке.


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Andrusha

Новенький

ua
Offline Offline


Sla, ORA-сервер стоит локальный, бесплатный, жутко порезаный Express Edition 10.
Но программа конектится к другому серверу, на котором стоит лицензионный ORACLE 8 успешно.


Записан
RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


Клиент идет также и отдельно от сервера и доступен на сайте Oracle бесплатно—надо только зарегистрироваться. Старые версии порой убирают из публичного доступа, но можно найти его на торрентах: добрые люди выкладывают образа дистрибутивов  как есть.

Попробуй сперва с NLS_LANG. Так будет проще, чем драйвера ставить. Обычно этот параметр в винде задается ключем в реестре (HKML/Software/Oracle), но можно прописать его как переменную окружения. Проверил: переменная окружения имеет более высокий приоритет, чем запись в реестре.


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Andrusha

Новенький

ua
Offline Offline


Andrusha, переменную окружения лучше вписать внутри программы при подключении или в cmd?


Записан
RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


Как будет удобно.


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

an0521

Новенький

ru
Offline Offline


Всем Доброго времени суток. Исполнил рекомендации. ошибка не уходит.  может ещё что нибудь посоветуете…


Записан
RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


Я уже ничего не посоветую, живого Оракла лет уже 6 в глаза не видел.

Думаю, стоит начинать с рассказа о своей проблеме.


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

an0521

Новенький

ru
Offline Offline


Как приконнектится к серверу ORACLE из под 1C7.7
Дано :

 сервер moon (s1111). сервер с реальными данными.
MOON =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 123.4.56.78)(PORT = 11111))
    )
    (CONNECT_DATA = (SID = PRD))
  )

 Подключение ко всем серверам осуществлять пользователем XXXX с паролем xxxx.

 После подключения  необходимо инициализировать окружение вызовом функции:
xxeq_interface.login(user_name, password) RETURN numeric
где user_name, password  — имя пользователя и пароль входа в OEBS.

 Пробую такую конструкцию — не выходит :

 Connection = CreateObject(«ADODB.Connection»);
ConnectionString = «driver={SQL Server}; server=
  |(DESCRIPTION =
  |(MOON =
  |  (ADDRESS_LIST =
  |    (ADDRESS = (PROTOCOL = TCP)(HOST = 123.4.56.78)(PORT = 1111))
  |  )
  |  (CONNECT_DATA = (SID = PRD))
  |)); uid=XXXX; Pwd=xxxx; Database =moon»;

 Connection.Open(ConnectionString);

 P.S.  естественно имена/адреса изменены


Записан
RXL

Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW


SQL Server — это MS, а не Oracle.
Не уверен, что прокатит такой способ передачи настроек подключения. У Оракла, помнится, они должны быть в файле tnsnames среди файлов драйвера.


Записан

… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Понравилась статья? Поделить с друзьями:
  • Ora 00257 ошибка архивации
  • Ora 00001 unique constraint ошибка
  • Or pmia 14 ошибка что это
  • Or ccseh 05 как исправить код ошибки
  • Or pmia 14 ошибка при оплате картой сбербанка