| Termin | Definicja |
|---|---|
| Błąd klucza podstawowego | Błąd klucza podstawowego sygnalizuje próbę wstawienia wartości naruszającej unikalność identyfikatora rekordu w tabeli. Rola klucza podstawowego w tabeliKlucz podstawowy, określany także jako primary key, jest kolumną albo zestawem kolumn służących do jednoznacznego rozpoznania każdego rekordu w tabeli. Wartość klucza podstawowego musi być unikalna w obrębie danej tabeli, dlatego dwa różne rekordy nie mogą mieć takiej samej wartości identyfikatora. Klucz podstawowy nie powinien również przyjmować wartości NULL, ponieważ brak wartości uniemożliwiałby pewne wskazanie konkretnego rekordu. Błąd klucza podstawowego pojawia się wtedy, gdy operacja zapisu próbuje naruszyć te zasady. Najczęstszy przypadek to wykonanie instrukcji INSERT z identyfikatorem, który już znajduje się w tabeli. Podobny problem może wystąpić podczas aktualizacji rekordu, jeżeli instrukcja UPDATE zmienia jego identyfikator na wartość używaną już przez inny rekord. Silnik bazy danych odrzuca taką operację, aby nie dopuścić do powstania dwóch rekordów o tym samym kluczu. Jak dochodzi do konfliktu identyfikatoraPrzyczyną błędu może być nieprawidłowo działający mechanizm nadawania identyfikatorów. Jeżeli aplikacja samodzielnie oblicza kolejny numer na podstawie wartości MAX(id) + 1, równoczesne operacje wykonywane przez kilku użytkowników lub procesy mogą wyznaczyć ten sam numer. W efekcie pierwszy zapis zakończy się poprawnie, a kolejny otrzyma błąd klucza podstawowego. Bezpieczniejsze rozwiązania wykorzystują mechanizm generowania wartości zapewniany przez konkretny silnik bazy danych, ale sposób konfiguracji zależy od użytej technologii. Konflikt może także powstać po imporcie danych, przy ponownym uruchomieniu zadania synchronizacyjnego albo po odtworzeniu części rekordu z kopii zapasowej. Jeżeli proces nie rozróżnia nowych danych od elementów już zapisanych, może próbować dodać ten sam rekord po raz drugi. Innym źródłem problemu jest błędne mapowanie pól: aplikacja może omyłkowo przekazać numer z innej tabeli, użyć identyfikatora obiektu nadrzędnego jako identyfikatora nowego rekordu albo pominąć właściwe pole generowane automatycznie. Rozróżnienie INSERT, UPDATE i ponownego zapisuPodczas analizy błędu trzeba ustalić, jaka operacja doprowadziła do naruszenia ograniczenia. Dla INSERT należy sprawdzić wartości przekazywane w polach klucza oraz to, czy rekord o takim identyfikatorze już istnieje. Dla UPDATE trzeba porównać wartość klucza przed i po zmianie oraz zweryfikować, czy modyfikacja nie próbuje zająć identyfikatora należącego do innego rekordu. Sam fakt, że rekord istnieje, nie oznacza błędu, jeżeli aplikacja prawidłowo wykonuje aktualizację tego samego rekordu zamiast ponownego INSERT. W systemach przetwarzających dane etapami istotna jest także idempotencja operacji. Oznacza ona, że ponowne wykonanie tej samej operacji nie powinno tworzyć kolejnego egzemplarza danych ani prowadzić do niekontrolowanego konfliktu. W praktyce należy rejestrować identyfikator operacji, źródło rekordu i moment zapisu, a następnie sprawdzić, czy aplikacja ponowiła żądanie po niepewnym wyniku poprzedniej transakcji. Pomocne jest również przeanalizowanie logu SQL, parametrów zapytania oraz kolejności zdarzeń między aplikacją a bazą danych. Bezpieczne postępowanie przy usuwaniu przyczynyNie należy usuwać istniejącego rekordu wyłącznie po to, aby zwolnić zajęty identyfikator. Taka czynność może zerwać powiązania z innymi tabelami, usunąć potrzebne informacje albo ukryć rzeczywistą przyczynę błędu. Najpierw trzeba ustalić, czy kolidujący zapis jest duplikatem, czy prawidłowym nowym rekordem z błędnie nadanym kluczem. Dopiero na tej podstawie można zdecydować o korekcie danych wejściowych, zmianie sposobu generowania identyfikatorów albo ponowieniu operacji z właściwą metodą aktualizacji. Jeżeli błąd występuje na komputerze użytkownika, diagnostyka powinna objąć działanie programu, połączenie z bazą, konfigurację środowiska oraz logi aplikacyjne, o ile problem dotyczy lokalnego oprogramowania. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, dlatego może sprawdzić komputer, na którym występują objawy błędnego działania aplikacji. Sama przyczyna konfliktu klucza podstawowego zwykle wymaga jednak również weryfikacji logiki programu, struktury danych i uprawnień do używanej bazy. |