1. Anasayfa
  2. SQL Server

CONTEXT_INFO ile T-SQL’de İşlemleri Kullanıcıya Göre Sınırlamak


0

Yazdığımız kodların farklı kişilere göre farklı davranması, argo tabirle “adam seçmesi” çoğu zaman ihtiyaç duyulan bir özelliktir. Bunu .net tarafında çoğu zaman yapmışızdır, ancak Sql Server tarafında gerekli olduğu durumlar da olabilir mi ? Mesela bir kullanıcının yapacağı ve veritabanını meşgul edebilecek bir işlemin, diğer kullanıcıların performansını etkilememesini istediğimiz durumlar gibi.

Örnek olarak çok fazla data içeren Test adında bir tablomuz olsun ve burada yapılan kullanıcı işlemlerini log’ladığımız bir de Test_Log tablomuz olsun. Log’lama işlemini de trigger yardımıyla yapalım. Test üzerinde yapılan her işlem, Test_Log tablosuna kaydedilsin. Test tablosunda bir çok kolonu ve bütün satırları içeren yüklü bir update komutu çalıştırmam gerektiğinde, bunun diğer kullanıcıların performansını etkilememesi için Test_Log tablosuna yansımasını istemiyorum. Ancak sistem çalışır halde olduğundan, trigger’ı da disable etmemem gerekiyor. Böyle bir durumda yapmamız gereken CONTEXT_INFO ‘dan faydalanmak. CONTEXT_INFO değerini set etmek oldukça kolay:

SET CONTEXT_INFO 0x1256698456

SELECT CONTEXT_INFO()

Örnekte bahsettiğimiz trigger’a ise şu eklemeyi yapmamız gerekiyor:

CREATE TRIGGER TR_Test ON dbo.Test FOR INSERT,UPDATE,DELETE

AS

DECLARE @Cinfo VARBINARY(128)

SELECT @Cinfo = CONTEXT_INFO()

IF @Cinfo = 0x1256698456

RETURN

PRINT ‘Trigger Çalıştı’

Test tablosu üzerinde işlem yapmadan önce de trigger’da belirttiğimiz CONTEXT_INFO değerini belirlemeliyiz:

SET CONTEXT_INFO 0x1256698456

— UPDATE dbo.TEST …

Böylece trigger tetiklendiği halde Test_Log tablosu üzerinde işlem yapmasına engel olduk.

CONTEXT_INFO değerini, bu tip işlemlerde olduğu gibi aynı tabloyu kullanan farklı uygulamalarda, hangi uygulamanın ne zaman kullandığı gibi detaylı rapor gerektiren durumlar için de kullanabiliriz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir