Oversigt: Problemet med SQL-database utilgængelighed er det almindelige problem, som databasebrugerne står over for. Så denne problemhåndteringsblog vil diskutere SQL Server Detekteret En Logisk Konsistens-Baseret I/O-fejl. Vi vil diskutere årsagen bag denne fejl og de bedst mulige måder at vide, hvordan man tackler dette problem. For at få adgang til og gendanne den utilgængelige SQL-database kan brugeren tage hjælp af Recover SQL Server Database Tool.
Årsager bag databasens logiske konsistens baseret I/O-fejl:
- Pludselig systemnedlukning/nedbrud eller begrænset nedlukning
- SQL-administrator forsøger at forespørge eller ændre SQL-data
På det tidspunkt, hvor en SQL Server-database støder på en logisk konsistensbaseret fejl, er det første skridt at opdage fejlen.
De medfølgende strategier kan hjælpe med at opdage fejlen:
- Brug Best Practice Analyzer (BPA)-værktøj – BPA-værktøj hjælper med at identificere grundlæggende konsistensfejl. Dette værktøj er eksplicit for SQL-varianten, hvilket betyder, at BPA 2008 er tilgængelig med SQL 2008 osv.
- Tjek Windows System på hændelseslogrammeniveau, driver eller diskrelaterede fejl
- Tjek filrammernes respektabilitet ved at køre chkdsk order
- Kør den diagnostik, der er foreslået af hardwareproducenter til rammen eller disken
- For SQL Server 2008 skal du køre værktøjet SQLIOSim på drevet i databasen, der har annonceret I/O-fejl.
- Kontakt hardwaresælgeren eller enhedsproducenten for at kontrollere, at hardwareforudsætningerne bekræfter SQL-serverens I/O-behov.
Manuelle måder at tackle SQL Server på opdagede en logisk konsistensbaseret I/O-fejl
Teknik 1 – Tjek hardware og applikationsnetværk
Database-uregelmæssighedsfejl kan rettes ved at opbygge et passende netværk mellem databasen og SQL-applikationen.
Teknik 2 – Gendan fra SQL-sikkerhedskopi
Den mest opnåelige løsning er at bruge backup til genvinding af SQL-databaser. Før du gendanner fra backup, skal du sikre dig, at:
- Du har en løbende fuld backup
- Sikkerhedskopien opdateres, kun før korruption, og ikke særlig gammel for at bevare en strategisk afstand fra grundlæggende datatab.
- Korruption er på sideniveau, da korruptionsproblemer på sideniveau kan løses ved hjælp af sideniveaugendannelse.
Trin 1: Brug den medfølgende ordre til at gendanne SQL-database fra en fuld sikkerhedskopi
Sikkerhedskopier transaktionsloggen
Backup LOG PageLevelRestores TIL
Plade ='g:PageLevelRestores_LOG1.bak'
Med INIT
GO
Trin 2: Udfør restaureringsændringen for at spejle forløbene online.
Sikkerhedskopier loggens hale...
Backup LOG PageLevelRestores TIL
Cirkel ='g:PageLevelRestores_LOG_TAIL.bak'
Med INIT
GO
Bemærk:Der er ingen tvingende grund til at gendanne den fulde SQL-serverdatabase, hvis korruption er bundet til en enkelt side. Du kan gendanne databasen fra den tilgængelige sikkerhedskopi for den side, som er undermineret. Udførelse af ledsagende ordrer vil hjælpe med at gendanne sikkerhedskopien til en enkelt side:
Gendan alle tilgængelige log-backups i den rigtige anmodning
Gendan LOG PageLevelRestores FRA
Cirkel ='g:PageLevelRestores_LOG1.bak'
MED NORGEVINDING
GO
Til sidst skal du genskabe backup-logfilen
Gendan LOG PageLevelRestores FRA
Cirkel ='g:PageLevelRestores_LOG_TAIL.bak'
MED NORGEVINDING
GO
Bliv endelig færdig med gendannelsessekvensen
Gendan DATABASE PageLevelRestores MED GENDANNELSE
GO
Når databasesikkerhedskopien har gendannet SQL-databasen, skal du køre forespørgslen DBCC CHECKDB igen for at se, at den valgte proklamation sejrer uden SQL-databasens logiske konsistensbaserede I/O-fejl. Denne ordre sikrer desuden, at der ikke er noget datatab i denne tabel.
Begrænsninger af SQL-databasesikkerhedskopiering:
- Det er absurd at forvente at gendanne fra SQL database backup, når den tilgængelige backup er forældet.
- I tilfælde af, at logisk konsistensbaseret I/O-fejl spredes over SQL-serverdatabasen, vil denne strategi på det tidspunkt ikke være legitim.
- I de situationer, hvor den defekte side findes i et ikke-klynget indeks, kan SQL-databasen rettes ved at slette og genskabe indekset for SQL-databasen.
Teknik 3:Reparer korrupt SQL-database med REPAIR_ALLOW_DATA_LOSS
REPAIR_ALLOW_DATA_LOSS er det faste basisniveau for de analyserede fejl.
Bemærkninger:Før du bruger REPAIR_ALLOW_DATA_LOSS, skal du udføre følgende:
Tag en sikkerhedskopi af SQL-serverdatabasen og gem den med et andet navn
Indstil SQL-database i enkeltbrugertilstand
Få optællingen af alle tabeller ved at bruge de medfølgende kommandoer
Proklamer @COUNT INT
Proklamer @SQL VARCHAR(2000)
Lav TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)
Proklamer TINFO_CUR CURSOR FOR
VÆLG TABLE_NAME FRA INFORMATION_SCHEMA.TABLER
WHERE TABLE_TYPE='BASE TABLE'
ÅBN TINFO_CUR
Få NEXT FRA TINFO_CUR INTO @T_Name
MENS @@FETCH_STATUS =0
Start
INDSTILL @SQL=’INSERT INTO #T_Info(T_Name,D_Count) SELECT ”’[email protected]_Name+”’,COUNT(*) FROM ‘[email protected]_Name+”
UDFØR (@SQL)
Få NEXT FRA TINFO_CUR INTO @T_Name
SLUT
LUK TINFO_CUR
AFTALER TINFO_CUR
VÆLG * FRA #T_Info BESTIL AF T_NAME
De medfølgende fremskridt hjælper med at rette SQL-database og løse sammenhængende konsistensbaseret I/O-fejl:
Kør kommandoen:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)
Når SQL-databasen er rettet, skal du genskabe proceduren for "Tabel Record Count" og kontrastere med den gamle posttælling.
Der må ikke være nogen forskel mellem den første og den sidste tabeloptælling.
Begrænsninger :
REPAIR_ALLOW_DATA_LOSS kan rette en logisk konsistensbaseret IO-fejl i databasen, men der er et betydeligt problem med datatab, hvor en forbindelse kan støde på tab af grundlæggende data.
Valgfri løsning
Hvis ovenstående teknikker ikke virker, skal du på det tidspunkt tjekke et SysTools SQL File Repair Tool. Dette værktøj reparerer korrupte MDF- og NDF-filer og gendan alle databaseobjekter. Desuden hjælper dette værktøj med at gendanne alle databaseobjekter såsom tabeller, triggere, indekser, nøgler, regler, slettede filer og lagrede procedurer. Det er til utrolig hjælp midt i en nødsituation, da produktet giver en umiskendelig reparationsløsning og understøtter alle SQL-databaseversioner.
Konklusion
Læs også: Sådan kontrollerer du, om SQL-databasen er beskadiget
I dette indlæg har vi præsenteret årsagen til, at SQL Server opdagede en logisk konsistensbaseret I/O-fejl og teknikkerne til at løse dette problem.
I lyset af fejlen har vi forsøgt at lokalisere den rigtige teknik. Hvis hardwaren eller rammeværket er ansvarlig for fejlen, er det foreskrevet at bestemme hardwarerelaterede problemer, og i tilfælde af at DBCC CHECKDB rapporterer konsistensfejl, forsøg på det tidspunkt at gendanne SQL-databasen ved at bruge en opdateret sikkerhedskopi.
Hvis problemet ikke er løst med hardware og backup, skal du på det tidspunkt prøve at rette databasen ved hjælp af REPAIR_ALLOW_DATA_LOSS. Dette er basisgraden af rettelse til at bestemme alle fejl fra CHECKDB, men dette betyder ikke, at det virkelig vil rette fejlen. Desuden kan det medføre tab af data.