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
GÅ
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
GÅ
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
GÅ
Slutligen, Återställ säkerhetskopian av slutloggen
Återställ LOG PageLevelRestores FRÅN
Circle ='g:PageLevelRestores_LOG_TAIL.bak'
Med NORETHERNING
GÅ
Slutligen gör du klart med återställningssekvensen
Återställ DATABAS PageLevelRestores MED ÅTERSTÄLLNING
GÅ
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:
- 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.
- Om det finns en chans att logiskt konsistensbaserat I/O-fel sprids över SQL-serverdatabasen, kommer den här strategin inte att vara legitim.
- 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.