MSSQL: =?iso-8859-2?Q?por=F3wnanie_dw=F3ch?= wierszy?
Jacek Osiecki - 12-07-2007 00:09
MSSQL: =?iso-8859-2?Q?por=F3wnanie_dw=F3ch?= wierszy?
Witam,
Potrzebuję stworzyć coś, co loguje zmiany dokonane w wybranych tabelach. Np. mam tabelę klienci, i gdy zmienię pole "Nazwisko" z "Nowak" na "Kowal", więc w logu zapisuję "Klienci(ID:xxx): Nazwisko: Nowak=>Kowal".
Od której strony właściwie podejść do tego tematu, żeby nie trzeba było robić taaakich funkcji które w dodatku będę musiał rozbudowywać po dodaniu jakiegoś pola w nadzorowanej tabeli?
Pozdrawiam, -- Jacek Osiecki joshua@ceti.pl GG:3828944 "To nie logika, to polityka" (c) Kabaret pod Wydrwigroszem 2006
Marcin A. Guzowski - 13-07-2007 00:01
Jacek Osiecki wrote: > Witam, > > Potrzebuję stworzyć coś, co loguje zmiany dokonane w wybranych tabelach. > Np. mam tabelę klienci, i gdy zmienię pole "Nazwisko" z "Nowak" na "Kowal", > więc w logu zapisuję "Klienci(ID:xxx): Nazwisko: Nowak=>Kowal".
Poczekaj do final release'a SQL Server 2008, ew. zainstaluj sobie wersję CTP :) Tam będziesz miał natywny mechanizm do takich zadań - Change Data Capture:
http://www.microsoft.com/poland/tech...68_01.mspx#ESE
> Od której strony właściwie podejść do tego tematu, żeby nie trzeba było > robić taaakich funkcji które w dodatku będę musiał rozbudowywać po dodaniu > jakiegoś pola w nadzorowanej tabeli?
Póki co, temat sprowadza się do stworzenia tabeli zmian i napisania odpowiedniego triggera na tabeli bazowej. Na Twoim miejscu nie zakładałbym, że uda Ci się zrobić super-uniwersalny trigger automatycznie obsługujący sytuację pojawienia się nowej kolumny itd. Nawet w CDC dodanie nowej kolumny będzie wymagało odpowiednich działań rekonfiguracyjnych. Oczywiście pewnie dałoby się wszystko zautomatyzować, ale ze względu na wydajność, bezpieczeństwo i przejrzystość rozwiązania - gra nie jest warta przysłowiowej świeczki.
Zbuduj sobie raczej coś na wzór Change Data Capture. W tabeli zmian powinny pojawić się kolumny w stylu: id_zmiany (PK), typ_operacji (np. zmiana, usunięcie), FK_id_klient (referencja do klucza głównego/kandydującego tabeli bazowej) + kolumny odpowiadające strukturze tabeli bazowej, które mają być objęte historią zmian. Trigger powinien reagować na określone operacje DML i wrzucać do tabeli zmian odpowiednie dane (np. wartości kolumn sprzed zmiany czy usunięcia rekordu). Możesz też sobie stworzyć jakiś interfejs (widok/procedury) do prezentowania informacji z tabeli zmian w bardziej intuicyjny sposób lub np. do raportowania o częstości zmian poszczególnych klientów.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
wloochacz - 18-07-2007 00:06
>> Potrzebuję stworzyć coś, co loguje zmiany dokonane w wybranych tabelach. >> Np. mam tabelę klienci, i gdy zmienię pole "Nazwisko" z "Nowak" na >> "Kowal", >> więc w logu zapisuję "Klienci(ID:xxx): Nazwisko: Nowak=>Kowal". > > Poczekaj do final release'a SQL Server 2008, ew. zainstaluj sobie wersję > CTP :) Tam będziesz miał natywny mechanizm do takich zadań - Change Data > Capture: > > http://www.microsoft.com/poland/tech...68_01.mspx#ESE Łeeee... sam se napisałem i nawet działa :) Dla dowolnej tabeli, dowolna liczba atrybutów dowolnie dodawana on-the-fly :D Tak wygląda GUI do zarzadzanie procesem logowania zmian: http://www.dgbit.pl/files/DexterDBLogger.jpg
-- wloochacz
Marcin A. Guzowski - 18-07-2007 00:06
wloochacz wrote: >> Poczekaj do final release'a SQL Server 2008, ew. zainstaluj sobie >> wersję CTP :) Tam będziesz miał natywny mechanizm do takich zadań - >> Change Data Capture: >> >> http://www.microsoft.com/poland/tech...68_01.mspx#ESE > Łeeee... sam se napisałem i nawet działa :) > Dla dowolnej tabeli, dowolna liczba atrybutów dowolnie dodawana > on-the-fly :D > Tak wygląda GUI do zarzadzanie procesem logowania zmian: > http://www.dgbit.pl/files/DexterDBLogger.jpg
Ciekawe, nawet ładnie wygląda ;) Ale z punktu widzenia innego niż GUI, czyli obsługi w BD - wydajnościowo na pewno nie przebijesz natywnego mechanizmu (CDC), który jest podpięty bezpośrednio pod log transakcyjny, podczas gdy Ty musisz wykorzystywać triggery ze wszystkimi tego konsekwencjami. Obecnie nie ma oczywiście innego wyjścia.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
wloochacz - 19-07-2007 00:06
[ciach] > Ciekawe, nawet ładnie wygląda ;) Cieszę się, że się podoba :) U mnie wszystko ładnie wygląda, jak powiedział Bill "jeśli nie możesz zrobić czegoś dobrze, zrób chociaż ładnie" :D
> Ale z punktu widzenia innego niż GUI, > czyli obsługi w BD - wydajnościowo na pewno nie przebijesz natywnego > mechanizmu (CDC), który jest podpięty bezpośrednio pod log transakcyjny, > podczas gdy Ty musisz wykorzystywać triggery ze wszystkimi tego > konsekwencjami. Obecnie nie ma oczywiście innego wyjścia. No oczywiście, że tak. Mnie to było po prostu potrzebne do audytu zmian w pewnych newralgicznych częściach bazy danych (konkretne pola w konkretnych tabelach). I zależało mi na narzędziu, które mogę szybko i łatwo wyklikać a także wygodnie przeglądać log. Muszę przyznać, że założenia zostały spełnione w 100%
Przeglądarka: http://www.dgbit.pl/files/DCCViewer.jpg
Oczywiście nie zdawałem sobie sprawy z CDC i dzięki za info :) -- wloochacz
Marcin A. Guzowski - 19-07-2007 00:06
wloochacz wrote: > Przeglądarka: > http://www.dgbit.pl/files/DCCViewer.jpg > > Oczywiście nie zdawałem sobie sprawy z CDC i dzięki za info :)
IMHO Twoją aplikację można spokojnie przystosować do współpracy z CDC. GUI się przecież nie zmieni, nauczysz ją tylko współpracować z procedurami konfiguracyjnymi CDC.
-- Pozdrawiam, Marcin Guzowski http://guzowski.info
=?ISO-8859-2?Q?Artur_Muszy=F1ski?= - 20-07-2007 00:03
wloochacz pisze: > [ciach] >> Ciekawe, nawet ładnie wygląda ;) > Cieszę się, że się podoba :) > U mnie wszystko ładnie wygląda, jak powiedział Bill "jeśli nie możesz > zrobić czegoś dobrze, zrób chociaż ładnie" :D
Tak na oko to jest to nie tylko ładne, ale i funkcjonalne. Podziwiam programistów, którzy są w stanie tyle wysiłku włożyć w pomocnicze w końcu narzędzie. Chyba, że to sprzedajecie?
artur
wloochacz - 24-07-2007 00:12
[ciach] > Tak na oko to jest to nie tylko ładne, ale i funkcjonalne. Podziwiam > programistów, którzy są w stanie tyle wysiłku włożyć w pomocnicze w > końcu narzędzie. Chyba, że to sprzedajecie? Nieee... nie sprzedajmy, na razie :D Oprócz programowania zajmuję się także administratorką systemem ERP i czasem takie właśnie narzędzi jest warte naprawdę sporo :-) Może gdyby znaleźli się chętni do testowania, to kto wie... Poza tym to działa tylko z MSSQL, ale nie problem zrobić obsługę innych baz (Oracle na ten przykład).
-- wloochacz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
MSSQL Express czy Oracle Express
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
MSSQL , funkcja pobierajaca sama date (bez czasu) w funkcji
[mssql] insert do tabeli na podstawie danych z innej tabeli
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|