Masowa zmiana danych w bazie

Wałek malarski prowadzony po ścianie

Masowa zmiana danych to operacja, która albo przechodzi bez śladu, albo staje się najgorszym dniem miesiąca. O tym, która wersja nastąpi, decyduje przygotowanie.

Kolejność

  1. kopia bazy,
  2. zapytanie zliczające, ilu rekordów dotyczy,
  3. wykonanie na kopii i sprawdzenie wyniku,
  4. wykonanie na produkcji w oknie serwisowym,
  5. kontrola po zmianie.

Żaden z tych kroków nie jest formalnością i żadnego nie da się nadrobić później. Kopia zrobiona po zmianie utrwala już nowy stan, a kontrola pominięta w dniu operacji zamienia się w zgłoszenie od użytkownika za tydzień.

Warto też z góry ustalić, kto zatwierdza operację i kto ją wykonuje. Zmiana danych finansowych albo cennika nie jest decyzją informatyczną, nawet jeśli wykonuje ją skrypt. Osoba odpowiedzialna za te dane powinna zobaczyć wynik na kopii, zanim cokolwiek trafi na produkcję.

Najpierw policz

Zapytanie wybierające zamienione na zliczające. Jeśli liczba odbiega od oczekiwanej, warunek jest zły — i lepiej dowiedzieć się tego przed zapisem.

Uwaga na wartości puste. Warunek wykluczający konkretną wartość zwykle pomija rekordy, które nie mają jej wcale, i wtedy zmiana omija część zbioru bez żadnego komunikatu. Warto policzyć osobno, ile rekordów ma pole niewypełnione.

Transakcja

Zmiana w transakcji daje możliwość wycofania. Bez niej połowicznie wykonana operacja zostawia dane w stanie pośrednim.

Transakcja nie jest jednak darmowa. Otwarta na długo blokuje innych i rośnie w dzienniku bazy. Dlatego przy dużych zbiorach łączy się ją z partiami: każda partia to osobna transakcja, a nie jedna wielka obejmująca całość.

Trzeba jeszcze sprawdzić, czy tabela w ogóle obsługuje wycofanie. Nie każdy typ tabeli to potrafi, a operacje zmieniające strukturę zwykle zatwierdzają się same i nie da się ich cofnąć poleceniem.

Partie

Zmiana obejmująca setki tysięcy rekordów wykonywana partiami nie blokuje tabeli na długo i daje się przerwać.

Partia musi wiedzieć, gdzie skończyła poprzednia. Najprościej robi to znacznik zapisywany przy każdym rekordzie albo osobna tabela z listą do przetworzenia. Bez tego przerwany przebieg zaczyna od początku i część rekordów zmienia dwukrotnie, co przy zmianach obliczanych z bieżącej wartości daje zupełnie inny wynik.

Zapis stanu poprzedniego

Kopia zmienianych kolumn do tabeli pomocniczej pozwala odwrócić zmianę bez odtwarzania całej bazy. Warto przy operacjach na danych finansowych.

Odtworzenie kopii zapasowej cofa bowiem wszystko, także pracę wykonaną w międzyczasie przez ludzi. Tabela ze stanem poprzednim pozwala cofnąć wyłącznie tę jedną operację.

Poza godzinami pracy

Zmiana wykonywana w trakcie pracy użytkowników trafia na dane zmieniane równolegle. Wynik bywa wtedy niepowtarzalny.

Po zakończeniu operacji warto uruchomić zestawienie sprawdzające sumy i liczby rekordów, o którym mówi tekst o kontroli poprawności danych. Porównanie z wartościami sprzed zmiany jest ostatnim krokiem, który pozwala zamknąć temat, zamiast czekać na pierwsze zgłoszenie.