Diagnosi dell'errore 9001 di Microsoft SQL Server: il registro per il database non è disponibile


20

Durante il fine settimana un sito Web che eseguo ha smesso di funzionare, registrando il seguente errore nel Visualizzatore eventi ogni volta che viene effettuata una richiesta al sito Web:

ID evento: 9001

Il registro per il " nome database" del database non è disponibile. Controllare il registro eventi per i relativi messaggi di errore. Risolvi eventuali errori e riavvia il database.

Il sito Web è ospitato su un server dedicato, quindi sono in grado di eseguire il RDP nel server e curiosare. Il LDFfile per il database esiste nella C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAcartella, ma il tentativo di eseguire qualsiasi lavoro con il database da Management Studio genera una finestra di dialogo che riporta lo stesso errore - 9001: Il registro per il database non è disponibile ...

Questa è la prima volta che ricevo questo errore e sto ospitando questo sito (e altri) su questo web server dedicato da oltre due anni.

Comprendo che questo errore indica un file di registro danneggiato. Sono stato in grado di ripristinare il sito online staccando il database e ripristinando un backup di un paio di giorni fa, ma la mia preoccupazione è che questo errore sia indicativo di un problema più sinistro, vale a dire un guasto del disco rigido.

Ho inviato un'e-mail di supporto alla società di web hosting e questa è stata la loro risposta:

Nel registro eventi non sembrano esserci altre indicazioni della causa, quindi è possibile che il registro sia danneggiato. Attualmente le risorse della memoria sono all'87%, il che potrebbe anche avere un impatto ma è improbabile.

Il registro può semplicemente "diventare danneggiato?"

La mia domanda: quali sono i prossimi passi da fare per diagnosticare questo problema? Come posso determinare se si tratta effettivamente di un problema hardware? E se lo è, ci sono altre opzioni oltre a sostituire il disco?

Grazie

Risposte:


16

Ben oltre il 99% dei problemi di corruzione del database è dovuto al sistema di archiviazione. La metà dei problemi rimanenti è dovuta a memoria insufficiente, mentre l'altra metà è costituita da bug in SQL Server.

Le probabilità sono che sia un problema di archiviazione.

Se si verifica nuovamente, eseguire DBCC CHECKDB sul database e questo fornirà ulteriori informazioni sulla corruzione e se il problema può essere risolto senza eseguire un ripristino. Probabilmente dovrai portare il database online in modalità di emergenza per eseguire il checkdb sul database.

L'uso della memoria all'87% non ha nulla a che fare con il problema. SQL Server eseguirà la memoria fino al 100% (o vicino ad essa) in base alla progettazione.


Grazie per i suggerimenti In realtà ho provato a fare DBCC CHECKDB, ma ho ricevuto molti errori, incluso un errore che diceva che non riusciva a trovare il file di registro. Ma non ho provato a portare il DB online in modalità di emergenza.
Scott Mitchell,

Di solito se il registro delle transazioni è danneggiato è una cosa piuttosto negativa. CHECKDB potrebbe essere in grado di ripararlo o potrebbe non farlo, a seconda di quanto sia grave la corruzione. Se si dispone di backup del registro delle transazioni (il provider potrebbe non consentirli), non si sarebbero persi quasi nessun dato. Alla fine dell'output del checkdb sarà il livello di riparazione necessario per correggere i problemi con i file del database.
mrdenny,

Corretta. L'utilizzo della memoria non avrà nulla a che fare con questo, a meno che la memoria non sia corrotta e trasferita sul disco. In entrambi i casi, dovresti vedere alcune altre indicazioni di problemi di I / O nei registri eventi. Da qualche parte.
Michael K Campbell,

Puoi provare a eseguire un checkdisk (chkdsk) sul disco per vedere se Windows rileva problemi con il disco. Le probabilità sono che dovrai sostituire il disco. Tuttavia, potrebbe essere stato solo un bug nel codice del controller del disco o nel codice nel BIOS del disco. In entrambi i casi cercherei di sostituire i dischi e / o il controller.
mrdenny,

8

Sono stato in grado di risolverlo portando offline il database in Management Studio e riportandolo immediatamente online. dbcc checkdbaveva generato errori che sono stati risolti dopo aver fatto questo. Non posso dire il motivo per cui questo ha funzionato solo che ha fatto il lavoro.


5

Ho avuto questo problema anche di recente e dopo montagne di ricerca sembra essere comune quando un database è impostato su AUTO CLOSE. Ho impostato tutti i database su AUTO CLOSE = FALSE. Questo è iniziato con un database, poi è passato a due e il successivo è stato su tutti. Ho semplicemente riavviato il servizio di istanza di SQL Server invece di ripristinare i database. Un altro modo per correggere il sintomo è portare offline il database problematico e riportarlo online.



0

Ho intenzione di indovinare / sperare che tu abbia un raid per il disco per il tuo server SQL. se sospetti problemi hardware, la prima cosa che farei è eseguire i tuoi strumenti di manutenzione / diagnostica del raid.

la seconda cosa (probabilmente contemporaneamente se possibile) è eseguire dbcc checkdb sul database (forse anche i database di sistema).


0

Ok, primo passo, fai un backup del tuo registro e dei tuoi file mdf su un'unità completamente diversa. VELOCEMENTE! (copia del file)

Inoltre, prova a eseguire un backup completo del database.

Quindi, prova quanto segue. Utilizzando il database corrente, staccarlo, se è possibile, quindi eliminare il file di registro o spostarlo in una posizione completamente diversa sul disco. Quindi ricollegare il database e verrà visualizzato nella GUI con un file di registro, fare clic su Rimuovi (o Elimina) per il file di registro in modo che non venga visualizzato, quindi fare clic su OK. Fondamentalmente collegandolo senza un registro, lo forzerà a creare un file di registro per il database nella posizione predefinita.

Fammi sapere.


0

Sì, anch'io ho avuto lo stesso problema, riguardava l'errore 9001 tempDb cioè il registro non è disponibile. Abbiamo riavviato i servizi e tutto è andato bene.

Il problema dietro questo era SAN o problema di archiviazione, mentre l'operazione di scrittura I / O, non è stato in grado di scrivere per più di 15 secondi.


0

Ieri ho ricevuto lo stesso errore "il registro per il database '%' non è disponibile. Errore irreversibile 9001, msg 21. Contatta l'amministratore" -

Soluzione alternativa: ho controllato "TempDB" ma non era accessibile in modo simile al resto dei database di sistema. Quindi prima di andare per l'opzione di riparazione ho semplicemente riavviato i servizi SQL per quell'istanza e il problema è stato risolto :) :)


-2

Ho visto che ciò accade quando non c'è spazio su disco disponibile per l'espansione del registro; puoi verificare che ci fosse ampio spazio su C: \ e che i tuoi registri siano gestiti, vale a dire il backup se sei in modalità di recupero completo.

Vorrei spostare i tuoi ldf (e mdf) dal volume di avvio se hai l'opzione.


L'esaurimento dello spazio sul disco rigido non causerà MAI corruzione del database, a meno che non si stia utilizzando uno storage thin provisioning e lo spazio di archiviazione di base esaurito. Ma è un incubo completamente diverso.
mrdenny,

Lo riformulerò ... forse non è un danneggiamento del database, ma sicuramente una causa per cui i file di registro non sono disponibili come dichiarato dall'op.
SqlACID,

1
Esistono più di 25 GB di spazio libero sull'unità e il database in questione ha dimensioni inferiori a 25 MB.
Scott Mitchell,

L'unico errore che vedrai mai esaurire lo spazio è un errore di file completo quando si tenta di modificare le righe all'interno del database poiché la transazione non può essere scritta nel registro (non ciò che l'OP ha dichiarato). A corto di spazio non renderebbe il database non disponibile (cosa dichiarato dall'OP).
mrdenny,

Disaccordo. Ho esaurito lo spazio sull'unità in cui si trovava il file di registro e quindi ho iniziato a vedere esattamente lo stesso problema in questione.
ADNow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.