Remkomplekty.ru

IT Новости из мира ПК
10 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка на рекурсивном sql уровне 1

Ошибка на рекурсивном sql уровне 1

Mon Nov 22 11:06:19 2010
Errors in file d:appyazynindmitrdiagrdbmsorclorcltraceorcl_ora_4816.trc:
ORA-00604: ������ �� ����������� SQL-������ 1
ORA-01722: �������� �����
ORA-06512: �� line 2

Errors in file d:appyazynindmitrdiagrdbmsorclorcltraceorcl_j005_3224.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01722: invalid number
ORA-06512: at line 2
ORA-12012: error on auto execute of job 12192
ORA-01722: invalid number
ORA-06512: at line 2
ORA-01403: no data found
ORA-01403: no data found
ORA-06512: at «SYS.DBMS_AQ_INV», line 679
ORA-06512: at line 1
ORA-06512: at «SYS.DBMS_AQ_INV», line 679
ORA-06512: at line 1

RMAN-20207: UNTIL TIME ��� RECOVERY WINDOW ��������� ����� �������� RESETLOGS

Errors in file d:appyazynindmitrdiagrdbmsorclorcltraceorcl_j002_644.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01722: invalid number
ORA-06512: at line 2
ORA-12012: error on auto execute of job 57366
ORA-01722: invalid number
ORA-06512: at line 2

RMAN> RUN <
2> SET UNTIL TIME = ‘01.11.2010’;
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> ALTER DATABASE OPEN RESETLOGS; >

RMAN-20207: UNTIL TIME ��� RECOVERY WINDOW ��������� ����� �������� RESETLOGS

Trace file d:applocalhostdiagrdbmsorclorcltraceorcl_j000_3336.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 — Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows XP Version V5.1 Service Pack 3
CPU : 1 — type 586, 1 Physical Cores
Process Affinity : 0x0x00000000
Memory (Avail/Total): Ph:478M/2039M, Ph+PgF:3109M/4944M, VA:1180M/2047M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 34
Windows thread id: 3336, image: ORACLE.EXE (J000)

*** 2010-11-22 14:19:07.258
*** SESSION ID:(44.197) 2010-11-22 14:19:07.258
*** CLIENT ID:() 2010-11-22 14:19:07.258
*** SERVICE NAME:(SYS$USERS) 2010-11-22 14:19:07.258
*** MODULE NAME:() 2010-11-22 14:19:07.258
*** ACTION NAME:() 2010-11-22 14:19:07.258

Skipped error 604 during the execution of SYSTEM.LOGON_TRIGGER

*** 2010-11-22 14:19:07.258
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=0, mask=0x0)
—— Error Stack Dump ——
ORA-00604: error occurred at recursive SQL level 1
ORA-01722: invalid number
ORA-06512: at line 2
*** MODULE NAME:(DBMS_SCHEDULER) 2010-11-22 14:19:07.368
*** ACTION NAME:(RLM$SCHDNEGACTION) 2010-11-22 14:19:07.368

*** 2010-11-22 14:19:07.368
ORA-12012: error on auto execute of job 57366
ORA-01722: invalid number
ORA-06512: at line 2
Unexpected error 604 in job slave process
ORA-00604: error occurred at recursive SQL level 1
ORA-01722: invalid number
ORA-06512: at line 2
ORA-12012: error on auto execute of job 57366
ORA-01722: invalid number
ORA-06512: at line 2

Oracle Errors | ORA-00604: error occurred at recursive SQL level 1 | ORA-00604

ORA-00604: error occurred at recursive SQL level 1 :

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.

Читать еще:  Crystaldiskinfo ошибки чтения

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.

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.

Oracle Errors | ORA-00604: error occurred at recursive SQL level 1 | ORA-00604

ORA-00604: error occurred at recursive SQL level 1 :

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.

Читать еще:  Источник ошибки net sqlclient data provider

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.

Oбpaбoткa oшибoк в PL/SQL

Нельзя создать приложение, которое будет безошибочно работать в любых ситуациях: возможны аппаратные сбои, невыявленные ошибки приложения и ошибки из-за некорректных действий пользователей приложения (клиентов). Если при этом программная ошибка произошла в блоке PL/SQL, вложенном в другой блок, а тот, в свою очередь, вложен в третий блок и т.д., то она может дойти до клиентского приложения. Чтобы устранить возможную отмену большого объема ранее выполненных операций и трафик из-за возвращаемых клиенту ошибок, чтобы посылать клиенту точные сообщения о причине ошибки и способе ее устранения (если она все же дошла до клиента), разработчики приложения должны предусматривать возможные программные ошибки и создавать процедуры, адекватно реагирующие на них.

В PL/SQL предусмотрен механизмы перехвата и обработки ошибок, возникающих при выполнении программы. Эти механизмы называются исключительными ситуациями.

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

В PL/SQL используются следующие типы исключительных ситуаций:

  • встроенные исключительные ситуации;
  • исключительные ситуации, определяемые пользователем;
  • обработчик OTHERS.

Встроенные исключительные ситуации

Oracle включает четырнадцать встроенных исключительных ситуаций, соответствующих типовым ошибкам, приведенным в следующей таблице:

Если в раздел EXCEPTION программы (блока) включена фраза

WHEN имя_исключения THEN
текст_обработчика_исключения;

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

Такой обработчик может, например, выяснить ситуацию, при которой произошло деление на ноль, и выдать правдоподобный результат операции деления или прервать исполнение программы и дать сообщение об изменении каких-либо данных.
В последнем случае это может быть не типовое сообщение «Вы пытаетесь делить на ноль», а любое подготовленное пользователем сообщение, например, инструкцию длиной до 2048 символов.

Для выдачи сообщения об ошибке, обеспечения возврата в среду, из которой вызывалась текущая программа (блок) и отмены всех действий, выполненных в текущей транзакции, целесообразно использовать процедуру RAISE_APPLICATION_ERROR(errnum,errtext); где errnum – отрицательное целое число в диапазоне -20000 .. -20999 и errtext – символьная строка длиной до 2048 символов.

В приведенном ниже триггере «shtins» использованы два типа встроенных исключительных ситуаций: NO_DATA_FOUND и TOO_MANY_ROWS.

Так как в большом приложении могут часто повторяться встроенные или пользовательские исключительные ситуации, то целесообразно создать в базе данных таблицу (например, USERERR) с уникальными номерами (error_number) и текстами (error_text) исключений. Это позволит избежать определения лишних сообщений об ошибках и сделать их согласованными во всем приложении.

Читать еще:  Стим код ошибки 80

При использовании такой таблицы и процедуры RAISE_APPLICATION_ERROR надо описать в в разделе DECLARE блока две переменных (например, errnum типа NUMBER и errtext типа VARCHAR2) и использовать в обработчике исключений конструкцию:

Исключительные ситуации, определяемые пользователем

Кроме встроенных могут быть использованы собственные исключительные ситуации, имена которых необходимо описать в разделе DECLARE блока PL/SQL (например, err_stavka EXCEPTION). В разделе EXCEPTION блока должен быть описан соответствующий обработчик исключительной ситуации, например

В теле основной программы определяемые пользователем ошибки обычно проверяются с помощью операторов условия (IF…THEN). Для передачи управления обработчику пользовательской исключительной ситуации в случае обнаружения ошибки используется оператор RAISE имя_пользовательского_исключения Например

Обработчик OTHERS

Если исключительная ситуация не обрабатывается явным образом в блоке и для ее перехвата не используется обработчик OTHERS, то PL/SQL отменяет выполняемые блоком транзакции и возвращает необработанную исключительную ситуацию обратно в вызывающую среду.
Обработчик особых ситуаций OTHERS описывается последним в программе (блоке) для перехвата всех исключительных ситуаций, которые не были описаны в этой программе (блоке). Он может иметь вид

Запись опубликована 09.04.2010 в 7:12 дп и размещена в рубрике Oracle7 краткий справочник. Вы можете следить за обсуждением этой записи с помощью ленты RSS 2.0. Можно оставить комментарий или сделать обратную ссылку с вашего сайта.

Oracle mechanics

Производительность СУБД и смежные вопросы

ORA-01089 при запросах через dblink к Active Data Guard 11.2.0.3

В конфигурации Read Only Standby (2-node RAC 11.2.0.3) with Redo Apply (такой кластерный Active Data Guard) после остановки инстанса #1 (на котором выполняется накат логов) командой shutdown abort наблюдаются следующие интересные вещи:

1) Остающий рабочим инстанс #2 закрывает доступ к файлам бд – автоматически переходя в состояние mounted:

, и не возвращается в состояние READ ONLY в автоматическом режиме после рестарта инстанса #1 — что само по себе не совсем укладывается в концепцию Unbreakable, но, по крайней мере, подробно отражено в alert.log

2) после ручного возвращения инстанса #2 в состояние READ ONLY:

вне зависимости от состояния инстанса #1 и статуса процесса MRP0 (REDO APPLY) на инстансе #1, запросы через db link к инстансу #2 завершаются ошибкой ORA-01089 с длииинным – в нескольких минут — таймаутом:

Что в статистике active standby инстанса #2 отображается в виде многократного ожидания (до начала выполнения запроса — SQL_ID=NULL):

В то же время на инстансе #1 (после перезапуска standby инстанса в read only mode) проблем не наблюдается — запросы через db link выполняются без ошибок, несмотря на то что формально оба инстанса находятся в одинаково корректных состояниях:

с единственным отличием — накат логов штатно выполняется на ноде #1:

Сложилось впечатление, что при выполнении команд ALTER DATABASE OPEN READ ONLY | OPEN READ WRITE есть проблема, связанная с некорректным ПЕРЕзапуском функционала SMON transaction recovery (или какой-то составляющей из этой области?), наблюдаемая и на standby database, и на обычной primary database – специалистам большого Oracle известная — Bug 13724193 – ORA-1089 over database link [ID 13724193.8]:

A SQL command using a DB link to a primary database that was open could report that a shutdown was in progress if the primary instance had not been restarted since it transitioned from being an “open read only” standby

Workaround
Restart the primary instance.

Известный мне метод отключения | включения отложенного SMON tx recovery с использованием event 10513 не позволяет сэмулировать проблему

Вышеупомянутый для primary database workaround типа RESTART, естественно, помогает и в описанном выше случае для active standby инстанса #2

Кроме того, в случае остановки инстанса #1 командой shutdown immediate:

— системный процесс MRP0 (Managed Standby Recovery Process, выполняющий накат логов ) останавливается корректно по пользовательскому запросу.

Как следствие standby инстанс #2 доступ к бд не закрывает, tx recovery не отключает и остаётся доступным в состоянии READ ONLY:

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×