Вопрос:
При попытке создать триггер с именем ghazal_current_bef_upd_row:
create trigger ghazal_current_bef_upd_row before update on ghazal_current for each row when (new.Rating < old.Rating) begin insert into ghazal_current_audit (GhazalName,Old_Rating,New_Rating) values (:old.GhazalName,:old.Rating,:new.Rating); end;
Я получаю следующую ошибку:
Error report: ORA-04089: cannot create triggers on objects owned by SYS 04089. 00000 — «cannot create triggers on objects owned by SYS» *Cause: An attempt was made to create a trigger on an object owned by SYS. *Action: Do not create triggers on objects owned by SYS.
Обе таблицы с именем ghazals_current и ghazal_current_audit были созданы SYS. Почему я не могу создать триггер в таблице, созданной SYS.
Лучший ответ:
Вы не должны создавать какие-либо объекты в схеме SYS. Этот пользователь является частью системы управления базами данных Oracle, и изменение его схемы может привести к поломке вашей базы данных. Конечно, это может привести к аннулированию вашего контракта на поддержку Oracle (если он у вас есть). Из документации:
“Административная учетная запись SYS создается автоматически, когда База данных создана. Эта учетная запись может выполнять все базы данных административные функции. Схема SYS хранит базовые таблицы и представления для словаря данных. Эти базовые таблицы и представления критически важно для работы базы данных Oracle. Таблицы в SYS схема управляется только базой данных и никогда не должна изменяться любым пользователем. “
О, если вам интересно, то же самое относится и к SYSTEM.
Триггеры особенно подвержены злоупотреблениям и являются основным источником проблем масштабирования. Вот почему Oracle запрещает нам создавать триггеры в SYS, поскольку это может привести к повреждению или, по крайней мере, повлиять на производительность словаря данных.
Конечно, это не то, что здесь происходит. Вы создали свои собственные таблицы в SYS. Ну брось их. В настоящее время. Используйте SYS, чтобы создать своего собственного пользователя, GHAZAL или любое другое подходящее имя и предоставить ему необходимые привилегии: CREATE SESSION, CREATE TABLE, CREATE TRIGGER и так далее. Затем подключитесь как новый пользователь, чтобы создать свои таблицы и другие объекты схемы.