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.
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:
- Retrieve the full error text for the ORA-04098 error and analyze it.
- Ensure that all objects used by the trigger have valid status. If necessary, recompile the involved objects.
- 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.
- 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
Всем привет!
0 |
Модератор 4204 / 3044 / 581 Регистрация: 21.01.2011 Сообщений: 13,184 |
|
11.03.2015, 16:20 |
2 |
При добавлении строки выдает ошибку Так что непонятно в сообщении? Триггер на 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 |
Только системные, они создались сами Что такое системные? Если имеется ввиду то, что ставится с СУБД, то схема ADMIN к системным не относится. 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 Если ошибка возникла в процессе компиляции триггера, то ошибки д.б. видны в представлении 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,
Добавлено через 1 минуту
0 |
190 / 55 / 4 Регистрация: 10.11.2014 Сообщений: 508 Записей в блоге: 1 |
|
12.03.2015, 23:26 |
7 |
Только системные, они создались сами. Разве в них может быть ошибка? этот термин неверный. Grossmeister, ТС очевидно использует APEX, там при создании таблицы мастером предлагается создать Vers7, сиквенс TIP_CONTR_SEQ у вас существует ? не грохнули его случайно ? в таблице есть поле ID ?
0 |
Модератор 4204 / 3044 / 581 Регистрация: 21.01.2011 Сообщений: 13,184 |
|
13.03.2015, 09:36 |
8 |
Триггер создается при создании таблицы автоматически Ты же ничего про APEX не сказал. А просто при создании БД ничего похожего не создается. Да и рабочих пространств в БД нет, это тоже фича APEX.
0 |
1 / 1 / 0 Регистрация: 19.02.2015 Сообщений: 46 |
|
13.03.2015, 10:29 [ТС] |
9 |
pic16f874, да, это АРЕХ. ID есть. сиквенс TIP_CONTR_SEQ — где его посмотреть? Миниатюры
0 |
Grossmeister Модератор 4204 / 3044 / 581 Регистрация: 21.01.2011 Сообщений: 13,184 |
||||
13.03.2015, 10:35 |
10 |
|||
сиквенс TIP_CONTR_SEQ — где его посмотреть
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 |
ORA-00942 На будущее: все подобные системные представления могут иметь 3 префикса: user_, all_, dba_
1 |
1 / 1 / 0 Регистрация: 19.02.2015 Сообщений: 46 |
|
13.03.2015, 12:37 [ТС] |
13 |
Grossmeister, как я понял сиквенс TIP_CONTR_SEQ отсутствует. Он в арех должен был автоматически создаться или нет? Для чего тогда нужны эти «сиквенсы»? Без них я так понимаю добавление не возможно. + я не могу добавить данные в таблицу связанную с этой, т.к. значение для т.»контрагенты» берется из т.»тип контрагентов». Миниатюры
0 |
1 / 1 / 0 Регистрация: 19.02.2015 Сообщений: 46 |
|
13.03.2015, 13:00 [ТС] |
14 |
нашел… тогда почему не добавляются данные в таблицу? Миниатюры
0 |
190 / 55 / 4 Регистрация: 10.11.2014 Сообщений: 508 Записей в блоге: 1 |
|
13.03.2015, 16:34 |
15 |
в апексе можно посмотреть сиквенсы выбрав sequenses в выпадающем списке, там где tables, triggers. покажите еще раз: в приведенном выше триггере ошибок не вижу. Добавлено через 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, попробую пересоздать и отпишусь. Добавлено через 2 часа 33 минуты Добавлено через 7 минут
0 |
Lorsik 105 / 49 / 26 Регистрация: 01.09.2014 Сообщений: 140 |
||||
17.03.2015, 16:21 |
19 |
|||
В таблице TIP_CONTR я не увидел колонку с названием «ID», зато в тригере ты обращаешься к этому полю как :new.ID
0 |
Модератор 4204 / 3044 / 581 Регистрация: 21.01.2011 Сообщений: 13,184 |
|
17.03.2015, 16:21 |
20 |
name already used by an existing constraint Что непонятно в этом сообщении? Попытка использовать имя, которое уже существует.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
17.03.2015, 16:21 |
20 |