2013-03-13 77 views
7

Trong khi cố gắng để tạo ra một kích hoạt tên ghazal_current_bef_upd_row:Tại sao tôi không thể tạo trình kích hoạt trên các đối tượng thuộc sở hữu của 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; 

tôi nhận được lỗi sau:

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. 

Cả bảng tên ghazals_currentghazal_current_audit được tạo ra bởi SYS. Tại sao tôi không thể tạo trình kích hoạt trên bảng được tạo bởi SYS.

+0

Oracle không cho phép bạn tạo trình kích hoạt trên các đối tượng thuộc sở hữu của SYS. –

+1

Thực tế không tốt là tạo trình kích hoạt dựa trên người dùng trong lược đồ SYS. Tại sao không tạo bảng, trình kích hoạt và các đối tượng khác trong lược đồ mới? – user75ponic

Trả lời

9

Bạn không được tạo bất kỳ đối tượng nào trong lược đồ SYS. Người dùng đó là một phần của hệ thống quản lý cơ sở dữ liệu Oracle và công cụ xung quanh nó có khả năng phá vỡ cơ sở dữ liệu của bạn. Từ the documentation:.

"Các tài khoản quản trị SYS được tự động tạo ra khi một cơ sở dữ liệu được tạo Tài khoản này có thể thực hiện tất cả các chức năng hành chính cơ sở dữ liệu Các cửa hàng schema SYS các bảng cơ sở và quan điểm cho từ điển dữ liệu Những.. bảng cơ sở và quan điểm là quan trọng cho hoạt động của Cơ sở dữ liệu Oracle. Các bảng trong lược đồ SYS chỉ được cơ sở dữ liệu thao tác và không bao giờ được sửa đổi bởi bất kỳ người dùng nào. "

Ồ, trong trường hợp bạn đang tự hỏi, điều tương tự cũng áp dụng cho HỆ THỐNG.

Trình kích hoạt đặc biệt dễ bị lạm dụng và là nguồn chính của vấn đề mở rộng quy mô. Đó là lý do tại sao Oracle cấm chúng tôi xây dựng trình kích hoạt trong SYS, bởi vì làm như vậy có thể bị hỏng hoặc ít nhất tác động đến hiệu suất của từ điển dữ liệu.

Tất nhiên đó không phải là những gì đang xảy ra ở đây. Bạn đã xây dựng các bảng của riêng bạn trong SYS. Thả chúng đi. Hiện nay. Sử dụng SYS để tạo người dùng của riêng bạn, GHAZAL hoặc bất kỳ điều gì và cấp cho nó các đặc quyền cần thiết. Sau đó, kết nối với người dùng mới đó để tạo các bảng và lược đồ của bạn.

+0

Tôi không hiểu bạn –