Riepilogo: Il problema dell'inaccessibilità del database SQL è il problema comune affrontato dagli utenti del database. Quindi questo blog sulla risoluzione dei problemi discuterà di SQL Server rilevato un errore di I/O basato sulla coerenza logica. Discuteremo il motivo di questo errore e i modi migliori per sapere come affrontare questo problema. Per accedere e recuperare il database SQL inaccessibile, l'utente può avvalersi dell'aiuto dello strumento Recupera database di SQL Server.
Motivi dietro l'errore di I/O basato sulla coerenza logica del database:
- Arresto/arresto anomalo del sistema improvviso o arresto forzato
- L'amministratore SQL tenta di eseguire query o modificare i dati SQL
Quando un database di SQL Server rileva un errore basato sulla coerenza logica, il passaggio iniziale consiste nel rilevare l'errore.
Le strategie di accompagnamento possono aiutare a rilevare l'errore:
- Utilizza lo strumento Best Practice Analyzer (BPA):lo strumento BPA aiuta a identificare gli errori di coerenza di base. Questo strumento è esplicito per la variante SQL, il che significa che BPA 2008 è accessibile con SQL 2008, ecc.
- Controlla il sistema Windows a livello di struttura del registro eventi, gli errori relativi al driver o al disco
- Verifica la rispettabilità del framework dei file eseguendo l'ordine chkdsk
- Esegui la diagnostica suggerita dai produttori di hardware per il framework o il disco
- Per SQL Server 2008, eseguire l'utilità SQLIOSim sull'unità del database che ha annunciato un errore di I/O.
- Contattare il venditore di hardware o il produttore del dispositivo per verificare che i prerequisiti hardware corrispondano alle necessità di I/O del server SQL.
I metodi manuali per affrontare SQL Server hanno rilevato un errore di I/O basato sulla coerenza logica
Tecnica 1:verifica dell'hardware e della rete applicativa
L'errore di irregolarità del database può essere corretto creando una rete appropriata tra il database e l'applicazione SQL.
Tecnica 2:ripristino da backup SQL
La soluzione più possibile consiste nell'utilizzare il backup per il ripristino del database SQL. Prima di eseguire il ripristino dal backup, assicurati che:
- Hai un backup completo in corso
- Il backup è aggiornato, solo prima della corruzione, e non molto vecchio per mantenere una distanza strategica dalla perdita di dati di base.
- La corruzione è a livello di pagina, poiché i problemi di corruzione a livello di pagina possono essere risolti con l'assistenza del ripristino a livello di pagina.
Passaggio 1: Utilizzare l'ordine di accompagnamento per ripristinare il database SQL da un backup completo
Esegui il backup del registro delle transazioni
Backup LOG PageLevelRestores TO
Piatto ='g:PageLevelRestores_LOG1.bak'
CON INIT
Vai
Passaggio 2: Esegui la modifica del ripristino per rispecchiare le progressioni online.
Esegui il backup della coda del registro...
Backup LOG PageLevelRestores TO
Cerchio ='g:PageLevelRestores_LOG_TAIL.bak'
CON INIT
Vai
Nota:non esiste alcun motivo valido per ripristinare l'intero database del server SQL se il danneggiamento è associato a una singola pagina. Puoi ripristinare il database dal backup accessibile per quella pagina che è minata. L'esecuzione degli ordini di accompagnamento aiuterà a ripristinare il backup per una pagina solitaria:
Ripristina tutti i backup dei log accessibili nella richiesta corretta
Ripristina LOG PageLevelRestores DA
Cerchio ='g:PageLevelRestores_LOG1.bak'
CON NORECOVERY
Vai
Infine, ripristina il backup del registro di coda
Ripristina LOG PageLevelRestores DA
Cerchio ='g:PageLevelRestores_LOG_TAIL.bak'
CON NORECOVERY
Vai
Infine, completa la sequenza di ripristino
Ripristina DATABASE PageLevelRestores CON RECOVERY
Vai
Quando il backup del database ha ripristinato il database SQL, eseguire nuovamente la query DBCC CHECKDB per verificare che la dichiarazione di selezione prevalga senza errori di I/O basati sulla coerenza logica del database SQL. Questo ordine controlla inoltre che non vi sia alcuna perdita di dati in questa tabella.
Limitazioni del backup del database SQL:
- È assurdo aspettarsi di eseguire il ripristino dal backup del database SQL quando il backup accessibile non è aggiornato.
- Nella remota possibilità che l'errore di I/O basato sulla coerenza logica sia diffuso nel database del server SQL, a quel punto questa strategia non sarà legittima.
- Per quelle situazioni in cui la pagina difettosa è presente in un indice non cluster, il database SQL può essere corretto eliminando e ricreando l'indice del database SQL.
Tecnica 3:ripara il database SQL corrotto con REPAIR_ALLOW_DATA_LOSS
REPAIR_ALLOW_DATA_LOSS è il livello fisso di base per gli errori analizzati.
Note:prima di utilizzare REPAIR_ALLOW_DATA_LOSS, eseguire l'accompagnamento:
Fai un backup del database del server SQL e salvalo con un altro nome
Imposta il database SQL in modalità Utente singolo
Ottieni il conteggio dei record di tutte le tabelle utilizzando i comandi associati
Proclama @COUNT INT
Proclama @SQL VARCHAR(2000)
Crea TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)
Proclama TINFO_CUR CURSOR FOR
SELEZIONARE TABLE_NAME DA INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='TABELLA DI BASE'
APRI TINFO_CUR
Ottieni NEXT FROM TINFO_CUR IN @T_Name
WHILE @@FETCH_STATUS =0
Inizia
SET @SQL='INSERT INTO #T_Info(T_Name,D_Count) SELECT ”'[email protected]_Name+”',COUNT(*) FROM '[email protected]_Name+”
ESEGUI (@SQL)
Ottieni NEXT FROM TINFO_CUR IN @T_Name
FINE
CHIUDI TINFO_CUR
DEALLOCATE TINFO_CUR
SELEZIONA * DA #T_Info ORDINA PER T_NAME
I progressi di accompagnamento aiutano a correggere il database SQL e a risolvere errori di I/O coerenti basati sulla coerenza:
Esegui il comando:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)
Una volta che il database SQL è stato corretto, ripetere la procedura di "Conteggio record tabella" e confrontare con il conteggio dei record precedenti.
Non deve esserci alcuna distinzione tra il conteggio iniziale e l'ultimo record della tabella.
Vincoli :
REPAIR_ALLOW_DATA_LOSS può correggere l'errore di I/O basato sulla coerenza logica del database, ma esiste un problema significativo di perdita di dati, in cui una connessione potrebbe subire la perdita di dati di base.
Soluzione elettiva
Se le tecniche di cui sopra non funzionano, a quel punto, dai un'occhiata a uno strumento SysTools SQL File Repair . Questo strumento risolve i file MDF e NDF corrotti e ripristina tutti gli oggetti del database. Inoltre, questo strumento aiuta a recuperare tutti gli oggetti del database come tabelle, trigger, indici, chiavi, regole, file eliminati e stored procedure. È di incredibile aiuto nel bel mezzo di un'emergenza, poiché il prodotto offre una soluzione di riparazione inconfondibile e supporta tutte le versioni del database SQL.
Conclusione
Leggi anche: Come verificare se il database SQL è danneggiato
In questo post, abbiamo descritto il motivo per cui SQL Server ha rilevato un errore di I/O basato sulla coerenza logica e le tecniche per risolvere questo problema.
Alla luce dell'errore, abbiamo cercato di individuare la tecnica giusta. Nella remota possibilità che l'hardware o il framework siano responsabili dell'errore, è prescritto per determinare i problemi relativi all'hardware e, nel caso in cui DBCC CHECKDB segnali un errore di coerenza, a quel punto tentare di ripristinare il database SQL utilizzando un backup aggiornato.
Se il problema non viene risolto con l'hardware e il backup, a quel punto provare a riparare il database con l'assistenza di REPAIR_ALLOW_DATA_LOSS. Questo è il grado di correzione di base per determinare tutti gli errori da CHECKDB, ma ciò non implica che risolverà davvero l'errore. Inoltre, potrebbe causare la perdita di dati.