2013-03-13 12 views
7

Starając się stworzyć spust nazwie ghazal_current_bef_upd_row:Dlaczego nie mogę tworzyć wyzwalaczy dla obiektów należących do SYS?

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; 

pojawia się następujący błąd:

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. 

Zarówno tabele nazwanych ghazals_current i ghazal_current_audit zostały stworzone przez SYS. Dlaczego nie mogę utworzyć wyzwalacza w tabeli utworzonej przez SYS.

+0

Oracle nie zezwala na tworzenie wyzwalaczy na obiektach należących do SYS. –

+1

Nie jest dobrą praktyką tworzenie wyzwalaczy opartych na użytkownikach w schemacie SYS. Dlaczego nie tworzyć tabel, wyzwalaczy i innych obiektów w nowym schemacie? – user75ponic

Odpowiedz

9

Nie powinieneś tworzyć obiektów żadnych obiektów w schemacie SYS. Ten użytkownik jest częścią systemu zarządzania bazami danych Oracle, a jego oprzyrządowanie może uszkodzić twoją bazę danych. Od the documentation.

„Konto administracyjne SYS jest tworzony automatycznie, gdy tworzona jest baza danych To konto może wykonywać wszystkie bazie funkcji administracyjnych sklepów schematu SYS tabel podstawowych i widoków słownika Te dane.. tabele podstawowe i widoki są krytyczne dla działania bazy danych Oracle . Tabele w schemacie SYS są manipulowane tylko przez bazę danych i nigdy nie mogą być modyfikowane przez żadnego użytkownika " ".

Och, na wypadek gdybyś się zastanawiał, to samo dotyczy SYSTEM.

Wyzwalacze są szczególnie podatne na nadużycia i są głównym źródłem problemów z skalowaniem. Właśnie dlatego Oracle zabrania nam budować wyzwalacze w SYS, ponieważ może to uszkodzić lub przynajmniej wpłynąć na wydajność słownika danych.

Oczywiście, to nie jest to, co się tutaj dzieje. W SYS zbudowałeś własne tabele. Dobrze je upuść. Teraz. Użyj SYS, aby utworzyć własnego użytkownika, GHAZAL lub cokolwiek i nadaj mu wymagane uprawnienia. Następnie połącz się z nowym użytkownikiem, aby utworzyć swoje tabele i schematy.

+0

Nie zrozumiałem cię –