Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sposoby naprawy błędu we/wy opartego na spójności logicznej w programie SQL Server

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:

  1. To niedorzeczne oczekiwać przywrócenia z kopii zapasowej bazy danych SQL, gdy dostępna kopia zapasowa jest nieaktualna.
  2. 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.
  3. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobrać nazwy kolumn i typy procedury składowanej?

  2. 3 sposoby wyodrębnienia roku z daty w SQL Server (T-SQL)

  3. Wyzwalacz SQL Server wstawia wartości z nowego wiersza do innej tabeli

  4. SQL Server:Znajdź domyślną wartość kolumny z zapytaniem

  5. Użyj TYPE_NAME(), aby uzyskać nazwę typu danych w SQL Server