Tetikleyicilerin bilinen sınırlamaları

SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Florin Angelescu

Instructor

Tetikleyicilerin avantajları

  • Veritabanı bütünlüğü için kullanılır
  • İş kurallarını doğrudan veritabanında uygular
  • Veritabanında hangi ifadelerin izinli olduğunu denetler
  • Tek bir olayla tetiklenen karmaşık iş mantığını uygular
  • Veritabanlarını ve kullanıcı eylemlerini denetlemeyi kolaylaştırır
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyicilerin dezavantajları

  • Görmek ve tespit etmek zordur
  • İstemci uygulamalarına veya hata ayıklarken görünmez
  • Sorun giderirken mantığını izlemek zordur
  • Sunucuda ek yük oluşturup yavaşlatabilir
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Sunucu düzeyi tetikleyicileri bulma

SELECT * FROM sys.server_triggers;
| name                 | parent_class_desc | create_date | is_disabled |...|
|----------------------|-------------------|-------------|-------------|---|
| DenyNewDatabases     | SERVER            | 2019-01-22  | 0           |...|
| DenyNewLinkedServers | SERVER            | 2019-01-22  | 1           |...|
| DenyDatabaseDelete   | SERVER            | 2019-01-22  | 1           |...|
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Veritabanı ve tablo tetikleyicilerini bulma

SELECT * FROM sys.triggers;
| name                   | parent_class_desc | create_date | is_disabled | is_instead_of_trigger |
|----------------------|-------------------|-------------|---------------|-----------------------|
| TrackRetiredProducts   | OBJECT_OR_COLUMN  | 2019-04-19  | 0           | 0                     |
| PreventOrdersUpdate    | OBJECT_OR_COLUMN  | 2019-04-22  | 0           | 1                     |
| TrackDatabaseTables    | DATABASE          | 2019-04-23  | 0           | 0                     |
| KeepCanceledOrders     | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 0                     |
| DiscountsPreventDelete | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventNewDiscounts    | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventTableDeletion   | DATABASE          | 2019-04-27  | 0           | 0                     |
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyici tanımını görüntüleme (seçenek 1)

SSMS’ten Tetikleyici Tanımını Görüntüleme

CREATE TRIGGER PreventOrdersUpdate
ON Orders
INSTEAD OF UPDATE
AS
RAISERROR ('Updates on "Orders" table
            are not permitted.
            Place a new order
            to add new products.', 16, 1);
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyici tanımını görüntüleme (seçenek 2)

SELECT definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID ('PreventOrdersUpdate');
| definition                                                   |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyici tanımını görüntüleme (seçenek 3)

SELECT OBJECT_DEFINITION (OBJECT_ID ('PreventOrdersUpdate'));
| (No column name)                                             |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyici tanımını görüntüleme (seçenek 4)

EXECUTE sp_helptext @objname = 'PreventOrdersUpdate';
| Text                                                         |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyiciler için en iyi uygulamalar

İpuçları:

  • iyi belgelenmiş veritabanı tasarımı
  • tetikleyici tasarımında basit mantık
  • tetikleyicileri aşırı kullanmaktan kaçının
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Haydi pratik yapalım!

SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Preparing Video For Download...