[ nikitaGradov @ 19.02.2013. 12:43 ] @
Interesuje me da li neko ima iskustva (ili ima predlog kako uraditi) u vezi monitoring-a i 'change tracking'-a sql baze ?
Radim u c#, radi se o jednoj desktop aplikaciji.

Treba mi mehanizam (u c#-u) za:
- monitoring izmjena u sql bazi, i
- change tracking.

Da pokusam da budem precizniji:
- N korisnika (na N racunara) koristi neku aplikaciju,
- baza podataka je na domen kontroleru (na kom postoji sql server 2008),
- kada korisnik M, recimo, promijeni podatke nekom entitetu (iz aplikacije), zahtjev je da:
- svi ostali korisnici dobiju poruku da je M izmijenio podatke, plus
- da dobiju informaciju koji atribut je izmijenio (polje 1, ili polje 2, u prevodu: kolonu 1, ili kolonu 2, ...).

Ako sam ja dobro razjasnio (sebi) 'stvari', trebaju mi mehanizmi da:
- detektujem da se desila promjena u bazi (notification), i
- detektujem koja polja (kolone u tabeli) su izmijenjena (change tracking).

Notifikaciju (da je tako nazovem) sam, do sada, rjesavao klasom SqlDependency (uglavnom jednostavniji primjeri, tipa: online prikaz novounesenih rekorda u bazu, recimo).
Primjenom ovog mehanizma ne moze se dobiti informacija STA je promijenjeno (i koje KOLONE su promijenile vrijednost).
Takodje, postoje brojna ogranicenja (recimo, kod kreiranja upita i slicno). Plus sam procitao da je od SQL servera 2008 ovaj koncept 'deprected' (i da ga treba izbjegavati zbog kompatibilnosti sa buducim verzijama).

Dalje, Change Tracking mehanizam je dobro opisan na nivou , da tako kazem, baze: postoje primjeri pomocu kojih se moze shvatiti citav scenario: od omogucavanja samog mehanizma change tracking-a, pa do dohvata promijenjenih podataka (kako reda, tako i kolona cije su se vrijednosti promijenile). Ono sto ne mogu da pronadjem je: KAKO pozvati ovaj mehanizam (change tracking-a) iz aplikacije, to jest, iz c#-a ?

Da skratim: treba mi prijedlog kako realizovati (da se nasalim 'dvaUjedan'): notifikaciju (o promjeni u sql bazi) plus dohvat (SAMO) promijenjenih vrijednosti (naravno, uz uslov da je prethodno omogucen 'change tracking' mehanizam na nivou baze i same tabele).

Hvala unaprijed ...
P.S. Nadam se da nisam pogrijesio sto sam i ovo pitanje postavio u ovaj podforum (alternativa je bio podforum za baze podataka) ?
[ AMD guy @ 19.02.2013. 20:02 ] @
Za monitoring izmena bih napravio neki Event koji bi sve subscribe-re obavestavao o promenama
[ ravni @ 21.02.2013. 08:45 ] @
Evo ovde je dosta dobro opisano:

http://msdn.microsoft.com/en-us/library/bb933874.aspx#Obtain

Edit: iz c# pozivas kao redovan SELECT, kako god inace to radis.
[ nikitaGradov @ 21.02.2013. 08:58 ] @
Citat:
ravni: Evo ovde je dosta dobro opisano:

http://msdn.microsoft.com/en-us/library/bb933874.aspx#Obtain

Edit: iz c# pozivas kao redovan SELECT, kako god inace to radis.


Ja sam uradio sledece (na osnovu ove 'mustre': http://www.mssqltips.com/sqlserverti...server-2008/, a slicno je rjesenju koje je dato i na linkovima, koje si ti predlozio):

- odustao sam od realtime monitoringa - idem na polling baze (recimo na minut - i u praksi djeluje sasvim ok). Zasto sam odustao:
- SqlNotify servisi nece biti podrzani od 2008-e pa na dalje,
- SqlDependency se vezuje za jednu SqlKomandu i ima dosta ogranicenja, narocito po pitanju generisanja samog query-ja (upita),
- SqlDependency ne dajej informaciju koji red i koja polja su promijenjena.

- u pollingu pozivam jednu stored proceduru, koja vraca 'change tracking' podatke (kako napisati stored proceduru, kao i sva ostala uputstva, su data na 'mustri'),

- iz stored procedure (zahvaljujuci 'change tracking'-u) dobijam sledece podatke:
- tip sql operacije (insert, delete, update)
- red(ovi) koji je(su) izmijenjen(i),
- koja kolona(e) je izmijenjena(e),

- te podatke ucitavam u DataTable i dalje ih koristim prema logici svoje aplikacije ...

Ima, jasno, jos posla, ali bih rekao da je to dobar pristup ...