Identificare la causa principale del motivo per cui il database è bloccato nello stato RESTORING


10

So che ci sono domande che risolvono il problema di un database bloccato nello RESTORINGstato e hanno usato quelle soluzioni per riportare manualmente il database online, ma il mio scenario è leggermente diverso.

Ho un ripristino automatico utilizzando gli script Powershell che ripristina una copia della produzione in un'istanza DEV. Gli script rimangono invariati per circa un anno e occasionalmente il processo di ripristino termina ma il database ripristinato è bloccato nello RESTORINGstato (a volte lo script funziona bene, a volte non riesce in questo modo).

Ogni volta che rieseguo manualmente il processo funziona o se ripristino manualmente il database dall'interfaccia utente di SSMS o tramite T-SQL si completa senza problemi.

Ho trovato risposte che consigliano di essere eseguite CHECKDBsul DB ripristinato ma non è emerso nulla come causa di questo problema.

Poiché gli script di ripristino ripristinano un backup COMPLETO del database e utilizza "WITH RECOVERY"un'opzione, sto cercando di scoprire cosa potrebbe fermare il processo di ripristino, anche se in realtà lo sto ripristinando usando "WITH RECOVERY".

Tutti i suggerimenti sono molto apprezzati dal momento che sono bloccato a cercare di capire perché questo accada di tanto in tanto.

Mi piacerebbe molto risolvere la causa principale del problema piuttosto che trattare i sintomi, che è di ripristinare manualmente nuovamente il DB.

Aggiornare:

Github Gist come raccomandato da @Brent - qui .


1
È possibile ottenere la risposta dai registri di SQL Server e dal Visualizzatore eventi, hai controllato? C'è qualche problema di spazio che sta accadendo perché ciò potrebbe causare il blocco dello stato di ripristino. Verifichi l'integrità del backup prima del ripristino? Com'è il tuo sottosistema di archiviazione
Shanky,

@Grazie, darò un'occhiata a quelli, anche se non ho accesso diretto a tali informazioni (ho bisogno di essere acquisito con il mio amministratore SAN). L'integrità del backup è impostata per essere verificata sia durante il backup che durante la scrittura su disco.
Radu Gheorghiu,

1
Cosa dice il log degli errori di SQL Server? Prova a eseguire EXEC sys.xp_readerrorlog 0,1;: cerca i messaggi durante l'operazione di ripristino.
Max Vernon,

@MaxVernon Il registro degli errori dal momento del ripristino . Ho controllato il messaggio di errore e sembra consigliarmi di controllare lo spazio su disco, che è abbondante. Scaverò più a fondo e vedrò cosa riesco a trovare, ma a una rapida occhiata questo potrebbe espandersi molto e mi farebbe guardare molte cose .
Radu Gheorghiu,

Risposte:


8

Il rasoio di Occam suggerisce di iniziare con l'ovvio:

Se lo script a volte lascia un database in stato di ripristino, eseguire il debug dello script.

Inizia registrando ciò che stai facendo in una tabella o in un file. Quindi, quando si finisce con il database in stato di ripristino, tornare indietro nei registri per vedere cosa è andato storto. (Se vuoi una seconda serie di occhi dalla community, prova a caricare la tua sceneggiatura come Github Gist, ma tieni presente che più è grande, più sarà difficile per la gente individuare i bug).

Se non vuoi farlo, prova a eseguire una traccia di Profiler o Eventi estesi per tenere traccia degli eventi di ripristino, ma tieni presente che è molto più difficile di quanto sembri. (Leggi i commenti su quel post per ulteriori idee per i lettori che hanno provato e fallito.)


Grazie Brent, queste sono alcune buone linee guida! Tornerò con un aggiornamento quando avrò più informazioni, per il momento il DB va bene, vedrò cosa succede quando il processo si ripete domani mattina.
Radu Gheorghiu,
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.