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
'programing' 카테고리의 다른 글
| SQL UPDATE에서 str_replace? (0) | 2023.07.26 |
|---|---|
| 인덱스를 먼저 삭제하지 않고 MySQL 열을 삭제하면 어떻게 됩니까? (0) | 2023.07.26 |
| 비동기/대기와 함께 관찰 가능을 사용하는 것이 좋은 방법입니까? (0) | 2023.07.26 |
| @PathVariable과 @RequestBody 결합 (0) | 2023.07.21 |
| Pandas 데이터 프레임의 문자열을 '날짜' 데이터 유형으로 변환하려면 어떻게 해야 합니까? (0) | 2023.07.21 |