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:
- Je absurdní očekávat obnovení ze zálohy databáze SQL, když je dostupná záloha zastaralá.
- 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í.
- 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.