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.03Kopia 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
- Przygotuj bazę z części 26. Zapisz wersję silnika, datę i liczbę rekordów 5/4/4/6.
- 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.
- 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.
- 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.
- 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
| Silnik | Kopia i kontrola | Istotne ograniczenie |
|---|---|---|
| MySQL / MariaDB | mysqldump / 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 Server | BACKUP 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 19c | RMAN 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. |
| Access | Kopia 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. |
| SQLite | Online 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.

