1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu về Trigger và thực nghiệm tạo các Trigger đảm bảo toàn vẹn cho dữ liệu trong Oracle

30 732 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 775,15 KB

Nội dung

Danh mục hình vẽ III Lời nói đầu Chương I: Tìm hiểu về Trigger 1.1. Khái niệm Trigger 1.2. Mục đích khi sử dụng trigger Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho dữ liệu trong Oracle 1.1. Các ràng buộc toàn vẹn dữ liệu với các Trigger 1.2. Các dạng ràng buộc toàn vẹn dữ liệu nên dùng Trigger 1.3. Khi nào thì sử dụng Trigger 1.3.1. Các trường hợp sử dụng Trigger : 1.3.2. Giải quyết vấn đề : 1.4. Các đặc trưng và hạn chế 1.5. Các biến cố trigger 1.6. Cơ chế hoạt động của trigger 2.1. Cú pháp Create Trigger 2.1.1. Befoe insert trigger 2.1.2. After insert trigger 2.1.3. Befoe update trigge 2.1.4. After update trigger 3.1.5. Befoe delete trigger 3.1.6. After delete trigger 2.2. Cú pháp Drop a Trigger 2.3. Cú pháp Disable Enable Trigger 2.3.1. Disable a Trigger 2.3.2. Disable all Trigger on a table 2.3.3. Enable a Trigger 2.3.4. Enable all Trigger on a table Chương III: DEMO

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT Mà ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ AN TOÀN CƠ SỞ DỮ LIỆU Đề tài Tìm hiểu Trigger thực nghiệm tạo Trigger đảm bảo toàn vẹn cho liệu Oracle Chuyên ngành: An tồn thơng tin Sinh viên thực hiện: - Trần V P - Lê Tuấn K - AT12 - Trần T - AT12 - Đinh H Đ – AT12 - Vương Đ B – AT12 Cán hướng dẫn : Khoa An tồn thơng tin – Học viện Kỹ thuật mật mã Hà Nội, 12/2017 MỤC LỤC Danh mục hình vẽ .III Lời nói đầu .1 Chương I: Tìm hiểu Trigger 1.1 Khái niệm Trigger 1.2 Mục đích sử dụng trigger .3 Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho liệu Oracle 1.1 Các ràng buộc toàn vẹn liệu với Trigger 1.2 Các dạng ràng buộc toàn vẹn liệu nên dùng Trigger .4 1.3 Khi sử dụng Trigger 1.3.1 Các trường hợp sử dụng Trigger : 1.3.2 Giải vấn đề : 1.4 Các đặc trưng hạn chế 1.5 Các biến cố trigger 1.6 Cơ chế hoạt động trigger 2.1 Cú pháp Create Trigger 2.1.1 Befoe insert trigger 2.1.2 After insert trigger 10 2.1.3 Befoe update trigger .11 2.1.4 After update trigger 13 3.1.5 Befoe delete trigger 14 3.1.6 After delete trigger .15 2.2 Cú pháp Drop a Trigger 16 2.3 Cú pháp Disable/ Enable Trigger 16 2.3.1 Disable a Trigger 16 2.3.2 Disable all Trigger on a table .16 2.3.3 Enable a Trigger 17 2.3.4 Enable all Trigger on a table 17 Chương III: DEMO 18 Kết luận 26 Tài liệu tham khảo 27 Danh mục hình vẽ Hình II-1: Cú pháp BEFOE INSERT Trigger .9 Hình II-2: Cú pháp AFTER INSERT Trigger .10 Hình II-3: Cú pháp BEFOE UPDATE Trigger 11 Hình II-4: Cú pháp AFTER UPDATE Trigger 13 Hình II-5: Cú pháp BEFOE DELETE Trigger 14 Hình II-6: Cú pháp AFTER DELETE Trigger 15 Hình II-7: Cú pháp Drop a Trigger .16 Hình II-8: Cú pháp Disable a Trigger 16 Hình II-9: Cú pháp Disable all Trigger on a table .16 Hình II-10: Cú pháp Enable a Trigger 17 Hình II-11: Cú pháp Enable all Trigger on a table 17 Lời nói đầu Trong vài năm qua thấy gia tăng công liên quan đến sở liệu thao tác khơng đáng có lập trình viên code ứng dụng Những dự án lớn DBA cung cấp procedure, function cho lập trình viên, kèm theo liệu đầu vào liệu đầu Như lập trình viên khơng quan tâm đến nội dung bên câu SQL có gì, họ cần biết input output Để hạn chế bảo vệ tính tồn vẹn sở liệu hầu hết hệ quản trị sử dụng Orcale khơng ngoại lệ ,đó Trigger.Nhóm chúng em tìm hiểu nghiên cứu qua chương sau: Chương I: Khái niệm Trigger Chương II: Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho liệu Oracle Chương III: Các cú pháp làm việc trigger Chúng em xin chân thành cảm ơn cô Nguyễn Thị Lượng tận tình hướng dẫn đưa nhận xét giúp báo cáo nhóm hồn thiện Chương I: Tìm hiểu Trigger 1.1 Khái niệm Trigger Trigger loại thủ tục đặc biệt thực thi cách tự động có kiện thay đổi liệu xảy Update, Insert hay Delete Trigger dùng để đảm bảo ràng buộc liệu, tính quán, thực quy tắc liệu phức tạp Trigger đối tượng đặc biệt tạo bảng phần sở liệu Trigger truy vấn tới bảng khác bao gồm câu lệnh SQL phức tạp Chúng ta tạo trigger cho hành động bảng kết hợp hành động trigger Trigger DBA xây dựng Một sở liệu có tập hợp trigger gọi sở liệu hoạt động Một trigger gồm phần:  Sự kiện: Những thay đổi ảnh hưởng tới sở liệu trigger hoạt động  Điều kiện: Một truy vấn kiểm tra thực trigger hoạt động  Hoạt động: Một thủ tục thực trigger hoạt động điều kiện Một trigger nghĩ 'daemon' điều khiển sở liệu, thực sở liệu có thay đổi ứng với kiện xác định Một điều kiện trigger trả giá trị True/False (ví dụ, tất nhân viên có lương $100,000) truy vấn Một truy vấn hiểu true tập kết không rỗng, false truy vấn kết trả Nếu phần điều kiện có giá trị true, hành động trigger thực Một hoạt động kiểm tra kết truy vấn phần điều kiện trigger, tham chiếu tới giá trị cũ giá trị thay đổi sau thực trigger, thực truy vấn làm thay đổi sở liệu Thực tế, action thực chuỗi câu lệnh định nghĩa liệu (ví dụ, tạo bảng mới, thay đổi quyền người dùng) lệnh hướnggiao dịch, gọi thủ tục khác Tuy nhiên khác với thủ tục nội tại, trigger hồn tồn khơng có tham số Ngồi gọi thực trực tiếp trigger lệnh EXECUTE thủ tục nội lệnh khác, thay vào trigger thực cách tự động liệu bảng có liên quan đến trigger bị cập nhật Chính nhờ vào tính đặc biệt tự động thực mà nội dung lệnh bên trigger dùng cho cơng việc sau : • Kiểm tra ràng buộc tồn vẹn liệu phức tạp • Thực xử lý thiết kế thi hành server (trong mơ hình client/server) Các xử lý mà ta muốn chúng tự động thực có thao tác INSERT, UPDATE DELETE xảy • Trigger dùng để thay constraint trường hợp ta muốn việc kiểm tra ràng buộc liệu kèm theo câu thơng báo thích hợp theo ý muốn người dùng 1.2 Mục đích sử dụng trigger Mục đích trigger đảm bảo quán sở liệu, với mục đích này, nên xem xét đến việc sử dụng ràng buộc tham chiếu (ví dụ, ràng buộc khố ngoại) Ràng buộc khơng tự động kích hoạt trigger nên ràng buộc dễ để hiểu cung cấp cho DBMS nhiều hội để tối ưu hoá việc thực Ràng buộc tránh cho liệu trở nên thiếu quán với loại câu lệnh nào, ngược lại trigger kích hoạt ứng với loại câu lệnh xác định (ví dụ, câu lệnh Insert Delete) Một lần nữa, ta thấy giới hạn làm cho ràng buộc dễ hiểu Mặt khác, trigger cho phép thực ràng buộc sở liệu nhiều cách phức tạp • Tự động tạo giá trị cột dẫn xuất • Ngăn chặn giao dịch khơng hợp lệ • Thực thi ủy quyền bảo mật phức tạp • Thực thi tính tồn vẹn tham chiếu nút sở liệu phân tán • Thực thi quy tắc kinh doanh phức tạp • Cung cấp đăng nhập kiện minh bạch • Cung cấp kiểm tốn tinh vi • Duy trì chép bảng đồng • Thu thập số liệu thống kê truy cập bảng Chương II: Các ràng buộc Trigger đảm bảo toàn vẹn cho liệu Oracle 1.1 Các ràng buộc toàn vẹn liệu với Trigger Có thao tác làm thay đổi liệu bảng sở liệu thao tác thêm (insert), thao tác sửa (update) thao tác xóa (delete) Như để đảm bảo liệu quán đắn, ta cần kiểm tra việc thực thao tác Có cách kiểm tra : kiểm tra mức giao diện kiểm tra mức sở liệu • Kiểm tra mức giao diện : cơng việc cơng việc lập trình hình giao diện • Kiểm tra mức sở liệu : công việc thực đối tượng constraint trigger Đối với ràng buộc toàn vẹn liệu đơn giản kiểm tra ràng buộc miền giá trị, kiểm tra ràng buộc thuộc tính bảng liệu,… ta nên sử dụng đối tượng constraint Đối với ràng buộc toàn xẹn liệu phức tạp khác – quy tắc định nghĩa dùng để kiểm tra tính tồn vẹn liệu nhiều cột nhiều dòng bảng khác Khi bắt buộc phải sử dụng đối tượng trigger, đối tượng cho phép xây dựng câu lệnh bên với mục tiêu câu lệnh thực thao tác làm thay đổi liệu xảy bảng liệu mà gắn Một trigger gắn với đối tượng table đối tượng view 1.2 Các dạng ràng buộc toàn vẹn liệu nên dùng Trigger Trên SQL Server, có cách thực ràng buộc tồn vẹn liệu : • Ràng buộc tồn vẹn liệu phương pháp mơ tả (declarative data integrity) Thực ràng buộc liệu theo phương pháp cơng việc xác định ràng buộc khóa chính, khóa ngoại, kiểm tra miền giá trị, … mô tả chúng thời điểm tạo table Đặc điểm cần biết phương pháp việc kiểm tra thực trước cho phép ghi vào table • Ràng buộc tồn vẹn liệu phương pháp theo thủ tục (procedural data integrity) Trong phương pháp này, việc ràng buộc toàn vẹn liệu xác định tập hợp câu lệnh T-SQL Các câu lệnh chứa bên đối tượng Trigger, chúng gọi thi hành có thao tác thêm, xóa, sửa liệu xảy table tương ứng Đặc điểm cần biết phương pháp việc kiểm tra thực sau liệu ghi vào table 1.3 Khi sử dụng Trigger 1.3.1 Các trường hợp sử dụng Trigger : • Quan điểm cần nghĩ đến trước tiên ràng buộc liệu dùng phương pháp mơ tả (declarative data integrity) dùng trigger để giải Tuy nhiên, bạn không thiết phải tuân thủ theo quan điểm thực tế bạn hồn tồn dùng trigger để thay cho constraint trường hợp bạn muốn tự kiểm sốt cho câu thơng báo thích hợp người dùng • Khi có thay đổi liệu table muốn liệu hay nhiều table khác tự động thay đổi theo cho phù hợp 1.3.2 Giải vấn đề : Với yêu cầu ràng buộc liệu này, ta cần phải dùng trigger để thực • Trên thực tế người lập trình muốn thay đổi cấu trúc lưu trữ liệu với mục tiêu tăng tốc độ xử lý việc xử lý tính tốn dễ dàng hơn, điều thường dẫn đến việc phá vỡ tính chuẩn sở liệu làm tăng thêm ràng buộc toàn vẹn liệu • Nếu bạn muốn sở liệu có thơng báo lỗi thích hợp theo ý muốn thao tác thay đổi liệu vi phạm ràng buộc toàn vẹn, bạn nên dùng trigger • Tất xử lý mà bạn muốn chúng tự động thực phía server có thao tác liệu INSERT, UPDATE DELETE xảy • Trigger khơng thể tạo table tạm (temporary table, table tạo với tên table có ký tự # ## phía trước) table hệ thống (system table) Tuy nhiên cần ý câu lệnh bên trigger hồn tồn tham chiếu đến nội dung bên table tạm table hệ thống 1.4 Các đặc trưng hạn chế • Từ trigger xây dựng bên câu lệnh tác động lên cột table sở liệu tớti đối tượng bên sở liệu hành • Có thể áp dụng trigger cho đối tượng View • Một trigger thực nhiều hành động (multiple actions), kích hoạt nhiều biến cố (các biến cố gồm : insert, delete, update) • Trigger tạo table tạm (temporary table, table tạo với tên table có ký tự # ## phía trước) table hệ thống (system table) Tuy nhiên cần ý câu lệnh bên trigger hồn tồn tham chiếu đến nội dung bên table tạm table hệ thống • Một hạn chế quan trọng mà bạn cần quan tâm trigger loại INSTEAD OF DELETE INSTEAD OF UPDATE định nghĩa table có chứa khóa ngoại dây quan hệ nối từ table chứa thơng qua khóa ngoại đến table khác có thiết đặt tương ứng dây quan hệ tính chất Cascade Delete Related Records Cascade Update Related Fieds Trong mối quan hệ hình trên, ta thiết đặt tính Cascade Delete Related Records dây quan hệ việc tạo trigger loại Instead Of Delete thực thành công 1.5 Các biến cố trigger Có biến cố tự kích họat trigger : INSERT, UPDATE DELETE Các biến cố xảy đối tượng table view thời điểm thao tác liệu tương ứng tác động lên đối tượng Ta gọi thi hành trực tiếp trigger Tồn trường hợp chắn kiện sửa xóa liệu xảy khơng kích hoạt trigger, trường hợp sau : • Khi sử dụng câu lệnh TRUNCATE TABLE khơng làm kích hoạt trigger định nghĩa cho biến cố DELETE Một điều quan trọng cần quan tâm trigger giao tác (transaction) không thành công tự động quan lui (rolled back) Bởi câu lệnh TRUNCATE TABLE không biến cố ghi nhận vào sổ ghi nhận biến cố, khơng thể quay lui khơng kích hoạt trigger DELETE • Câu lệnh WRITETEXT khơng ngun nhân gây kích hoạt trigger INSERT UPDATE 1.6 Cơ chế hoạt động trigger Khi thực việc thêm mẫu tin vào table, thao tác kích hoạt trigger, trigger lưu trữ liệu mẫu tin vừa thêm vào table có tên Inserted Tương tự thực việc xóa mẫu tin table, thao tác kích hoạt trigger, trigger lưu trữ liệu mẫu tin vừa xóa vào table có tên Deleted Cấu trúc hai bảng hòan tòan giống với cấu trúc bảng liệu liên quan đến trigger tạo Thật hai bảng tồn nhớ máy tính (RAM) xem hai bảng luận lý mà sử dụng xử lý trigger Chúng ta tham chiếu trực tiếp tiện ích SQL Query Analyzer bên thủ tục nội Chúng ta đề cập đến chế hoạt động trigger liên quan đến thao tác thêm xóa liệu Còn thao tác sửa đổi liệu (Update) Microsoft SQL Server xem phối hợp hai lệnh DELETE INSERT (xóa bỏ liệu cũ thêm vào liệu sau sửa đổi) mà trigger liên quan đến việc sửa đổi liệu tham chiếu đến hai bảng trung gian Inserted Deleted Trong bảng Deleted chứa đựng thơng tin dòng liệu bị hủy bỏ, dòng liệu cũ trước sửa đổi, bảng Inserted chứa đựng thơng tin dòng liệu vừa thêm vào, dòng liệu sau sửa đổi Một khái niệm quan trọng liên quan đến chế hoạt động trigger mà muốn đề cập phần này, khái niệm liên quan đến phần bổ sung phiên SQL Server 2000, khái niệm INSTEAD OF AFTER • Trigger loại INSTEAD OF bỏ qua hành động kích hoạt trigger (các thao tác insert, delete, update), thay vào thực câu lệnh bên trigger 10 EXCEPTION Xử lý ngoại lệ 2.1.4 AFTER UPDATE Trigger Hình II-4: Cú pháp AFTER UPDATE Trigger AFTER UPDATE Trigger có nghĩa Oracle chạy Trigger sau UPDATE thực thi OR REPLACE Không bắt buộc Nếu định, cho phép tạo lại Trigger tồn để thay đổi định nghĩa Trigger mà không cần đưa câu lệnh DROP Trigger Trigger_name Tên trigger tạo BEFORE INSERT Chỉ Trigger kích hoạt trước hoạt động INSERT thực thi Table_name Tên bảng mà Trigger tạo [ FOR EACH ROW] Được áp dụng cho hàng DECLARE Khai báo biến 16 BEGIN Câu lệnh Trigger EXCEPTION Xử lý ngoại lệ 3.1.5 BEFOE DELETE Trigger Hình II-5: Cú pháp BEFOE DELETE Trigger BEFOE DELETE Trigger có nghĩa Oracle chạy Trigger trước DELETE thực thi OR REPLACE Không bắt buộc Nếu định, cho phép tạo lại Trigger tồn để thay đổi định nghĩa Trigger mà không cần đưa câu lệnh DROP Trigger Trigger_name Tên trigger tạo BEFORE INSERT Chỉ Trigger kích hoạt trước hoạt động INSERT thực thi Table_name Tên bảng mà Trigger tạo [ FOR EACH ROW] Được áp dụng cho hàng 17 DECLARE Khai báo biến BEGIN Câu lệnh Trigger EXCEPTION Xử lý ngoại lệ 3.1.6 AFTER DELETE Trigger Hình II-6: Cú pháp AFTER DELETE Trigger AFTER DELETE Trigger có nghĩa Oracle chạy Trigger sau DELETE thực thi OR REPLACE Không bắt buộc Nếu định, cho phép tạo lại Trigger tồn để thay đổi định nghĩa Trigger mà không cần đưa câu lệnh DROP Trigger Trigger_name Tên trigger tạo BEFORE INSERT Chỉ Trigger kích hoạt trước hoạt động INSERT thực thi Table_name Tên bảng mà Trigger tạo 18 [ FOR EACH ROW] Được áp dụng cho hàng DECLARE Khai báo biến BEGIN Câu lệnh Trigger EXCEPTION Xử lý ngoại lệ 2.2 Cú pháp Drop a Trigger Hình II-7: Cú pháp Drop a Trigger Khi tạo Trigger oracle để xóa Trigger tạo sử dụng câu lệnh Drop Trigger Trigger_name Tên trigger tạo 2.3 Cú pháp Disable/ Enable Trigger 2.3.1 Disable a Trigger Hình II-8: Cú pháp Disable a Trigger Khi tạo Trigger oracle để vơ hiệu hóa Trigger tạo sử dụng câu lệnh Disable Trigger_name Tên trigger bị vơ hiệu hóa 2.3.2 Disable all Trigger on a table Hình II-9: Cú pháp Disable all Trigger on a table Khi tạo Triggers oracle, bắt buộc phải vơ hiệu hóa tất Trigger bảng sử dụng câu lệnh Disable all Trigger Table_name 19 Tên bảng mà tất Trigger bị vơ hiệu hóa 2.3.3 Enable a Trigger Hình II-10: Cú pháp Enable a Trigger Khi muốn bật lại Trigger bị vơ hiệu hóa sử dụng câu lệnh Enable Trigger_name Tên trigger tắt vơ hiệu hóa 2.3.4 Enable all Trigger on a table Hình II-11: Cú pháp Enable all Trigger on a table Khi muốn bật lại tất Trigger bị vơ hiệu hóa bảng sử dụng câu lệnh Enable all Trigger Table_name Tên bảng mà tất Trigger tắt vô hiệu hóa 20 Chương III: DEMO -tạo bảng Order create table orders ( order_id number(5), quantity number(4), cost_per_item number(6,2), total_cost number(8,2) ); affter delete create or REPLACE trigger orders_after_delete after delete on orders for each row declare v_username varchar2(10); begin tim ten nguoi xoa select user into v_username from dual; them ban ghi vao bang audit insert into orders_audit ( order_id, quantity, cost_per_item, tatal_cost, delete_date, delete_by ) 21 values ( :old.order_id, :old.quantity, :old.cost_per_item, :old.total_cost, sysdate, v_username ); end; affter insert create or replace trigger orders_after_insert after insert on orders for each row declare v_username varchar2(10); 22 begin tim ten nguoi theem select user into v_username from dual; them ban ghi vao bang audit insert into orders_audit ( order_id, quantity, cost_per_item, tatal_cost, username ) values ( :new.order_id, :new.quantity, :new.cost_per_item, :new.total_cost, v_username ); end; 23 affter update create or replace trigger orders_after_update after update on orders for each row declare v_username varchar2(10); begin tim ten nguoi sua select user into v_username from dual; them ban ghi vao bang audit insert into orders_audit ( order_id, quantity_before, 24 quantity_after, username ) values ( :new.order_id, :old.quantity, :new.quantity, v_username ); end; before delete create or replace trigger orders_before_delete after delete on orders for each row declare 25 v_username varchar2(10); begin tim ten nguoi xoa select user into v_username from dual; them ban ghi vao bang audit insert into orders_audit ( order_id, quantity, cost_per_item, tatal_cost, delete_date, delete_by ) values ( :old.order_id, :old.quantity, :old.cost_per_item, :old.total_cost, sysdate, v_username ); end; before update create or replace trigger orders_before_update after update on orders for each row declare 26 v_username varchar2(10); begin tim ten nguoi xoa select user into v_username from dual; capnhatngay :new.update_date := sysdate; capnhatnguoi :new.update_by := v_username; end; disable alter trigger orders_before_update disable; alter table orders disable all triggers; delete trigger drop trigger orders_before_delete; enable alter trigger orders_before_update; alter table orders enable all triggers; create table orders_audit ( 27 order_id number(5), quantity number(4), quantity_before number(4), quantity_after number(4), cost_per_item number(6,2), tatal_cost number(8,2), delete_date varchar2(10), delete_by varchar2(10), username varchar2(10) ) 28 Kết luận Ba chương chuyên đề thể mục tiêu đặt thực chuyên đề đạt Cụ thể: Chương I thể khái niệm Trigger mục đích sử dụng Trigger Trigger dùng để đảm bảo ràng buộc liệu, tính quán, thực quy tắc liệu phức tạp Mục đích trigger đảm bảo quán sở liệu, với mục đích này, nên xem xét đến việc sử dụng ràng buộc tham chiếu Chương II trình bày ràng buộc Trigger đảm bảo tính tồn vẹn liệu, nên sử dụng Trigger, hạn chế chế hoạt động Trigger cú pháp tạo Trigger Chương III demo lại cú pháp câu lệnh Trigger nhằm đảm bảo tính tồn vẹn liệu Tổng kết lại ba chương thể tìm hiểu Trigger thực nghiệm tạo Trigger đảm bảo toàn vẹn cho liệu Oracle 29 Tài liệu tham khảo [1] Oracle / PLSQL: Triggers https://www.techonthenet.com/oracle/triggers/index.php? fbclid=IwAR11RybMo5Bn1jzFtKeHN64pgHTGX3UXUnMIWtDf2bvWu4h7J92 hl_abbbI [2] Using Triggers https://docs.oracle.com/cd/B13789_01/appdev.101/b10795/adfns_tr.htm 30

Ngày đăng: 03/10/2019, 23:19

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w