sql >> Database teknologi >  >> RDS >> Sqlserver

Måder at rette SQL-server på, der er registreret en logisk konsistensbaseret I/O-fejl

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:

  1. Det er absurd at forvente at gendanne fra SQL database backup, når den tilgængelige backup er forældet.
  2. I tilfælde af, at logisk konsistensbaseret I/O-fejl spredes over SQL-serverdatabasen, vil denne strategi på det tidspunkt ikke være legitim.
  3. 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.


  1. Brug en trigger til at stoppe en indsættelse eller opdatering

  2. Antal rækker påvirket af en OPDATERING i PL/SQL

  3. Kopier en tabel (inklusive indekser) i postgres

  4. At køre SQL-script gennem psql giver syntaksfejl, der ikke forekommer i PgAdmin