sql >> Databasteknik >  >> RDS >> Sqlserver

Sätt att åtgärda SQL Server upptäckte ett logiskt konsistensbaserat I/O-fel

Sammanfattning: SQL-databasens otillgänglighetsproblem är det vanliga problemet för databasanvändare. Så den här bloggen som tar itu med problem kommer att diskutera SQL Server upptäckt ett logiskt konsistensbaserat I/O-fel. Vi kommer att diskutera orsaken bakom detta fel och de bästa möjliga sätten att veta hur man löser problemet. För att komma åt och återställa den otillgängliga SQL-databasen kan användaren ta hjälp av Recover SQL Server Database Tool.

Orsaker bakom databasens logiska konsistensbaserade I/O-fel:

  • Plötslig systemavstängning/krasch eller begränsad avstängning
  • SQL-administratören försöker fråga eller ändra SQL-data

När en SQL Server-databas stöter på ett logiskt konsistensbaserat fel, är det första steget att upptäcka felet.

De medföljande strategierna kan hjälpa till att upptäcka felet:

  • Använd verktyget Best Practice Analyzer (BPA) – BPA-verktyget hjälper till att identifiera grundläggande konsistensfel. Detta verktyg är explicit för SQL-varianten, vilket innebär att BPA 2008 är tillgängligt med SQL 2008, etc.
  • Kontrollera Windows-systemet på ramverksnivå för händelselogg, drivrutins- eller diskrelaterade fel
  • Kontrollera filramverkets respektabilitet genom att köra chkdsk order
  • Kör diagnostiken som föreslagits av hårdvarutillverkare för ramverket eller disken
  • För SQL Server 2008, kör verktyget SQLIOSim på enheten i databasen som har meddelat I/O-fel.
  • Kontakta hårdvarusäljaren eller enhetstillverkaren för att kontrollera att hårdvaruförutsättningarna stämmer med I/O-behoven för SQL-servern.

Manuella sätt att hantera SQL Server upptäckte ett logiskt konsistensbaserat I/O-fel

Teknik 1 – Kontrollera hårdvara och applikationsnätverk

Databasfel kan åtgärdas genom att bygga upp ett lämpligt nätverk mellan databasen och SQL-applikationen.

Teknik 2 – Återställ från SQL-säkerhetskopia

Den mest möjliga lösningen är att använda backup för återställning av SQL-databas. Innan du återställer från säkerhetskopia, se till att:

  • Du har en pågående fullständig säkerhetskopiering
  • Säkerhetskopieringen uppdateras, endast före korruption, och inte särskilt gammal för att upprätthålla ett strategiskt avstånd från grundläggande dataförlust.
  • Korruption är på sidnivå, eftersom korruptionsproblem på sidnivå kan lösas med hjälp av sidnivååterställning.

Steg 1: Använd den medföljande beställningen för att återställa SQL-databas från en fullständig säkerhetskopia

Säkerhetskopiera transaktionsloggen

Säkerhetskopieringslogg PageLevelRestores TILL

Plåt ='g:PageLevelRestores_LOG1.bak'

Med INIT

Steg 2: Utför återställningsändringen för att spegla utvecklingen online.

Säkerhetskopiera loggens svans...

Säkerhetskopieringslogg PageLevelRestores TILL

Circle ='g:PageLevelRestores_LOG_TAIL.bak'

Med INIT

Obs:Det finns ingen tvingande anledning att återställa hela SQL-serverdatabasen om korruption är bunden till en enda sida. Du kan återställa databasen från den tillgängliga säkerhetskopian för den sidan som är undergrävd. Att utföra medföljande beställningar hjälper till att återställa säkerhetskopian för en ensam sida:

Återställ alla tillgängliga loggsäkerhetskopior på rätt begäran

Återställ LOG PageLevelRestores FRÅN

Circle ='g:PageLevelRestores_LOG1.bak'

Med NORETHERNING

Slutligen, Återställ säkerhetskopian av slutloggen

Återställ LOG PageLevelRestores FRÅN

Circle ='g:PageLevelRestores_LOG_TAIL.bak'

Med NORETHERNING

Slutligen gör du klart med återställningssekvensen

Återställ DATABAS PageLevelRestores MED ÅTERSTÄLLNING

När databassäkerhetskopieringen har återställt SQL-databasen, kör du frågan DBCC CHECKDB igen för att se att den valda proklamationen råder utan logiskt konsistensbaserat I/O-fel i SQL Database. Denna beställning ser dessutom till att det inte finns någon dataförlust i den här tabellen.

Begränsningar för säkerhetskopiering av SQL-databas:

  1. Det är absurt att förvänta sig att återställa från SQL-databassäkerhetskopiering när den tillgängliga säkerhetskopian är inaktuell.
  2. Om det finns en chans att logiskt konsistensbaserat I/O-fel sprids över SQL-serverdatabasen, kommer den här strategin inte att vara legitim.
  3. För de situationer där den defekta sidan finns i ett icke-klustrat index, kan SQL-databasen åtgärdas genom att ta bort och återskapa SQL-databasens index.

Teknik 3:Reparera korrupt SQL-databas med REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS är den fasta basnivån för de analyserade felen.

Anmärkningar:Innan du använder REPAIR_ALLOW_DATA_LOSS, utför följande:

Ta en säkerhetskopia av SQL-serverdatabasen och spara den med ett annat namn

Ställ in SQL-databas i enanvändarläge

Få alla tabellposter genom att använda de medföljande kommandona

Proklamera @COUNT INT

Proklamera @SQL VARCHAR(2000)

Gör TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)

Proklamera TINFO_CUR CURSOR FÖR

VÄLJ TABLE_NAME FRÅN INFORMATION_SCHEMA.TABLER

WHERE TABLE_TYPE=’BASE TABLE’

ÖPPNA TINFO_CUR

Få NÄSTA FRÅN TINFO_CUR INTO @T_Name

MED @@FETCH_STATUS =0

Starta

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

EXEKUT (@SQL)

Få NÄSTA FRÅN TINFO_CUR INTO @T_Name

SLUT

STÄNG TINFO_CUR

AVDELA TINFO_CUR

VÄLJ * FRÅN #T_Info BESTÄLL AV T_NAME

De medföljande framstegen hjälper till att fixa SQL-databas och lösa sammanhängande konsistensbaserat I/O-fel:

Kör kommandot:

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

När SQL-databasen är fixad, omhasha proceduren för "Table Record Count" och kontrastera med gamla posträkning.

Det får inte göras någon åtskillnad mellan det första och det sista antalet tabellposter.

Begränsningar :

REPAIR_ALLOW_DATA_LOSS kan fixa logiskt konsistensbaserat IO-fel i databasen men det finns ett betydande problem med dataförlust, där en anslutning kan stöta på förlust av grundläggande data.

Elektiv lösning

Om ovanstående tekniker inte fungerar kan du då gå till SysTools SQL File Repair Tool . Detta verktyg fixar korrupta MDF- och NDF-filer och återställer alla databasobjekt. Dessutom hjälper detta verktyg till att återställa alla databasobjekt som tabeller, utlösare, index, nycklar, regler, raderade filer och lagrade procedurer. Det är till otrolig hjälp mitt i en nödsituation, eftersom produkten ger en omisskännlig reparationslösning och stöder alla SQL-databasversioner.

Slutsats

Läs även: Så här kontrollerar du om SQL-databasen är skadad 

I det här inlägget har vi presenterat anledningen till att SQL Server upptäckte ett logiskt konsistensbaserat I/O-fel och teknikerna för att lösa detta problem.

Med tanke på felet har vi försökt hitta rätt teknik. Om det inte är möjligt att hårdvara eller ramverk är ansvarig för felet, föreskrivs det att fastställa hårdvarurelaterade problem, och i händelse av att DBCC CHECKDB rapporterar ett konsistensfel, försök då att återställa SQL-databas genom att använda en uppdaterad säkerhetskopia.

Om problemet inte är åtgärdat med hårdvara och säkerhetskopiering, försök då att fixa databasen med hjälp av REPAIR_ALLOW_DATA_LOSS. Detta är basgraden av fix för att fastställa alla fel från CHECKDB, men detta betyder inte att det verkligen kommer att fixa felet. Dessutom kan det leda till dataförlust.


  1. Varför min pessimistiska låsning av JPA med Oracle inte fungerar

  2. konvertera Excel Date Serienummer till Vanligt Datum

  3. Sammansatt primärnyckel i django

  4. Hitta måndagar mellan 2 datum