| Termin | Definicja |
|---|---|
| Kompatybilność zapytań po migracji | Kompatybilność zapytań po migracji dotyczy ryzyka, że konstrukcje działające w starej wersji przestaną być obsługiwane w nowej. Kompatybilność zapytań po migracji – czym jest to zagadnienieKompatybilność zapytań po migracji oznacza zdolność systemu bazodanowego, aplikacji albo warstwy raportowej do dalszego poprawnego wykonywania zapytań po przejściu na inne środowisko. Migracja może obejmować zmianę wersji silnika, przeniesienie danych do innego systemu, zmianę dostawcy usługi, przebudowę schematu albo przejście z rozwiązania lokalnego do środowiska dostępnego przez sieć. W każdym z tych przypadków zapytanie, które wcześniej zwracało oczekiwany wynik, może zacząć działać inaczej, przestać się wykonywać albo zwracać dane w formie niezgodnej z oczekiwaniami aplikacji. Nie chodzi wyłącznie o błędy widoczne od razu po uruchomieniu programu. Część problemów pojawia się dopiero przy określonych warunkach: dla pustych wartości, większej liczby rekordów, nietypowych znaków, konkretnych ustawień sortowania albo po zastosowaniu filtrów używanych tylko przez wybranych użytkowników. Dlatego zgodność należy rozumieć szerzej niż sam fakt, że zapytanie nie kończy się komunikatem o błędzie. Istotne jest również to, czy rezultat ma ten sam sens biznesowy, podobny układ kolumn, właściwe typy danych, akceptowalny czas wykonania oraz przewidywalne zachowanie w sytuacjach granicznych. Po migracji ocenia się zazwyczaj kilka warstw naraz. Pierwszą stanowi składnia zapytania, czyli sposób zapisu poleceń, operatorów, funkcji, aliasów i wyrażeń. Drugą jest semantyka, a więc znaczenie poszczególnych instrukcji w konkretnym silniku. Trzecia obejmuje typy danych, reguły konwersji, wartości puste oraz porównywanie tekstu. Kolejna dotyczy planu wykonania i wydajności. Nawet gdy rezultat jest poprawny, znacznie wolniejsze zapytanie może przeciążyć aplikację lub powodować opóźnienia w codziennej pracy. Kompatybilność zapytań po migracji a różnice między środowiskamiRóżne systemy przechowywania danych mogą oferować podobnie nazwane polecenia, lecz interpretować je odmiennie. Różnice bywają widoczne w funkcjach daty i czasu, łączeniu tekstów, obsłudze wartości pustych, numerowaniu wierszy, ograniczaniu liczby wyników, wyrażeniach regularnych i zapytaniach zagnieżdżonych. Ta sama nazwa funkcji może przyjmować inny zestaw argumentów albo zwracać odmienny typ danych. Zdarza się też, że starsza wersja dopuszczała skrótowy zapis, który w nowszej wersji jest uznawany za niejednoznaczny. Znaczenie ma również konfiguracja środowiska. Ustawienia porównywania tekstu mogą decydować o tym, czy wielkość liter jest rozróżniana. Reguły sortowania wpływają na kolejność polskich znaków i innych znaków specjalnych. Strefa czasowa oraz sposób zapisywania dat mogą powodować przesunięcia w raportach obejmujących granicę dnia. Inne rezultaty mogą pojawić się także wtedy, gdy w nowym środowisku zmieniono domyślne zasady zaokrąglania, kodowanie znaków lub sposób traktowania pustych pól. Warto rozróżnić migrację danych od migracji logiki aplikacji. Przeniesienie tabel i rekordów nie gwarantuje zgodności zapytań, ponieważ program może korzystać z widoków, procedur, funkcji pomocniczych, indeksów lub uprawnień dostępnych tylko w poprzednim środowisku. Z kolei przepisanie samych zapytań bez sprawdzenia danych może ukryć problem z mapowaniem kolumn, zmianą nazw, inną długością pól albo utratą informacji podczas konwersji. Bezpieczna ocena obejmuje więc zarówno kod, jak i strukturę danych, ustawienia oraz sposób używania wyników przez aplikację. Przydatne jest przygotowanie tabeli zależności. Dla każdego zapytania można wskazać źródłowe tabele, wykorzystywane kolumny, funkcje specyficzne dla danego silnika, oczekiwany rezultat oraz miejsce użycia w aplikacji. Taka dokumentacja ułatwia odróżnienie problemu składniowego od problemu z interpretacją wyniku. Pomaga również ustalić kolejność testów, ponieważ zapytania wykorzystywane przez logowanie, wyszukiwanie lub rozliczenia powinny być sprawdzane przed mniej istotnymi zestawieniami. Kompatybilność zapytań po migracji i typowe problemyJednym z częstych problemów są zapytania wykorzystujące elementy oznaczone jako przestarzałe. W starszym środowisku mogą one nadal działać, lecz po aktualizacji zostać usunięte albo zmienić sposób działania. Inną grupę stanowią nazwy kolumn lub tabel kolidujące z nowymi słowami zastrzeżonymi. Zdarza się, że wcześniej akceptowany zapis wymaga po migracji zastosowania właściwego oznaczenia identyfikatora. Niewielka różnica w składni może wtedy zatrzymać cały moduł aplikacji. Problemy pojawiają się także przy łączeniu tabel. Jeśli nowe ustawienia inaczej traktują wartości puste, połączenie może pominąć rekordy, które wcześniej były uwzględniane. Odmienny sposób porównywania tekstu może spowodować powielenie wyników albo brak dopasowania. Zmiana typów liczbowych może natomiast ujawnić błędy w danych, na przykład gdy część wartości była wcześniej niejawnie zamieniana na liczby, a po migracji taka konwersja już nie zachodzi. W raportach szczególnie istotne są zapytania agregujące. Różnice w grupowaniu, filtrowaniu wyników po agregacji lub kolejności wykonywania operacji mogą prowadzić do zestawień, które wyglądają wiarygodnie, lecz przedstawiają nieprawidłowe sumy. Podobne ryzyko dotyczy funkcji okienkowych, podzapytań skorelowanych i zapytań korzystających z kolejności rekordów bez wyraźnego sortowania. Jeżeli aplikacja zakłada konkretną kolejność, powinna ona wynikać z jawnej reguły, a nie z przypadkowego zachowania silnika. Oddzielnego sprawdzenia wymagają zapytania wykonywane często. Po migracji indeksy mogą nie zostać odtworzone, mieć inną strukturę albo nie odpowiadać nowemu sposobowi filtrowania. Plan wykonania może zostać zmieniony przez statystyki, rozmiar tabel lub inne ustawienia optymalizatora. W efekcie zapytanie zwraca poprawne dane, lecz wykonuje się na tyle długo, że aplikacja zgłasza przekroczenie czasu oczekiwania. Taki przypadek również należy traktować jako problem kompatybilności, ponieważ użytkownik nie otrzymuje funkcji w praktycznie użytecznej postaci. Kompatybilność zapytań po migracji – praktyczne wskazówki testowePrzygotowania najlepiej rozpocząć od zebrania rzeczywiście używanych zapytań. Sama dokumentacja techniczna może nie obejmować poleceń generowanych dynamicznie przez aplikację, raporty tworzone sporadycznie ani czynności administracyjnych. Warto uwzględnić zapytania uruchamiane przez wyszukiwarki, formularze, eksporty, zestawienia oraz procesy działające w tle. Następnie należy posegregować je według znaczenia i ryzyka, zwracając uwagę na elementy zależne od konkretnego silnika. Dobrym punktem odniesienia jest zestaw wyników uzyskanych przed migracją. Powinien on obejmować nie tylko typowe przypadki, lecz także brak wyników, jeden rekord, wiele rekordów, wartości puste, polskie znaki, długie teksty, daty graniczne oraz dane zawierające powtórzenia. Po uruchomieniu tych samych scenariuszy w nowym środowisku porównuje się liczbę rekordów, wartości poszczególnych pól, typy danych, kolejność wyników i komunikaty aplikacji. Różnica nie zawsze oznacza błąd, ale każda powinna mieć wyjaśnienie. Testy warto prowadzić na kopii danych możliwie zbliżonej do rzeczywistego zbioru. Mały zestaw testowy może nie ujawnić problemów z wydajnością, selektywnością filtrów albo powieleniem wyników po połączeniach. Jednocześnie dane używane do testów powinny być kontrolowane pod kątem prywatności i bezpieczeństwa. Jeżeli nie da się użyć pełnej kopii, można przygotować reprezentatywny wycinek obejmujący różne typy rekordów oraz przypadki znane z codziennej pracy. Nie należy ograniczać się do pojedynczego uruchomienia. Powtarzalność ma znaczenie, zwłaszcza gdy zapytanie korzysta z aktualnego czasu, losowych wartości, danych zmienianych przez inne procesy albo zależności między tabelami. Pomocne jest rejestrowanie czasu wykonania, liczby zwróconych rekordów i ewentualnych ostrzeżeń. Przydatne bywa również sprawdzenie uprawnień na koncie o zakresie zbliżonym do konta użytkownika końcowego, ponieważ zapytanie może działać podczas testu administracyjnego, a nie działać w normalnym trybie. W przypadku modyfikacji zapytania należy zachować jego wcześniejszą wersję oraz opisać przyczynę zmiany. Ułatwia to późniejsze porównanie i pozwala wycofać pojedynczą poprawkę bez ponownego odtwarzania całego procesu. Przy bardziej złożonych migracjach przydatny jest okres równoległego porównywania wyników, w którym ta sama operacja jest sprawdzana w starym i nowym środowisku. Po zakończeniu testów powinien powstać rejestr zapytań zaakceptowanych, wymagających poprawy oraz wyłączonych z użytkowania. Kompatybilność zapytań po migracji – kiedy zgłosić problem do serwisuWsparcie techniczne może być potrzebne, gdy po zmianie środowiska aplikacja przestaje wyszukiwać dane, raporty pokazują inne wartości, pojawiają się błędy zapisu albo praca z bazą wyraźnie zwalnia. Zgłoszenie powinno zawierać nazwę używanej aplikacji, opis wykonanej migracji, moment wystąpienia problemu oraz przykład działania, które wcześniej kończyło się poprawnie. Pomocne są również fragment komunikatu, zrzut ekranu, informacja o zakresie danych i wskazanie, czy problem dotyczy wszystkich użytkowników, czy tylko wybranych operacji. Nie zaleca się samodzielnego usuwania tabel, zmieniania typów kolumn ani wyłączania kontroli integralności tylko po to, aby zapytanie zaczęło działać. Takie działania mogą ukryć przyczynę i utrudnić późniejsze odtworzenie danych. Bezpieczniej jest najpierw wykonać kopię, opisać objawy i zachować informacje o stanie środowiska. Jeżeli problem dotyczy urządzenia, lokalnej aplikacji albo połączenia z bazą, przypadek można skonsultować z serwisem Warszawskie Pogotowie Komputerowe 24/7. Kompatybilność zapytań po migracji należy traktować jako proces weryfikacji, a nie jednorazowe potwierdzenie. Po uruchomieniu nowego środowiska mogą ujawnić się scenariusze rzadko używane, zmienić się dane wejściowe albo pojawić się nowe wersje aplikacji. Regularne sprawdzanie kluczowych zapytań, kontrola wyników i dokumentowanie wyjątków ograniczają ryzyko, że pozornie drobna różnica doprowadzi do błędnego raportu lub przerwy w pracy. Najważniejszym rezultatem jest zachowanie tego samego znaczenia danych przy jednoczesnym dostosowaniu składni, ustawień i wydajności do nowego środowiska. |