En iyi yanıtlayıcılar
SQL Server Trigger Table / Column Loglama

Soru
-
Merhaba arkadaşlar üzerinde çalıştığımız bir projede SQL 2005 üzerinde tutulan veriler üzerinde yapılan her türlü işlemi loglama modeli ile kayıt altına almak istiyorum. Bu işlemi yaparken her tablo için ayrı ayrı log tabloları ve sorgular oluşturmak yerine. Yapmak istediğim bir trigger yazmak ve bu trigger ile ait olduğu tablo üzerinde yapılan tüm işlemleri aşağıda yapısını vereceğim Tablo içerisine atmak.
TableName ( İşlem yapıaln Tablonun adı)
ColoumnName (İşlem Yapılan Kolonun adı )
OldValue (İşlem Update işlemi ise Eski Değer)
NewValue (İşlem Update yada insert işlemi ise Güncel Değer )
Triggeri tetikleyen Table ve işlem yapılan kolonları nasıl alabileceğim konusunda fikirlerinizi bekliyorum.
- Düzenleyen Cengiz Gür 25 Ekim 2011 Salı 09:43
Yanıtlar
-
Merhaba Cengiz,
Aşağıdaki trigger örneğini de inceleyebilir misin
http://www.kodyaz.com/articles/sql-trigger-sql-server-trigger-example-to-log-changes-history.aspx
Bir de eğer her tablo için çalışabilecek bir loglama sistemi istiyorsan http://www.kodyaz.com/articles/log-data-changes-using-change-data-capture-for-sql-server-2005.aspx adresinde anlatmaya çalıştığım çözüme bak.
Biz bunu aktif olarak kullanıyoruz.
Sen sadece loglamak istediğin tabloyu özel bir tabloya kaydediyorsun, bunun arkasında çalışan triggerlar loglama için hedef olan tabloya gerekli trigger'ları oluşturuyor.
Ardından hedef tablodaki değişiklikler log tablolarına kaydedilmiş oluyor.
Eğer çözüm ilgini çekerse, sorularında yardımcı olmaya çalışabilirim
Umarım linklerin yardımı olur
SQL Server, SQL Server 2012 Denali and T-SQL Tutorials- Yanıt Olarak İşaretleyen Cengiz Gür 16 Kasım 2011 Çarşamba 15:47
Tüm Yanıtlar
-
Merhaba,
aşağıdaki örneğe göz atın isterseniz.
http://weblogs.sqlteam.com/brettk/archive/2006/11/29/35816.aspx
-
-
Her iki örnekte yeterli değil. Bu şekilde
Şöyle ki Ürünler(ID,UrunAdı) ve ÜrünDetay ( ID,Renk,En,Boy) şeklinde iki tablo olsun.
Create trigger tr_UrunTBL on Urunler for insert,update,delete as if update(UrunAdı) --Loglama işlemi Create trigger tr_UrunDetayTBL on UrunDetay for insert,update,delete as if update(Renk) --Loglama işlemi if update(En) --Loglama işlemi if update(Boy)
-- Loglama işlemi
Görüldüğü gibi iki tablo içinde farklı trigger yazılması ve her trigger içerinde tabloya ait tüm kolonlar için if Update(KolonAdi) kullanımı ile değişen kolon yakalanmalı. Bunun yerine Tek bir Trigger yazıp içinde ki if update(Koşulunu) yapmadan o sorguda sadece etkilenen Kolonları eski ve yeni değeri ile alıp Log Tablosuna kayıt yapmak istiyorum. -
Merhaba Cengiz,
Aşağıdaki trigger örneğini de inceleyebilir misin
http://www.kodyaz.com/articles/sql-trigger-sql-server-trigger-example-to-log-changes-history.aspx
Bir de eğer her tablo için çalışabilecek bir loglama sistemi istiyorsan http://www.kodyaz.com/articles/log-data-changes-using-change-data-capture-for-sql-server-2005.aspx adresinde anlatmaya çalıştığım çözüme bak.
Biz bunu aktif olarak kullanıyoruz.
Sen sadece loglamak istediğin tabloyu özel bir tabloya kaydediyorsun, bunun arkasında çalışan triggerlar loglama için hedef olan tabloya gerekli trigger'ları oluşturuyor.
Ardından hedef tablodaki değişiklikler log tablolarına kaydedilmiş oluyor.
Eğer çözüm ilgini çekerse, sorularında yardımcı olmaya çalışabilirim
Umarım linklerin yardımı olur
SQL Server, SQL Server 2012 Denali and T-SQL Tutorials- Yanıt Olarak İşaretleyen Cengiz Gür 16 Kasım 2011 Çarşamba 15:47
-
Merhaba Cengiz Bey,
Sorununuz ile ilgili olarak son durum hakkında bize geri dönüş sağlayabilirmisiniz. Eğer probleminiz çözümlendi ise , çözüm adımlarını bizimle paylaşabilirseniz sevinirim.
Teşekkürler.
Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
Facebook Üzerinden Takip Et!
Twitter'da Takip Et!
-
Kusura bakmayın farklı bir sorunla uğraşırken bunu unutmuşum. Şuan @eralper beyin vermiş olduğu bu bağlantıda ki örnek script tam olarak istediğim şey.
Update işlemlerinde Columns_cursor isimli Cursor içinde LogDetail için çalışması gerekn insert işlemleri çalışmıyor. Eve gidince düzenlemeleri yapıp denerim.
-
Merhaba Cengiz,
Log uygulamasını incelemiş olmana sevindim.
Update işlemlerinde derken loglanan bir tablo üzerinde çalıştırılan UPDATE komutundan bahsediyorsun değil mi?
Ben de bir taraftan hatanın nereden kaynaklanmış olabileceğine bakayım. Sen de eğer bir sonuca ulaşabilirsen paylaşırsan sevinirim.
Teşekkürler
SQL Server, SQL Server 2012 Denali and T-SQL Tutorials