SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software Kodyaz Development Resources
Development resources, articles, tutorials, samples, codes and tools for .Net, SQL Server, Vista, etc.




download SQL Server 2014



Yukon ile gelen T-SQL Yenilikleri




DDL Triggers (Data Definition Language Triggers)


MS SQL Server 2000'de trigger'lar bir tablo veya view üzerinde çalıştırılan Insert, Update veya Delete komutlarına tepki olarak çalıştırılması istenen kodlar bloğudur. Trigger'lar ilişkisel veritabanlarında veri bütünlüğünün korunmasında önemli bir yere sahiptirler.

MS SQL Server 2005 'e dek trigger'lar DML (Data Manipulation Language) komutları üzerinde tanımlanabiliyorlardı. SQL Server 2005 Beta 2 (Yukon) ile DDL (Data Definition Language) komutları üzerinde de trigger'lar tanımlama olanağına sahip olduk. DDL yani Data Definition Language komutlarını kısaca hatırlarsak bu komutların sql veritabanındaki nesneleri tanımladığını ve bu nesneleri yönetmekte kullanıldığını söyleyebiliriz.

DML Trigger'larının verinin bütünlüğünün sağlanmasında kullanıldığını söylemiştik. Peki SQL Server 2005 ile gelen DDL Trigger'ları hangi amaçlarla kullanabiliriz:

Birinci kullanım alanımız veritabanımızı oluşturan nesneler üzerinde herhangi bir değişikliği önlemek için olabilir. Örneğin veritabanındaki bir tablomuzum Drop edilmesi için çalıştırılacak "Drop Table Tablom" komutu sonrasında çalışacak olan  DDL trigger'ında çalıştıracağımız bir Rollback komutu ile tablonun Drop edilmesini önlemiş oluruz. DDL trigger'ları Drop komutlarına tepki verecek şekilde kullanmak hacker saldırılarına ek bir önlem olarak da kullanılabilir.

DDL Trigger'ların ikinci bir kullanım alanı da veritabanı üzerinde yapılan yapısal değişikliklerin kayıt altına alınması olabilir. Örneğin bir tabloda üzerinde Alter Table komutu ile gerçekleştirilebilecek değişiklikleri loglamak istiyorsanız DDL trigger'ları kullanabilirsiniz.





Örneğin aşağıdaki Create Table komutu ile bir tablo oluşturalım.

Create Table Bankalar (
  BankaNo int,
  BankaAdi nvarchar(100)
)

Şimdi eğer veritabanımızdaki hiçbir tablonun Drop edilememesini istiyorsak aşağıdaki kod bloğunu kullanarak DROP_TABLE DDL trigger'ı oluşturabilir ve tüm işlemleri RollBack edebiliriz.

Create Trigger RollBackDrop
  On Database
    For Drop_Table
As
  RollBack

RollBackDrop ismini verdiğimiz trigger veritabanındaki tüm tablolar üzerinde etkin olacak şekilde yani "On Database" kullanılarak oluşturulduktan sonra aşağıdaki drop komutlarını çalıştırabiliriz.

Drop Table Bankalar

Bu komut satırının çalıştırılmasından sonra elde edeceğimiz sonuç aşağıdaki gibidir.

Msg 3609, Level 16, State 2, Line 2
Transaction ended in trigger. Batch has been aborted.

Ve Bankalar ismindeki tablomuz halen veritabanımızda varlığını korumaktadır. Drop_Table DDL Trigger'ı RollBack komutunu çalıştırarak tablonun Drop edilmesini önlemiştir.

Aşağıdaki Drop Trigger cümlesi ile oluşturduğumuz RollbackDrop ismindeki DDL Trigger'ı veritabanımızdan silelim.

Drop Trigger RollbackDrop On Database

Artık aşağıdaki komut satırı veritabanımızdaki Bankalar isimli tabloyu başarı ile Drop edebilecektir.

Drop Table Bankalar

DDL Trigger'lar ile ilgili önemli bir nokta da bu trigger'ların scope yani faal oldukları sahalarıdır. Yani bir veritabanı üzerinde gerçekleştirilecek DDL komutları üzerinde trigger'lar oluşturabileceğiniz gibi server (sunucu) üzerinde de gerçekleştirilecek DDL komutları üzerinde trigger'lar oluşturabilirsiniz. Yukarıdaki örnek veritabanını aktif sahası (scope) olarak alan bir trigger'dır. Tüm sunucuyu (server) aktif sahası olarak alabilecek bir trigger da yeni bir login kullanıcısı oluşturulduğunda veya drop edildiğinde çalışacak şekilde oluşturulabilir.

Veritabanı üzerinde geçerli olmak üzere aşağıdaki işlemler de dahil olmak üzere pek çok işlem ile ilgili olarak DDL trigger'ları oluşturabilirsiniz.

CREATE_TABLE
ALTER_TABLE
DROP_TABLE

CREATE_VIEW
ALTER_VIEW
DROP_VIEW

CREATE_SYNONYM
DROP_SYNONYM

CREATE_FUNCTION
ALTER_FUNCTION
DROP_FUNCTION

CREATE_PROCEDURE
ALTER_PROCEDURE
DROP_PROCEDURE

CREATE_TRIGGER
ALTER_TRIGGER
DROP_TRIGGER

CREATE_INDEX
ALTER_INDEX
DROP_INDEX

CREATE_STATISTICS
UPDATE_STATISTICS
DROP_STATISTICS

CREATE_USER
ALTER_USER
DROP_USER

Sunucu üzerinde etkin olacak şekilde de aşağıdaki işlemler ile ilgili olarak DDL trigger'ları oluşturulabilir.

CREATE_LOGIN
ALTER_LOGIN
DROP_LOGIN

CREATE_ENDPOINT
DROP_ENDPOINT

GRANT_SERVER
DENY_SERVER
REVOKE_SERVER

CREATE_CERTIFICATE
ALTER_CERTIFICATE
DROP_CERTIFICATE





Follow Kodyaz on Twitter

Related SQL Resources

SQL Server Articles

SQL Server 2012

SQL Server Tools

SQL Blog

SQL Server 2008 Blog

Certification Exams Blog

Reporting Services Blog

Analysis Services Blog

MS SQL Server Forums



Free Exam Vouchers









Copyright © 2004 - 2014 Eralper Yilmaz. All rights reserved.
Community Server by Telligent Systems