Podsumowanie: Problem niedostępności bazy danych SQL jest częstym problemem, z którym borykają się użytkownicy bazy danych. W tym blogu poświęconym rozwiązaniu problemu zostanie omówiony program SQL Server wykryty błąd we/wy oparty na spójności logicznej. Omówimy przyczynę tego błędu i najlepsze możliwe sposoby rozwiązania tego problemu. Aby uzyskać dostęp i odzyskać niedostępną bazę danych SQL, użytkownik może skorzystać z narzędzia odzyskiwania bazy danych SQL Server.
Przyczyny błędu we/wy opartego na logicznej spójności bazy danych:
- Nagłe zamknięcie/awaria systemu lub ograniczone zamknięcie
- Administrator SQL próbuje zapytać lub zmienić dane SQL
W momencie, gdy baza danych SQL Server napotka błąd oparty na spójności logicznej, pierwszym krokiem jest wykrycie błędu.
Towarzyszące strategie mogą pomóc w wykryciu błędu:
- Użyj narzędzia Best Practice Analyzer (BPA) — narzędzie BPA pomaga w identyfikacji podstawowych błędów spójności. To narzędzie jest jawne dla wariantu SQL, co oznacza, że BPA 2008 jest dostępny z SQL 2008 itd.
- Sprawdź system Windows na poziomie struktury dziennika zdarzeń, błędy związane ze sterownikiem lub dyskiem
- Sprawdź respekt struktury plików, uruchamiając polecenie chkdsk
- Uruchom diagnostykę sugerowaną przez producentów sprzętu dla platformy lub dysku
- W przypadku SQL Server 2008 uruchom narzędzie SQLIOSim na dysku bazy danych, która ogłosiła błąd we/wy.
- Skontaktuj się ze sprzedawcą sprzętu lub producentem urządzenia, aby sprawdzić, czy wstępne wymagania sprzętowe potwierdzają wymagania we/wy serwera SQL.
Ręczne sposoby radzenia sobie z wykryciem błędu we/wy opartego na spójności logicznej w programie SQL Server
Technika 1 – Sprawdź sieć sprzętu i aplikacji
Błąd nieprawidłowości w bazie danych można naprawić, budując odpowiednią sieć między bazą danych a aplikacją SQL.
Technika 2 – Przywracanie z kopii zapasowej SQL
Najbardziej osiągalnym rozwiązaniem jest wykorzystanie kopii zapasowej do odzyskiwania bazy danych SQL. Przed przywróceniem z kopii zapasowej upewnij się, że:
- Masz ciągłą pełną kopię zapasową
- Kopia zapasowa jest aktualizowana, tylko przed uszkodzeniem i niezbyt stara, aby zachować strategiczną odległość od utraty podstawowych danych.
- Uszkodzenie występuje na poziomie strony, ponieważ problemy z uszkodzeniem na poziomie strony można rozwiązać za pomocą przywracania na poziomie strony.
Krok 1: Skorzystaj z dołączonego zamówienia, aby przywrócić bazę danych SQL z pełnej kopii zapasowej
Utwórz kopię zapasową dziennika transakcji
Kopia zapasowa LOG PageLevelRestores TO
Płyta =„g:PageLevelRestores_LOG1.bak”
Z POCZĄTKIEM
Idź
Krok 2: Wykonaj zmianę przywracania, aby odzwierciedlić postępy online.
Utwórz kopię zapasową ogona dziennika…
Kopia zapasowa LOG PageLevelRestores TO
Kółko =„g:PageLevelRestores_LOG_TAIL.bak”
Z POCZĄTKIEM
Idź
Uwaga:nie ma przekonującego powodu, aby przywrócić pełną bazę danych serwera SQL, jeśli uszkodzenie jest powiązane z pojedynczą stroną. Możesz przywrócić bazę danych z dostępnej kopii zapasowej dla tej strony, która jest podważona. Wykonywanie towarzyszących poleceń pomoże w przywróceniu kopii zapasowej dla pojedynczej strony:
Przywróć wszystkie dostępne kopie zapasowe dzienników we właściwym żądaniu
Przywróć LOG PageLevelRestores Z
Okrąg =„g:PageLevelRestores_LOG1.bak”
Z NORECOVERY
Idź
Na koniec przywróć kopię zapasową dziennika ogonowego
Przywróć LOG PageLevelRestores Z
Kółko =„g:PageLevelRestores_LOG_TAIL.bak”
Z NORECOVERY
Idź
Na koniec zakończ sekwencję przywracania
Przywracanie poziomu strony BAZY DANYCH Z ODZYSKIWANIEM
Idź
Gdy kopia zapasowa bazy danych przywróci bazę danych SQL, uruchom ponownie zapytanie DBCC CHECKDB, aby sprawdzić, czy zaznaczona proklamacja ma pierwszeństwo bez błędu we/wy opartego na logicznej spójności bazy danych SQL. To zamówienie dodatkowo sprawdza, czy w tej tabeli nie ma utraty danych.
Ograniczenia kopii zapasowej bazy danych SQL:
- To niedorzeczne oczekiwać przywrócenia z kopii zapasowej bazy danych SQL, gdy dostępna kopia zapasowa jest nieaktualna.
- Jeśli nie ma szansy, że błąd we/wy oparty na spójności logicznej rozprzestrzeni się w bazie danych serwera SQL, w tym momencie ta strategia nie będzie uzasadniona.
- W sytuacjach, w których uszkodzona strona istnieje w indeksie nieklastrowym, baza danych SQL może zostać naprawiona przez upuszczenie i ponowne utworzenie indeksu bazy danych SQL.
Technika 3:Napraw uszkodzoną bazę danych SQL za pomocą REPAIR_ALLOW_DATA_LOSS
REPAIR_ALLOW_DATA_LOSS to podstawowy stały poziom analizowanych błędów.
Uwagi:Przed użyciem REPAIR_ALLOW_DATA_LOSS wykonaj następujące czynności:
Zrób kopię zapasową bazy danych serwera SQL i zapisz ją pod inną nazwą
Ustaw bazę danych SQL w trybie pojedynczego użytkownika
Uzyskaj liczbę rekordów wszystkich tabel za pomocą towarzyszących poleceń
Ogłoś @COUNT INT
Ogłoś @SQL VARCHAR(2000)
Utwórz TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)
Ogłoś KURSORA TINFO_CUR DLA
WYBIERZ TABELĘ_NAZWA Z INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE=’BASE TABLE’
OPEN TINFO_CUR
Przejdź NASTĘPNY OD TINFO_CUR DO @T_Name
WHILE @@FETCH_STATUS =0
Rozpocznij
SET @SQL=’INSERT INTO #T_Info(T_Nazwa,D_Liczba) SELECT ”’przykł[email protected]_Nazwa+”’,COUNT(*) FROM ‘przykł[email protected]_Nazwa+”
WYKONAJ (@SQL)
Przejdź NASTĘPNY OD TINFO_CUR DO @T_Name
KONIEC
ZAMKNIJ TINFO_CUR
COFNIJ PRZYDZIELENIE TINFO_CUR
WYBIERZ * Z #T_Info ZAMÓWIENIE WEDŁUG T_NAME
Towarzyszące postępy pomagają naprawić bazę danych SQL i rozwiązać spójny błąd we/wy oparty na spójności:
Uruchom polecenie:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)
Po naprawieniu bazy danych SQL powtórz procedurę „Liczba rekordów tabeli” i porównaj ze starą liczbą rekordów.
Nie może być żadnej różnicy między początkową a ostatnią liczbą rekordów tabeli.
Ograniczenia :
REPAIR_ALLOW_DATA_LOSS może naprawić błąd IO oparty na logicznej spójności bazy danych, ale istnieje poważny problem utraty danych, w którym połączenie może napotkać utratę podstawowych danych.
Rozwiązanie elektywne
Jeśli powyższe techniki nie zadziałają, w tym momencie skorzystaj z narzędzia do naprawy plików SQL SysTools. To narzędzie naprawia uszkodzone pliki MDF i NDF oraz przywraca wszystkie obiekty bazy danych. Co więcej, narzędzie to pomaga odzyskać wszystkie obiekty bazy danych, takie jak tabele, wyzwalacze, indeksy, klucze, reguły, usunięte pliki i zapisane procedury. Jest to niesamowita pomoc w nagłych wypadkach, ponieważ produkt zapewnia bezbłędne rozwiązanie naprawcze i obsługuje wszystkie wersje baz danych SQL.
Wniosek
Przeczytaj też: Jak sprawdzić, czy baza danych SQL jest uszkodzona
W tym poście przedstawiliśmy przyczynę wykrycia przez program SQL Server błędu wejścia/wyjścia opartego na spójności logicznej oraz techniki rozwiązania tego problemu.
W związku z błędem staraliśmy się znaleźć właściwą technikę. W przypadku braku szansy, że sprzęt lub struktura jest odpowiedzialna za błąd, zaleca się określenie problemów związanych ze sprzętem, a w przypadku, gdy DBCC CHECKDB zgłosi błąd spójności, w tym momencie spróbuj przywrócić bazę danych SQL, korzystając z odświeżonej kopii zapasowej.
Jeśli problem nie zostanie rozwiązany za pomocą sprzętu i kopii zapasowej, spróbuj naprawić bazę danych za pomocą REPAIR_ALLOW_DATA_LOSS. Jest to podstawowy stopień naprawy do określenia wszystkich błędów z CHECKDB, ale nie oznacza to, że naprawdę naprawi błąd. Poza tym może to spowodować utratę danych.