Trigger is invalid and failed re validation ошибка

Oracle will try to recompile invalid objects as they are referred to. Here the trigger is invalid, and every time you try to insert a row it will try to recompile the trigger, and fail, which leads to the ORA-04098 error.

You can select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT' to see what error(s) the trigger actually gets and why it won’t compile. In this case it appears you’re missing a semicolon at the end of the insert line:

INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')

So make it:

CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
  BEGIN
        INSERT INTO Users (userID, firstName, lastName, password)
        VALUES ('how', 'im', 'testing', 'this trigger');
  END;           
/

If you get a compilation warning when you do that you can do show errors if you’re in SQL*Plus or SQL Developer, or query user_errors again.

Of course, this assumes your Users tables does have those column names, and they are all varchar2… but presumably you’ll be doing something more interesting with the trigger really.

totn Oracle Error Messages


Learn the cause and how to resolve the ORA-04098 error message in Oracle.

Description

When you encounter an ORA-04098 error, the following error message will appear:

  • ORA-04098: trigger name is invalid and failed re-validation

Cause

A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization failed for the trigger.

Resolution

The option(s) to resolve this Oracle error are:

Option #1

Resolve the compilation/authorization errors.

Option #2

Disable the trigger.

Option #3

Drop the trigger.

Note

You can also try running the following command to check for errors on the trigger:

SHOW ERRORS TRIGGER trigger_name;

Replace trigger_name with the name of your trigger.

Oracle database triggers are an incredibly useful feature for database administrators. They help them enforce database-level operations and process data changes in an automated fashion, allowing for more efficient database operations.

However, database administrators may encounter ORA-04098 errors when attempting to revalidate triggers. This is a critical error that should be addressed immediately, as it can potentially compromise important database operations and data integrity. The following guide provides actionable steps to diagnose and fix ORA-04098 trigger errors.

Causes of ORA-04098

ORA-04098 errors can be caused by a variety of factors, ranging from corrupted objects to outdated system information. To further diagnose the root-cause of an ORA-04098 error, there are a few important elements to consider:

  • The system and database versions in use,
  • The installed additional packages
  • The current setup of the database
  • Any recent changes made to the database
  • Any recent activity in the database

Solutions

To resolve this issue and prevent potential data loss, it’s important to take the following steps:

  1. Retrieve the full error text for the ORA-04098 error and analyze it.
  2. Ensure that all objects used by the trigger have valid status. If necessary, recompile the involved objects.
  3. Evaluate recent changes to the database (additions, removals, and modifications of triggers, tables and packages) and, if necessary, revert to a recent known-good state.
  4. Delete and restore or recreate the trigger if necessary.

FAQ

Q: What is an ORA-04098 error?
A: ORA-04098 is a critical error that is triggered when the revalidation of a database trigger fails. This error can potentially compromise important data operations and data integrity if not resolved quickly.

Q: What can cause an ORA-04098 error?
A: ORA-04098 errors can be caused by a variety of factors, such as corrupted objects, outdated system information, and recent changes to the database.

Q: How can I fix an ORA-04098 error?
A: To fix an ORA-04098 error, you’ll need to analyze the full error text and make sure all objects used by the trigger have valid status. You’ll also need to evaluate changes to the database, delete and restore/recreate the trigger if necessary, and revert to a recent known-good state if necessary.

Hi I have created a trigger as you can see bellow below, but it is giving the following error:

ORA-04098: trigger 'APPS.EMP_delete' is invalid and failed re-validation

My Code:

CREATE OR REPLACE TRIGGER emp_delete
AFTER DELETE
   ON EMP
   FOR EACH ROW

BEGIN

INSERT INTO history_emp   (EMPLOYEE_ID, SALARY, JOB_ID, HIRE_DATE, DEPARTMENT_ID, FIRST_NAME,     last_name, DELETED_BY, DELETION_DATE)
   VALUES
   (:OLD.EMPLOYEE_ID,
     :OLD.SALARY,
     :OLD.JOB_ID,
     :OLD.HIRE_DATE,
     :OLD.DEPARTMENT_ID,
     :OLD.FIRST_NAME,
     :OLD.LAST_NAME,
        USER,
    SYSDATE);

    DELETE FROM BACKUP_EMP WHERE EMPLOYEE_ID = :OLD.EMPLOYEE_ID;

END;

How to fix this error?

1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

1

11.03.2015, 15:59. Показов 22593. Ответов 21


Студворк — интернет-сервис помощи студентам

Всем привет!
Необходимо добавить три значения в таблицу «тип контрагента», которая связана с т.»контрагент».
При добавлении строки выдает ошибку: error ORA-04098: trigger ‘ADMIN.BI_TIP_CONTR’ is invalid and failed re-validation



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

11.03.2015, 16:20

2

Цитата
Сообщение от Vers7
Посмотреть сообщение

При добавлении строки выдает ошибку

Так что непонятно в сообщении? Триггер на INSERT имеет ошибки, поэтому добавления и не происходит. Ищи триггер и исправляй ошибки.



0



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

11.03.2015, 16:27

 [ТС]

3

Grossmeister, так я не создавал ни каких триггеров. Только системные, они создались сами. Разве в них может быть ошибка?



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

11.03.2015, 16:51

4

Цитата
Сообщение от Vers7
Посмотреть сообщение

Только системные, они создались сами

Что такое системные? Если имеется ввиду то, что ставится с СУБД, то схема ADMIN к системным не относится.
Если на Oracle ставится какая-то покупная система, то вполне могут быть ошибки. Во всяком случае сообщение говорит именно об этом.

Error Messages

ORA-04098 trigger ‘string.string’ is invalid and failed re-validation

Cause: A trigger was attempted to be retrieved for execution and was found to
be invalid. This also means that compilation/authorization failed for the trigger.
Action: Options are to resolve the compilation/authorization errors, disable the trigger, or drop the trigger.

Если ошибка возникла в процессе компиляции триггера, то ошибки д.б. видны в представлении dba_errors



0



190 / 55 / 4

Регистрация: 10.11.2014

Сообщений: 508

Записей в блоге: 1

12.03.2015, 08:17

5

приведите текст триггера, чтобы можно было о чем-то говорить.



0



Vers7

1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

12.03.2015, 21:47

 [ТС]

6

pic16f874,

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE TRIGGER  "BI_TIP_CONTR" 
  before INSERT ON "TIP_CONTR"               
  FOR each ROW  
BEGIN   
  IF :NEW."ID" IS NULL THEN 
    SELECT "TIP_CONTR_SEQ".NEXTVAL INTO :NEW."ID" FROM dual; 
  END IF; 
END; 
 
/
ALTER TRIGGER  "BI_TIP_CONTR" ENABLE;

Добавлено через 1 минуту
Grossmeister, ADMIN- это просто рабочее пространство (не знаю как правильно называется).
Триггер создается при создании таблицы автоматически



0



190 / 55 / 4

Регистрация: 10.11.2014

Сообщений: 508

Записей в блоге: 1

12.03.2015, 23:26

7

Цитата
Сообщение от Vers7
Посмотреть сообщение

Только системные, они создались сами. Разве в них может быть ошибка?

этот термин неверный.

Grossmeister, ТС очевидно использует APEX, там при создании таблицы мастером предлагается создать
поле-первичный ключ,триггер и сиквенс на его заполнение.

Vers7, сиквенс TIP_CONTR_SEQ у вас существует ? не грохнули его случайно ? в таблице есть поле ID ?



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

13.03.2015, 09:36

8

Цитата
Сообщение от Vers7
Посмотреть сообщение

Триггер создается при создании таблицы автоматически

Ты же ничего про APEX не сказал. А просто при создании БД ничего похожего не создается. Да и рабочих пространств в БД нет, это тоже фича APEX.
По поводу ошибки.
Как я уже сказал, посмотри dba_errors. Либо открой триггер в какой-то программе (тот же PL/SQL Developer) и попробуй его скомпилировать. Должен вывалить ошибки.



0



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

13.03.2015, 10:29

 [ТС]

9

pic16f874, да, это АРЕХ. ID есть. сиквенс TIP_CONTR_SEQ — где его посмотреть?
Grossmeister, ошибки выдал такие.(см.рис.)

Миниатюры

Ошибка "ORA-04098: trigger is invalid and failed re-validation"
 



0



Grossmeister

Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

13.03.2015, 10:35

10

Цитата
Сообщение от Vers7
Посмотреть сообщение

сиквенс TIP_CONTR_SEQ — где его посмотреть

SQL
1
2
SELECT *
FROM dba_sequences



0



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

13.03.2015, 12:11

 [ТС]

11

Grossmeister, ORA-00942: table or view does not exist



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

13.03.2015, 12:20

12

Цитата
Сообщение от Vers7
Посмотреть сообщение

ORA-00942

На будущее: все подобные системные представления могут иметь 3 префикса: user_, all_, dba_
user_… — это твои объекты, all_ — твои + те, на которые тебе выданы гранты, dba_ — все объекты (доступны только привилегированным пользователям).
Поэтому если тебе недоступна view с dba_ (а ORA-942 может означать как отсутствие объекта вообще, так и отсутствие прав на него), то можешь использовать другие 2 префикса с тем же суффиксом.



1



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

13.03.2015, 12:37

 [ТС]

13

Grossmeister, как я понял сиквенс TIP_CONTR_SEQ отсутствует. Он в арех должен был автоматически создаться или нет?
Я раньше имел дело только MS SQL Server, и не припомню что бы там такое было.
По крайней мере все данные добавлялись без проблем.

Для чего тогда нужны эти «сиквенсы»? Без них я так понимаю добавление не возможно. + я не могу добавить данные в таблицу связанную с этой, т.к. значение для т.»контрагенты» берется из т.»тип контрагентов».
Как создать сиквенс?

Миниатюры

Ошибка "ORA-04098: trigger is invalid and failed re-validation"
 



0



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

13.03.2015, 13:00

 [ТС]

14

нашел… тогда почему не добавляются данные в таблицу?

Миниатюры

Ошибка "ORA-04098: trigger is invalid and failed re-validation"
 



0



190 / 55 / 4

Регистрация: 10.11.2014

Сообщений: 508

Записей в блоге: 1

13.03.2015, 16:34

15

в апексе можно посмотреть сиквенсы выбрав sequenses в выпадающем списке, там где tables, triggers.

покажите еще раз:
скрин таблицы, закладка sql.
скрин триггера, закладка sql.
скрин сиквеса, закладка sql.

в приведенном выше триггере ошибок не вижу.
но как вариант могла закрасться русская буква Е или С

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



2



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

15.03.2015, 20:15

 [ТС]

16

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

а вообще почитайте статейки по ораклу, мне например нравится на «первых шагах» цикл Летючего
самое то для начинающего.

с удовольствием почитал бы, не могли бы поделиться ссылкой, а то в поиске все не то выдает



0



190 / 55 / 4

Регистрация: 10.11.2014

Сообщений: 508

Записей в блоге: 1

16.03.2015, 22:30

17

не увидел ошибок… вроде все правильно.
возможно где то русская буква закралась (если правили руками).

как вариант пересоздать таблицу и сиквенс.
или придумайте как организовать удаленный доступ.



1



1 / 1 / 0

Регистрация: 19.02.2015

Сообщений: 46

17.03.2015, 15:35

 [ТС]

18

pic16f874, попробую пересоздать и отпишусь.
Что касается удаленки, в TeamViewer я уже потратил пробное время

Добавлено через 2 часа 33 минуты
pic16f874, на последнем скрине вкладка errors есть какие то ошибки

Добавлено через 7 минут
Grossmeister, pic16f874, пересоздал таблицу. Данные добавились, но теперь не могу связать
The TABLE operation was not successful for the following reason:
ORA-02264: name already used by an existing constraint



0



Lorsik

105 / 49 / 26

Регистрация: 01.09.2014

Сообщений: 140

17.03.2015, 16:21

19

В таблице TIP_CONTR я не увидел колонку с названием «ID», зато в тригере ты обращаешься к этому полю как :new.ID
т.к. такого поля нет то и ошибка вылазит.
Судя по тому что в этой таблице первичный ключ это пол CONTR_ID то твой триггер необходимо слегка подправить.

Oracle 11 SQL
1
2
3
4
5
6
7
8
CREATE OR REPLACE TRIGGER bi_tip_contr
before inser ON tip_contr
FOR each ROW
BEGIN
IF :NEW.contr_id IS NULL THEN 
     SELECT tip_contr_seq.NEXTVAL INTO :NEW.contr_id FROM dual; 
END IF;
END;



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,184

17.03.2015, 16:21

20

Цитата
Сообщение от Vers7
Посмотреть сообщение

name already used by an existing constraint

Что непонятно в этом сообщении? Попытка использовать имя, которое уже существует.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

17.03.2015, 16:21

20

Понравилась статья? Поделить с друзьями:
  • Tray menu exe ошибка как исправить
  • Tray menu exe ошибка win 10
  • Transmission remote keenetic ошибка подключения
  • Transmission qt exe системная ошибка
  • Transload произошла системная ошибка при обработке повторите позже