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.
Ş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.
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.
Bu komut satırının çalıştırılmasından sonra elde edeceğimiz sonuç
aşağıdaki gibidir.
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.
Artık aşağıdaki komut satırı veritabanımızdaki Bankalar isimli
tabloyu başarı ile Drop edebilecektir.
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.
Sunucu üzerinde etkin olacak şekilde de aşağıdaki işlemler ile ilgili
olarak DDL trigger'ları oluşturulabilir.