Firebird otmatik loglama (Trigger Level Loging)
#1
Merhaba, Buraya yazmayalı yaklaşık bir yıl olmuş dedim vaktim varken firebird kısmına biraz katkım olsun. Bu sayfayı okuduğunuza göre muhtemelen sql i biliyorsunuz. En azından başlangıç seviyesi ile orta seviyede değilse benim anlatımım biraz ağır kaçacaktır. Edebiyat yapmada üstüme yoktur. Sevdiğim bir konu ise saatlerce nutuk atabilirim. Fakat anlatımım için aynı şeyleri söyleyemeyeceğim. Onun için adınız arif değilse işiniz baya zorSmile
Düzgün ve atlamadan olayları anlatmak için Flame robin ile boş bir veri tabanı açıp sırayla yaptıklarımı buraya aktarmaya çalışacağım. Ama önce bu yapılanların ne işe yarayacağını açıklık getireyim. Diyelimki bir veri tabanınız var. Veri tabanınıza sürekli veriler yazılıyor, değişiyor, siliniyor, peki ya işler ters giderse diyelim ki çalışanlardan biri hesaplarda ufak ufak oynamalar yapıyorsa yada yeni başlıyan personel verileri yanlışlıkla sildiyse bunu nasıl anlayacaksınız? Tabi hep fitnis fiçurus düşünmemek lazım bu kodları yaptığınız değişikleri sürekli versiyon versiyon saklamak isterseniz de kullanabilirsiniz.

Kısaca yapılacak işlem Datas tablosunda bir değişiklik olursa datas tablosundaki değişikliği güncel tarih saati ve değişikliği yapan kullanıcı ile birlikte DATASLOG tablosuna yazacağız.
Bu işlem için üç triger 1 store procedure ve 2 adet table (her table için 1 er otomatik tam sayı trigerı) kullanacağız.

Ben örnek dosyayı Firebird 2.5.1 de hazırladığım için bu dosyayı açmanız için En az Fb 2.5.1 kurulu olmalı.
Öncelikle Veri tabanının çiçek gibi olması için mutlaka domain kullanın.
firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per

SONRA VERİLERİ GİRECEĞİMİZ DATAS TABLOSUNU HAZIRLAYALIM
firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per
DATAS_ID otomatik artan sayı
Şimdi kayıt eklendiğinde otomatik olarak kayıt tarihi ve kayıt saatini ve kaydı açan db kullanıcısını yazacak triggerı yazalaım
firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per

buraya kadar olan kısım normal bir sql programcısının zaten bildiği çoğu sql kod üreten programında otomatik olarak hemen yapıverdiği şeyler. Size tavsiyem veri tabanının veri tabanı olduğu yeri anlamak istiyorsanız belli bir tecrübe seviyesini geçtikten sonra otomatik kodlayıcı değil kendi kodlarınızı kullanın. böylece kendi programınız için daha hızlı ve kullanışlı kodlar yazabilirsiniz.

Bundan sonrası veri tabanını deve tabanından ayıran kısım diyebiliriz. Eğer paradox sql den mahrum veri tabanları kullandıysanız bu kısım sizin için oldukça ilginç gelecektir.

Şimdi bir tablo daha açalım ve içerisine DATAS tablosunda yapılan silme değiştirme ve yeni ekleme bilgilerini geçerli kullanıcı ile birlikte ekleyelim.
firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per

Şimdi eğer kaydı silindiği için mi yoksa güncellediği için mi bilgisine ihtiyacımız yoksa tek bir triger işimizi görürdü. Fakat eğer bilginiz log tutacak kadar değerli ise büyük ihtimal ile logları bakarken kayıt action bilgisine ihtiyaç duyarsınız. Onun için üç ayrı triger tanımlayacağız. Üç triger ın bir birinden farkı sadece status alanına eklendiyse 1 yaz update olduysa 2 yaz silindiyse 3 yaz komutu olacak.
Bu işlemler için bir store procedure ve üç adet triger kullanmamız gerekiyor.





firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per

Kullandığım trigrlardan biri , diğerlerinde sadece gönderilen paremetreler değişiyor
firebird is not a supported langage
List of available langages :
modula3, smarty, bibtex, java, gdb, prolog, j, basic4gl, progress, spark, stonescript, proftpd, dos, tsql, oracle11, eiffel, povray, whois, rexx, python, icon, scheme, apache, div, 6502acme, asymptote, oz, objc, javascript, actionscript3, coffeescript, awk, verilog, genero, perl, winbatch, f1, sdlbasic, lb, m68k, freebasic, systemverilog, abap, pixelbender, autohotkey, rpmspec, oracle8, haskell, sql, gwbasic, glsl, boo, cmake, whitespace, mysql, gettext, matlab, algol68, ocaml, jquery, bnf, gml, ecmascript, delphi, epc, objeck, vedit, cil, pcre, xpp, io, autoit, autoconf, nagios, dcl, unicon, nsis, e, parasail, scilab, upc, 4cs, smalltalk, providex, newlisp, magiksf, pascal, vba, bf, ocaml-brief, vim, xorg_conf, lotusformulas, pli, diff, qbasic, robots, oberon2, arm, rsplus, erlang, latex, mxml, text, mmix, clojure, oxygene, fortran, cpp, csharp, genie, lua, lsl2, euphoria, cadlisp, php-brief, email, c_mac, perl6, cfm, pys60, powershell, actionscript, dot, c, xml, mapbasic, freeswitch, q, lolcode, klonec, groovy, html5, vbnet, logtalk, css, applescript, cpp-qt, caddcl, pike, visualprolog, cfdg, rails, idl, make, powerbuilder, sas, locobasic, pycon, vhdl, properties, thinbasic, gambas, typoscript, vala, asp, fo, plsql, parigp, rebol, kixtart, gnuplot, dcs, ldif, bash, oobas, visualfoxpro, asm, ini, falcon, chaiscript, tcl, php, reg, uscript, urbi, lotusscript, postgresql, hq9plus, modula2, 68000devpac, java5, go, blitzbasic, mirc, d, mpasm, pf, ruby, inno, z80, intercal, scala, ada, 6502kickass, 6502tasm, lisp, purebasic, apt_sources, netrexx, llvm, cobol, haxe, octave, avisynth, pic16, html4strict, bascomavr, sparql, teraterm, cuesheet, fsharp, dcpu16, c_loadrunner, zxbasic, xbasic, klonecpp, yaml, hicest, lscript, oorexx, per

DATAS TABLOSUNDA SADECE 'DATAS_1', MANUEL VERİ GİRİN DİĞERLERİNİ TRİGERLAR GÖNDERİYOR
'DATAS_ID*', VERİ OTOMATIK
'DATAS_DATE', VERİ OTOMATIK
'DATAS_USER', VERİ OTOMATIK
'DATAS_1', MANUEL
'DATAS_TIME' VERİ OTOMATIK





Eklenti Dosyaları
.zip   LOGDB.zip (Boyut: 49,22 KB / İndirilme: 33)



  Alıntı
Bu mesajı beğenenler:
#2
Paylaşım teşekkürler...

Başlığı ilk okuduğumda before update/delete trigger işleminde "old" değişkenindeki verilerin kaydedildiğini düşünmüştüm. "Log" lama deyince aklıma bu geliyor. Smile



  Alıntı
Bu mesajı beğenenler:
#3
Ahmet bey ağzınıza sağlık.. Yazım diliniz çok hoş..

İlgi alanıma uzak dahi olsa bu üslupta anlatılan her konu, bana keyif verdiği gibi anlatılan konuyu inceleme, deneme istediği de doğuruyor.. Umarım devamı gelir ve biz de keyifle yeni şeyler öğreniriz..



  Alıntı
Bu mesajı beğenenler:
#4
(04-01-2012, 02:17)Zeki Gürsoy demiş ki: Paylaşım teşekkürler...

Başlığı ilk okuduğumda before update/delete trigger işleminde "old" değişkenindeki verilerin kaydedildiğini düşünmüştüm. "Log" lama deyince aklıma bu geliyor. Smile

Hocam ben kendi kodlarınmda kayıt değerlerini de procedure den alıyorum . bunu örnek olduğu için öyle denk gelmiş.
Burda da procedureu triger ın before update undan çağırırsan eski değerlerin gelemsi lazım.
EXECUTE PROCEDURE BACKUPDATAS(NEW.DATAS_ID, 2)



  Alıntı
Bu mesajı beğenenler:
#5
Örneği inceledim..Burada daha kapsamlı bir log örneği verebilirmisiniz?
İçinde olması gerekenler
1)Kayıtekle
2)Alanda değişiklik bilgisi
3)Kayıt silme bilgisi

Mesala 10 tane tablo var
11.tabloda log tablosu olsun..
Bu tabloda hangi tabloya kayıt yapıldığı
Hangi tabloda değişiklik yapıldığı..Değişiklik yapan kullanıcı adı ve alanın değişiklik öncesi içindeki veri...
Silme ...
Tam bir logging örneği yapıp paylaşabilirseniz seviniriz..
Eğer firebird için böyle çalışma yapabilirseniz şahsen çalışmanınızın altına koyacağınız banka hesap numarasına şahsen küçük de olsa ben ve benim gibilerin cüzzüde olsa bir meblağ yatıracağını bilmelisiniz..
Teşekkürler..
Böyle bir logging çalışması netsis programında var ordan inceleyebilirsiniz fikir edinmek açısından.



  Alıntı
Bu mesajı beğenenler:
#6
Bu da benim kullandığım loglama yöntemi
select
ibe$log_tables1.id,
ibe$log_tables1.table_name,
ibe$log_tables1.operation,
ibe$log_tables1.date_time,
ibe$log_tables1.user_name,
ibe$log_fields.field_name,
ibe$log_fields.old_value,
ibe$log_fields.new_value
from ibe$log_fields
inner join ibe$log_tables ibe$log_tables1 on (ibe$log_fields.log_tables_id = ibe$log_tables1.id)

U:UPDATE
I:INSERT
D:DELETE
[Resim: 3ucww.jpg]
[Resim: 3uczf.jpg]



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Firebird Store procedure le Bul ve Değiştir AhmetNuri 2 3.000 26-06-2022, 00:20
Son Mesaj: Zeki Gürsoy
  Firebird : Kurulum ve Connection Zeki Gürsoy 9 15.274 21-04-2021, 15:13
Son Mesaj: sarsak
access-sql-14 Firebird : Yürüyen Bakiye Uygulaması Zeki Gürsoy 16 13.925 12-08-2015, 14:12
Son Mesaj: akuyumcu63
  Firebird Aynı Kayıtları bul ve sil AhmetNuri 0 2.928 12-10-2012, 20:52
Son Mesaj: AhmetNuri
  firebird ile listelenmiş verinin kaynak tablosunu değiştirme yardım! muratxx5 1 2.419 21-05-2012, 00:05
Son Mesaj: Zeki Gürsoy
  Firebird Veritabanında olan procedure lar nasıl gizlenir softdestek 8 6.092 19-03-2012, 21:40
Son Mesaj: softdestek
  Firebird : DateDiff (Excel ETARİHLİ fonk. birebir kopyası) Zeki Gürsoy 0 3.935 21-02-2012, 02:58
Son Mesaj: Zeki Gürsoy
  Trigger dan Firebird veri tabanı kullanıcısı ekleme silme ve gücelleme AhmetNuri 7 8.300 12-01-2012, 22:25
Son Mesaj: Zeki Gürsoy

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi