it-swarm.it

SQL Server mostra il database in fase di recupero

Oggi, dopo un'interruzione di corrente, un database (con Recovery: completo) mostra "In Recovery" in SSMS. Così:

myDatabase (In recovery) (stato del database: recovery, Shutdown)

Al termine, nel "processo di ripristino" il database mostra il nome myDatabase senza "(In recovery)". Ho pensato che il problema fosse risolto, ma non lo era.

Quando ho avviato l'applicazione che utilizza quel database, il testo aggiuntivo "(In recovery)" appare di nuovo accanto al nome del mio database.

Ho aspettato fino al termine del "processo di recupero", quindi ho portato il database offline e lo ho riportato online.

Ho riavviato il server, riavviato il computer e quando la mia applicazione era in esecuzione, viene visualizzato di nuovo il testo aggiuntivo. Nei log di SQL Server il messaggio "Avvio del database 'myDatabase'" appare alcune volte. Sembra che il database funzioni perché posso inserire dati, ma lo stato mostra che succede qualcosa.

Il registro del server non mostra nulla di interessante. L'unica cosa anomala è che ho 30 voci di "Avvio del database 'myDatabase'".

So che quando il server si avvia ogni database passa attraverso il recupero prima che sia pronto per l'uso. Ma nel mio caso, il database diventa online, quindi mostra "myDatabase (In recovery)". Se chiudo l'applicazione, il database passa a Status: Normal. Questo mi sta facendo impazzire.

Ho persino installato una nuova istanza di SQL Server e ho inserito il vecchio database "myDatabase". Il problema si verifica ancora.

Quando eseguo questa query:

SELECT databasepropertyex('nyDatabase', 'STATUS')

Mostra recupero, online, sospetto e ritorno a online, quindi recupero e così via.

23
Andres

Community wiki answer originariamente lasciato come modifica alla domanda dal suo autore:

Il problema era che la proprietà del database AutoClose era impostata su.

La soluzione era impostare AutoClose su false.

2
user126897

Non sono sicuro che ciò possa aiutare a risolvere il problema, ma puoi provarlo.

Correre:

RESTORE DATABASE YourDatabase WITH RECOVERY

Verifica se quanto sopra porta il database fuori dalla modalità di recupero. In caso contrario, il problema potrebbe essere qualcos'altro.

Puoi provare il comando seguente e vedere se il database è corrotto?

DBCC CHECKDB ('YourDBname') WITH NO_INFOMSGS, ALL_ERRORMSGS

Se rileva un danneggiamento, potresti voler riparare il database usando DBCC CHECKDB

16
RK Kuppala

Ogni volta che porti un database online, viene sottoposto a un processo di recupero. Sono un po 'confuso dal tuo modo di esprimere il problema. Stai vedendo il database andare al ripristino in qualsiasi momento diverso da quando il database viene portato offline (o dalla tua interruzione di corrente originale o da averlo portato offline e poi di nuovo online)? In tal caso, il database non è in linea per qualche altro motivo. Meglio controllare i log del server SQL per vedere cosa sta succedendo.

Dovresti anche controllare il registro eventi di Windows per qualcosa come un errore del disco. Il database non dovrebbe essere avviato e ripristinato durante le normali operazioni.

6
Ben Thul