sql >> Databáze >  >> RDS >> Sqlserver

Způsoby, jak opravit chybu I/O na základě logické konzistence serveru SQL Server

Shrnutí: Problém nedostupnosti databáze SQL je častým problémem, kterému uživatelé databáze čelí. Takže tento blog zabývající se řešením problému bude diskutovat o chybě I/O na základě logické konzistence serveru SQL Server. Budeme diskutovat o důvodu této chyby a o nejlepších možných způsobech, jak tento problém vyřešit. Pro přístup a obnovu nepřístupné SQL databáze může uživatel využít pomoc nástroje Recover SQL Server Database Tool.

Důvody chyby I/O založené na logické konzistenci databáze:

  • Náhlé vypnutí/selhání systému nebo vynucené vypnutí
  • Administrátor SQL se pokouší dotazovat nebo měnit data SQL

V okamžiku, kdy databáze SQL Server narazí na chybu založenou na logické konzistenci, je prvním krokem zjištění chyby.

Doprovodné strategie mohou pomoci při odhalování chyby:

  • Používejte nástroj Best Practice Analyzer (BPA) – nástroj BPA pomáhá při identifikaci základních chyb konzistence. Tento nástroj je explicitní pro variantu SQL, což znamená, že BPA 2008 je přístupný s SQL 2008 atd.
  • Zkontrolujte systém Windows na úrovni rámce protokolu událostí, chyby související s ovladačem nebo diskem
  • Zkontrolujte respektování rámce souborů spuštěním příkazu chkdsk
  • Spusťte diagnostiku navrženou výrobci hardwaru pro rámec nebo disk
  • Pro SQL Server 2008 spusťte obslužný program SQLIOSim na jednotce databáze, která oznámila chybu I/O.
  • Kontaktujte prodejce hardwaru nebo výrobce zařízení a zjistěte, zda hardwarové předpoklady odpovídají I/O nezbytnostem serveru SQL.

Ruční způsoby řešení chyby I/O na základě logické konzistence zjištěné serveru SQL

Technika 1 – Zkontrolujte hardware a síť aplikací

Chybu nepravidelnosti databáze lze opravit vytvořením vhodné sítě mezi databází a aplikací SQL.

Technika 2 – Obnovení ze zálohy SQL

Nejdostupnějším řešením je využití zálohy pro rekultivaci SQL databáze. Před obnovením ze zálohy se ujistěte, že:

  • Probíhá úplná záloha
  • Záloha se aktualizuje pouze před poškozením a není příliš stará, aby byla zachována strategická vzdálenost od ztráty základních dat.
  • Korupce je na úrovni stránky, protože problémy s korupcí na úrovni stránky lze vyřešit pomocí obnovení na úrovni stránky.

Krok 1: Použijte přiložený příkaz k obnovení databáze SQL z úplné zálohy

Zálohujte protokol transakcí

Záloha LOG PageLevelRestores TO

Plate =‘g:PageLevelRestores_LOG1.bak’

S INIT

PŘEJÍT

Krok 2: Proveďte změnu obnovy, abyste zrcadlili průběhy online.

Zálohujte konec protokolu…

Záloha LOG PageLevelRestores TO

Circle =‘g:PageLevelRestores_LOG_TAIL.bak’

S INIT

PŘEJÍT

Poznámka:Není-li poškození vázáno na jedinou stránku, neexistuje žádný pádný důvod pro obnovení celé databáze serveru SQL. Databázi můžete obnovit z přístupné zálohy pro stránku, která je narušena. Provádění doprovodných objednávek pomůže při obnovení zálohy pro osamocenou stránku:

Obnovte všechny dostupné zálohy protokolů ve správném požadavku

Obnovit LOG PageLevelRestores FROM

Circle =‘g:PageLevelRestores_LOG1.bak’

S NEOBNOVENÍM

PŘEJÍT

Nakonec Obnovte zálohu protokolu ocasu

Obnovit LOG PageLevelRestores FROM

Circle =‘g:PageLevelRestores_LOG_TAIL.bak’

S NEOBNOVENÍM

PŘEJÍT

Nakonec dokončete sekvenci obnovení

Obnovení úrovně stránky DATABASE S OBNOVENÍM

PŘEJÍT

Když záloha databáze obnoví databázi SQL, spusťte znovu dotaz DBCC CHECKDB a sledujte, že prohlášení o výběru převládá bez chyby vstupu/výstupu založené na logické konzistenci databáze SQL. Tato objednávka navíc hlídá, aby nedošlo ke ztrátě dat v této tabulce.

Omezení zálohování databáze SQL:

  1. Je absurdní očekávat obnovení ze zálohy databáze SQL, když je dostupná záloha zastaralá.
  2. V případě, že by se chyba vstupu/výstupu založená na logické konzistenci rozšířila do databáze serveru SQL, v tomto okamžiku nebude tato strategie legitimní.
  3. V situacích, kdy vadná stránka existuje v indexu bez klastrů, lze databázi SQL opravit odstraněním a opětovným vytvořením indexu databáze SQL.

Technika 3:Opravte poškozenou databázi SQL pomocí REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS je základní pevná úroveň pro analyzované chyby.

Poznámky:Před použitím REPAIR_ALLOW_DATA_LOSS proveďte následující:

Vytvořte zálohu databáze SQL serveru a uložte ji pod jiným názvem

Nastavte databázi SQL v režimu jednoho uživatele

Získejte počet záznamů všech tabulek pomocí doprovodných příkazů

Prohlaste @COUNT INT

Proclaim @SQL VARCHAR(2000)

Udělejte TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)

Vyhlásit KURZOR TINFO_CUR PRO

VYBERTE TABLE_NAME Z INFORMAČNÍCH TABULEK

WHERE TABLE_TYPE=‘BASE TABLE‘

OTEVŘÍT TINFO_CUR

Získejte DALŠÍ Z TINFO_CUR DO @T_Name

KDYŽ @@FETCH_STATUS =0

Spustit

SET @SQL=’INSERT INTO #T_Info(T_Name,D_Count) SELECT ”’[email protected]_Name+”’,COUNT(*) FROM ‘[email protected]_Name+”

PROVEĎTE (@SQL)

Získejte DALŠÍ Z TINFO_CUR DO @T_Name

KONEC

ZAVŘÍT TINFO_CUR

DEALOKACE TINFO_CUR

VYBRAT * Z #T_Info OBJEDNAT OD T_NAME

Doprovodné vylepšení pomáhají opravit databázi SQL a vyřešit koherentní chybu I/O založenou na konzistenci:

Spusťte příkaz:

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

Jakmile bude databáze SQL opravena, zopakujte postup ‚Počet záznamů v tabulce‘ a porovnejte se starým počtem záznamů.

Mezi počátečním a posledním počtem záznamů tabulky nesmí být žádný rozdíl.

Omezení :

REPAIR_ALLOW_DATA_LOSS může opravit chybu IO založenou na logické konzistenci databáze, ale existuje významný problém se ztrátou dat, kdy může připojení dojít ke ztrátě základních dat.

Volitelné řešení

Pokud výše uvedené techniky nefungují, v tom okamžiku se podívejte na nástroj SysTools SQL File Repair. Tento nástroj opravuje poškozené soubory MDF a NDF a obnovuje všechny databázové objekty. Navíc tento nástroj pomáhá obnovit všechny databázové objekty, jako jsou tabulky, spouštěče, indexy, klíče, pravidla, smazané soubory a uložené procedury. Je to neuvěřitelná pomoc uprostřed nouze, protože produkt poskytuje nezaměnitelné řešení opravy a podporuje všechny verze databáze SQL.

Závěr

Přečtěte si také: Jak zkontrolovat, zda je databáze SQL poškozená 

V tomto příspěvku jsme uvedli důvod, proč SQL Server zjistil chybu I/O na základě logické konzistence, a techniky k vyřešení tohoto problému.

Vzhledem k chybě jsme se pokusili najít správnou techniku. V případě, že za chybu může hardware nebo framework, je předepsáno určit problémy související s hardwarem a v případě, že DBCC CHECKDB ohlásí chybu konzistence, pokuste se v tomto okamžiku obnovit databázi SQL pomocí obnovené zálohy.

Pokud problém není vyřešen pomocí hardwaru a zálohy, pokuste se v tomto okamžiku opravit databázi pomocí REPAIR_ALLOW_DATA_LOSS. Toto je základní stupeň opravy pro určení všech chyb z CHECKDB, ale to neznamená, že to skutečně chybu opraví. Kromě toho to může způsobit ztrátu dat.


  1. TNS-12505:TNS:listener aktuálně nezná SID uvedené v deskriptoru připojení

  2. Špatný pohotovostní režim

  3. Napište číslo se dvěma desetinnými místy SQL Server

  4. Události čekání serveru SQL -1