Łukasz W.

Łukasz W. SQL/ETL/BI

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Dzien dobry,
Czy ktoś może podrzucić pomysł jak sprawdzić które wiersze np przez pomyłkę zostały zmodyfikowane w tabeli??
sql server 2008

pozdrawiam
Łukasz

konto usunięte

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Co to znaczy "przez pomyłkę"? Generalnie nie da się. Chyba, że coś sobie zdefiniujesz. Jak odróżnisz pomyłkę od dobrej i celowej zmiany?
Łukasz W.

Łukasz W. SQL/ETL/BI

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

wiem ze zmian na bazie nie robi się przez pomyłkę, ja to zawsze testuje sobie na stworzonej do tego bazie
ale dajmy na to ze jakiś user nie zmienił bazy na testową i puścił update'a
bo w management studio podpowiedziała mu sie baza w której nie powinien nic robić, i puscil update'a np zmienił datę w jakimś wpisie
czy da się to jakoś sprawdzić co zmodyfikował i jaka była poprzedni wartość, czy
jezeli coś takiego się zadzieje to musze sprawdzac sobie w backupie z nocy jaka była poprzednia wartość

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

1. Nadawaj uprawnienia do obiektów (schematów, baz, tabel), bo kiedyś naprawdę może dojść do nieszczęścia.
http://msdn.microsoft.com/en-us/library/ms191291%28SQL...

2. Bazy produkcyjne aktualizuj skryptami z ustawioną na sztywno bazą ("USE").

3. Jeśli już koniecznie musicie aktualizować bazę spod "edytora" (testy), to wprowadź obowiązek zaczynania każdego skryptu od USE, zamiast wybierać bazę z listy. Za każdy skrypt bez USE - "minus" i nakaz odzyskania poprzedniej zawartości. Trzy (lub zależnie od Twojej cierpliwości) minusy - wymierne konsekwencje.

4. Wprowadź obowiązek rozpoczynania każdego update/delete od WHERE.

Grzebanie się w LOGu bazy danych nie jest trywialne i lepiej zapobiegać, niż potem próbować leczyć:
http://rusanu.com/2014/03/10/how-to-read-and-interpret...Ten post został edytowany przez Autora dnia 12.01.15 o godzinie 12:07
Łukasz W.

Łukasz W. SQL/ETL/BI

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Adrian dzięki za informację i cenne wskazówki

konto usunięte

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Inna dobra metoda to po prostu sterylność, czyli nie wykonywanie żadnych zmian ręcznie na bazie.
Zmiany w schemacie lub danych wykonują się automatycznie na etapie budowania projektu.
Dzięki temu też nie trzeba pamiętać, czy ktoś puścił skrypt na bazie czy zapomniał albo czy przypadkiem nie wykonany został kilka razy przez kilka różnych osób.

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Z kolei, ponieważ projekt MOŻE zostać "zbudowany" przypadkowo przez kilka osób, warto wprowadzić wersjonowanie bazy danych i sprawdzać na początku/uaktualniać pod koniec transakcji skryptu aktualizującego wersję. Wtedy nawet jak ktoś puści taki skrypt kilka razy, nic złego się nie stanie.

Oczywiście zakładamy, że Autorowi wątku chodzi o bazę do jakiegoś podlegającemu zmianom oprogramowania, a nie bazę samą w sobie (np. do jakichś analiz).Ten post został edytowany przez Autora dnia 12.01.15 o godzinie 13:03

konto usunięte

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Jak dla mnie to jest jakieś błądzenie w ciemności. Nie da się zdefiniować "przypadkiem". Jedyne co, można, to zapisywać jakoś wszystkie zmiany. A potem mieć mechanizm odwracania tych zmian, co w ogólnym przypadku jest niemożliwe. Poza tym zapisywanie wszelkich zmian oznacza, że trzeba zapisać wiersz przed i po zmianie. Do tego zapisać też całą transakcję i oznaczyć, że całość w transakcji poszła... w ten sposób dostajemy koszmar, w którym po pierwsze log zmian urośnie do rozmiarów znacznie większych od samej bazy, a potem się okaże, że w ogólnym przypadku nie da się tych zmian odwrócić, bo ktoś inny na ich podstawie zrobił inne zmiany.

Dlatego rozwiązanie powinno być prostsze. Częste backupy, może opóźniona replikacja, do tego różni użytkownicy z różnymi prawami dostępu, prawdziwy DBA, wersjonowanie zmian w bazie itd. Ale do tego trzeba działać przed zmianami i mieć dobry cały proces zarządzania bazą, zamiast potem gasić nieugaszalny pożar.
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Można w ważniejszych tabelach dodać pole Timestamp ostatniej modyfikacji (oczywiście poza wszystkimi dobrymi praktykami opisanymi wcześniej przez kolegów powyżej):

coś w ten deseń w def. tabeli - CREATE TABLE (tu dla DB2)
......
CHANGE_TS TIMESTAMP GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL ,
.....

(czasem po tak prostym warunku można wyciągnąć jakieś wnioski), ale jak napisali koledzy wcześniej najlepiej wersjonować bazę danych (no i oczywiście logi transakcyjne).

Pozdrawiam.Ten post został edytowany przez Autora dnia 12.01.15 o godzinie 14:04

konto usunięte

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

Adrian O.:
Z kolei, ponieważ projekt MOŻE zostać "zbudowany" przypadkowo przez kilka osób, warto wprowadzić wersjonowanie bazy danych

Na co dzień korzystam z Liquibase'a. I tu nie ma problemu, bo Liquibase sam sobie panuje nad tym, czy już zmianę wykonywał, czy nie. Nie ma znaczenia więc, czy projekt był budowany czy nie, czy raz czy sto razy.

Temat: Sprawdzenie które rekordy zostały zmodyfikowane i co się...

http://msdn.microsoft.com/en-us/library/cc645937.aspx
Czy to nie jest to czego szukasz?



Wyślij zaproszenie do