SQL od podstaw · część 27

Kopie zapasowe, odtwarzanie i kontrola spójności

Zapisz dane, odtwórz je w nowej bazie i sprawdź wynik. Poznaj różnicę między backupem, eksportem, kontrolą integralności i naprawą.

Część bazodanowa INF.03

Kopia jest użyteczna, gdy można ją odtworzyć

Awaria dysku, błąd programu i przypadkowy DELETE wymagają różnych działań, ale wszystkie pokazują znaczenie kopii zapasowej. Plik o nazwie backup.sql nie jest jeszcze dowodem, że zawiera komplet danych i daje się poprawnie odtworzyć. Potrzebne są procedura, kontrola oraz próbne odtworzenie w oddzielnym środowisku.

Kopia logiczna

Definicje i dane, np. skrypt SQL. Jest czytelna, ale zgodność między wersjami i silnikami nie jest automatyczna.

Kopia fizyczna

Pliki lub strony bazy przygotowane narzędziem zgodnym z silnikiem. Zwykłe kopiowanie plików działającego serwera może dać niespójny zestaw.

Plan odtwarzania

Określa kolejność użycia pełnej kopii i ewentualnych kopii przyrostowych, różnicowych lub dzienników, zależnie od SZBD.

RPO opisuje akceptowaną utratę danych w czasie, a RTO czas potrzebny na przywrócenie działania. To rozszerzenie praktyczne: sama częstotliwość backupu nie gwarantuje osiągnięcia tych celów.

Próbne odtworzenie danych kursu

  1. Przygotuj bazę z części 26. Zapisz wersję silnika, datę i liczbę rekordów 5/4/4/6.
  2. W phpMyAdmin wyeksportuj strukturę i dane czterech tabel do SQL. Sprawdź, czy zakres obejmuje także potrzebne widoki lub inne obiekty, jeśli zostały dodane w ćwiczeniach.
  3. Zachowaj kopię pliku w chronionym miejscu. Dla rzeczywistych danych stosuj kontrolę dostępu, szyfrowanie i retencję. Kopia na tym samym uszkodzonym dysku nie uratuje danych.
  4. Utwórz nową bazę, np. cn_sql_odtworzenie_2026. Sprawdź w kopii eksportu CREATE DATABASE, USE i DROP, aby import nie skierował operacji do oryginału. Dostosuj wyłącznie roboczą kopię skryptu do nowego celu.
  5. Zaimportuj, zatrzymując się na błędach. Sprawdź tabele, typy, klucze, liczby i konkretne wartości. Dopiero wtedy zanotuj wynik próby.
SELECT COUNT(*) AS klienci FROM klienci;
SELECT SUM(cena) AS suma_cen FROM produkty;
SELECT p.zamowienie_id, SUM(p.ilosc * pr.cena) AS wartosc
FROM pozycje p
JOIN produkty pr ON pr.id = p.produkt_id
GROUP BY p.zamowienie_id
ORDER BY p.zamowienie_id;

Na bazie początkowej oczekujemy 5 klientów, sumy cen 1005 i wartości zamówień: 240, 800, 75, 110. Te kontrole sprawdzają wybrane dane, nie zastępują pełnej weryfikacji bazy. Jeżeli wcześniej wykonano UPDATE, punktem odniesienia ma być stan zapisany przed eksportem, a nie wynik z niezmienionej bazy.

Spójność logiczna i techniczna

Klucz obcy chroni relację między tabelami, CHECK — warunek wartości, UNIQUE — unikalność. Można też szukać nieprawidłowości zapytaniem diagnostycznym. Poniższe powinno zwrócić zero wierszy:

SELECT z.id, z.klient_id
FROM zamowienia z
LEFT JOIN klienci k ON k.id = z.klient_id
WHERE k.id IS NULL;

To wykrywa zamówienia bez klienta. Nie mówi jednak, czy pliki bazy są technicznie nieuszkodzone. Z kolei poprawna struktura pliku nie potwierdza, że wszystkie dane biznesowe są sensowne. Integralność techniczna, relacyjna i zgodność z wymaganiami to różne warstwy kontroli.

Ten sam cel, inne narzędzia

SilnikKopia i kontrolaIstotne ograniczenie
MySQL / MariaDBmysqldump / mariadb-dump, phpMyAdmin; narzędzia kopii fizycznych dobrane do silnika i wersji.–single-transaction pomaga uzyskać spójny odczyt tabel transakcyjnych, np. InnoDB. Nie daje tego samego dla MyISAM; równoległe zmiany DDL mogą zakłócić eksport. Zakres obiektów i wymagane prawa trzeba ustalić osobno.
SQL ServerBACKUP DATABASE, RESTORE DATABASE; diagnostyka DBCC CHECKDB, weryfikacja pliku RESTORE VERIFYONLY.VERIFYONLY nie zastępuje odtworzenia i nie sprawdza całej struktury danych jak kontrola odtworzonej bazy. Kopie logu wymagają właściwego modelu odzyskiwania i łańcucha kopii.
Oracle 19cRMAN do kopii i odzyskiwania; Data Pump do logicznego eksportu/importu wybranych obiektów.Eksport schematu Data Pump nie jest zamiennikiem pełnej strategii odtwarzania całej instancji.
AccessKopia pliku przy bezpiecznie zakończonej pracy użytkowników; Kompaktuj i napraw dla odpowiednich problemów pliku.Przed naprawą wykonaj kopię. Zadbaj o wyłączny dostęp; przy bazie podzielonej zabezpiecz osobno dane i interfejs.
SQLiteOnline Backup API lub poprawnie wykonana kopia nieużywanej bazy; natywne kontrole integralności.Aktywny WAL/dziennik ma znaczenie. Nie kopiuj dowolnie samego głównego pliku podczas zapisów. Edytor kursu nie udostępnia poleceń administracyjnych PRAGMA.

To mapa narzędzi, nie zestaw poleceń do uruchomienia na działającej bazie strony. Odtwarzanie wymaga poprawnego celu, ścieżek i uprawnień. W SSMS do próbnego odtworzenia wybierz nową nazwę bazy i nowe pliki, nie opcję nadpisania oryginału.

Naprawa nie jest uniwersalnym przyciskiem

Najpierw zachowaj komunikaty, logi i bezpieczną kopię dostępnych danych. Rozróżnij brak miejsca, problem uprawnień, zerwane połączenie, naruszenie więzów i rzeczywiste uszkodzenie. Błąd SQL nie oznacza automatycznie uszkodzenia pliku.

REPAIR TABLE w MySQL nie jest metodą naprawy InnoDB. Nie stosuj go do każdej tabeli. Tryby awaryjnego odzyskiwania i naprawy dopuszczającej utratę danych są zadaniem administratora z udokumentowaną procedurą. Preferuj sprawdzone odtworzenie, a narzędzia naprawcze dobieraj do rozpoznanej przyczyny i silnika.

Ćwiczenia z rozwiązaniami

1. Co umieścić w protokole odtworzenia?

Datę kopii i próby, wersje narzędzi, zakres obiektów, bezpieczną lokalizację pliku, nową nazwę celu, komunikaty, liczby rekordów, wyniki kontroli i czas odtworzenia. Bez haseł i niepotrzebnych danych osobowych.

2. Czy synchronizacja folderu jest pełną kopią zapasową?

Nie musi nią być. Może rozpropagować usunięcie lub uszkodzenie, a kopiowanie aktywnej bazy może być niespójne. Potrzebne są wersje, retencja, separacja i sprawdzona procedura odzyskiwania.

3. Odtwórz i porównaj

Wykonaj opisany obieg do nowej bazy. Sprawdź liczby 5/4/4/6, sumę cen 1005, wartości zamówień i brak osieroconych rekordów. Obejrzyj klucze obce. Zachowaj autentyczny zrzut wyników z własnego klienta i opisz ograniczenia kontroli.

Źródła i dalszy krok

MariaDB: mariadb-dump · MySQL: REPAIR TABLE · SQL Server: VERIFYONLY · Access: kompaktowanie i naprawa · SQLite: Online Backup API

INF.03 obejmuje nie tylko zapytania, lecz także konserwację, kopie i odtwarzanie baz. W kolejnej części połączymy bazę z aplikacją PHP.

Przewijanie do góry