programing

SYS가 소유한 개체에 트리거를 생성할 수 없는 이유는 무엇입니까?

iphone6s 2023. 7. 26. 21:40
반응형

SYS가 소유한 개체에 트리거를 생성할 수 없는 이유는 무엇입니까?

다음과 같은 이름의 트리거를 만드는 동안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 Database 작업에 중요합니다.SYS 스키마의 테이블은 데이터베이스에서만 조작되며 사용자가 수정해서는 안 됩니다."

아, 혹시 궁금하시겠지만, SYSTEM도 마찬가지입니다.

트리거는 특히 남용되기 쉬우며 스케일링 문제의 주요 원인입니다.이러한 이유로 Oracle은 SYS에서 트리거를 구축하는 것을 금지합니다. 트리거를 구축하면 데이터 사전이 손상되거나 최소한 성능에 영향을 미칠 수 있기 때문입니다.

물론 여기서 일어나는 일은 아닙니다.SYS에서 직접 테이블을 작성했습니다.그럼 떨어뜨리세요.이제 SYS를 사용하여 사용자, GAZAL 또는 원하는 이름을 만들고 필요한 권한(CREATE SESSION, CREATE TABLE, CREATE 트리거 등)을 부여합니다.그런 다음 새 사용자로 연결하여 테이블 및 기타 스키마 개체를 만듭니다.

언급URL : https://stackoverflow.com/questions/15377346/why-cannot-i-create-triggers-on-objects-owned-by-sys

반응형