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

Bezplatné metody pro opravu korupce indexu SQL Server

Tento článek sdílí význam indexů v databázi SQL. Poskytuje také stručný přehled seskupených a neshlukovaných indexů. Dále článek pojednává o důvodech poškození indexu serveru SQL Server, faktorech k identifikaci jakéhokoli poškozeného indexu a metodách, jak jej opravit.

Indexy v SQL Server pomáhají urychlit proces načítání řádků z tabulky nebo zobrazení. Správná volba indexů je však zásadní pro zlepšení výkonu dotazů. SQL Server podporuje seskupené a neklastrované indexy. Poškození kteréhokoli z těchto indexů může způsobit zpoždění při načítání řádků. Při načítání některých řádků můžete také získat různé nebo odstraněné hodnoty. Navíc nejdéle běžící dotazy mohou být chybné kvůli poškozeným indexům v tabulkách.

Ať už je situace jakákoli, musíte včas opravit poškození indexů, abyste zabránili ovlivnění pracovního postupu databáze SQL Server.

Než probereme metody řešení problémů s poškozením indexu, pojďme si krátce představit seskupené a neshlukované indexy.

Přehled seskupených a nesdružených indexů

Použití omezení primárního klíče na sloupec v tabulce vytvoří ve sloupci seskupený index. Clusterový index fyzicky třídí data a ukládá data do tabulky na základě svého definovaného indexového klíče. Protože můžeme data třídit pouze v jednom pořadí, není možné mít více než jeden seskupený index.

Neklastrovaný index však třídí a ukládá data odděleně od řádků v tabulce. V podstatě se jedná o kopii sloupců dat tabulky s odkazy na přidruženou tabulku. Na rozdíl od seskupených indexů můžete mít jeden nebo více neklastrovaných indexů.

Co způsobuje poškození indexu SQL Server?

Indexy se mohou časem silně fragmentovat (kvůli operacím hromadného vkládání, aktualizace nebo odstraňování) a vyžadují pravidelnou údržbu. Fragmentované indexy mohou způsobit špatný výkon dotazů a mohou se poškodit. Také faktory, jako je aktualizace verze SQL Server, chyba v programu SQL, náhlé vypnutí systému atd. mohou vést k poškození indexu SQL Server. Zejména spuštění ‚složitého příkazu UPDATE s nápovědou NOLOCK‘ v tabulce může způsobit poškození indexu bez klastrů.

Než probereme metody opravy poškození v indexech SQL Server, podívejme se, jak identifikovat poškozené indexy.

Jak identifikovat korupci v indexu SQL Server?

Zda je index poškozen, můžete určit pomocí následujících metod:

  • Načtěte řádky, které mají různé nebo odstraněné hodnoty, a poté spusťte příkaz ROWID k identifikaci chybějících položek. Chybějící položky můžete také dohledat kontrolou protokolu chyb SQL.
  • Pokud máte poškozený index bez klastrů, spuštění DBCC CHECKDB ohlásí následující chybovou zprávu.

Msg 2511, Level 16, State 1, Line 31

Chyba tabulky:ID objektu 613577224, index ID 2, ID oddílu 72057594041401344,

ID alokační jednotky 72057594047037440 (zadejte IN-row data).

Klíče mimo provoz na stránce (1:264), sloty 2 a 3.

  • Pokud máte seskupený index, může se zobrazit následující zpráva s chybou:

Server:Zpráva 1902, úroveň 16, stav 3, řádek 1

V tabulce ‚Název tabulky‘ nelze vytvořit více než jeden seskupený index. Před vytvořením dalšího zrušte stávající seskupený index „Název indexu seskupení“.

Jak opravit poškození indexu SQL Server?

Postupujte podle těchto bezplatných metod, které můžete použít k opravě poškození indexu SQL Server:

Metoda 1 – Obnovení ze zálohy

Ať už máte podezření na poškození v klastrovaném nebo neklastrovaném indexu, použijte zálohu k obnovení postižených dat dříve, než došlo k poškození.

Obnovení ze zálohy však nebude fungovat, pokud v záloze chybí nejnovější aktualizace. Může to dokonce vést ke ztrátě dat. V takovém případě vyzkoušejte další metodu.

Metoda 2 – Vypustit a znovu vytvořit poškozený index

Poznámka: Toto funguje pouze pro indexy bez klastrů.

Zrušte všechny nebo konkrétní index zobrazující poškození podle následujících kroků:

  • Připojte se k instanci serveru v SQL Server Management Studio (SSMS) .
  • V Průzkumníku objektů okně, rozbalte databázi obsahující tabulku s poškozeným indexem.
  • Klikněte pravým tlačítkem na tabulku a vyberte ‘Tabulka skriptů jako‘ možnost, umístěte ukazatel myši na ‚DROP And CREATE To‘ a klikněte na Nový editor dotazů

Pokud se vám nepodaří znovu vytvořit poškozené indexy, můžete zkusit indexy opravit.

Metoda 3 – Oprava databáze SQL

Jako poslední možnost spusťte příkaz DBCC CHECKDB s ‚REPAIR_ALLOW_DATA_LOSS‘ pro databázi, která má poškozený (seskupený nebo neklastrovaný) index v tabulce. To však může vést ke ztrátě dat. Jako alternativní řešení zkuste použít nástroj pro opravu SQL, jako je Stellar Repair pro MS SQL. Nástroj pomáhá opravit databázové soubory (.mdf a .ndf) a obnovuje indexy, pohledy, uložené procedury a všechny ostatní součásti. Obnovené indexy a další databázové objekty můžete importovat přímo do živé nebo nové databáze.

Stáhněte si demo verzi softwaru pro opravu databáze SQL a před uložením opraveného souboru si prohlédněte náhled obnovitelných indexů.

Závěr

Pokud máte podezření na poškození indexu, použijte faktory uvedené v článku k určení, zda je index poškozen, či nikoli. Podívejte se také na možné důvody poškození indexu serveru SQL Server a metody opravy poškození. Metody zahrnují obnovu databáze ze zálohy, zrušení a opětovné vytvoření indexů a opravu databáze a obnovení všech jejích součástí. Můžete také zvážit použití nástroje pro opravu SQL k opravě poškozených klastrovaných a neklastrovaných indexů SQL a obnovení nepřístupných databázových objektů.


  1. Měříte výkon serveru SQL pomocí těchto metrik?

  2. Nejlepší přístup k odstranění časové části datatime na serveru SQL Server

  3. Jak nahrát obrázky do databáze MySQL pomocí kódu PHP

  4. Sledujte výkon databáze pomocí nástroje Uptime Infrastructure Monitor