Sé que hay preguntas que resuelven el problema de una base de datos atascada en el RESTORING
estado y he usado esas soluciones para volver a poner la base de datos en línea manualmente, pero mi escenario es algo diferente.
Tengo una restauración automatizada usando scripts de Powershell que restaura una copia de producción a una instancia de DEV. Las secuencias de comandos no se modifican durante aproximadamente un año y, ocasionalmente, el proceso de restauración finaliza, pero la base de datos restaurada está atascada en el RESTORING
estado (a veces la secuencia de comandos funciona bien, a veces falla así).
Cada vez que vuelvo a ejecutar manualmente el proceso, funciona o si restauro manualmente la base de datos desde la interfaz de usuario de SSMS o mediante T-SQL, se completa sin ningún problema.
He encontrado respuestas que recomiendan ejecutar CHECKDB
en la base de datos restaurada, pero nada salió como causa de este problema.
Dado que los scripts de restauración restauran una copia de seguridad COMPLETA de la base de datos y usan una "WITH RECOVERY"
opción, estoy tratando de averiguar qué podría estar deteniendo el proceso de restauración, aunque en realidad lo estoy restaurando usando "WITH RECOVERY"
.
Cualquier sugerencia es realmente apreciada ya que estoy atascado tratando de entender por qué esto sucede de vez en cuando.
Me gustaría mucho resolver la causa raíz del problema en lugar de tratar los síntomas, que es restaurar manualmente la base de datos una vez más.
Actualizar:
Github Gist como @Brent recomienda - aquí .
fuente
EXEC sys.xp_readerrorlog 0,1;
: busque mensajes a la hora de la operación de restauración.Respuestas:
La navaja de Occam sugiere comenzar con lo obvio:
Si su script a veces deja una base de datos en estado de restauración, entonces depure el script.
Comience registrando lo que está haciendo en una tabla o un archivo. Luego, cuando termine con la base de datos en estado de restauración, retroceda a través de sus registros para ver qué salió mal. (Si desea un segundo par de ojos de la comunidad, intente cargar su script como Github Gist, pero tenga en cuenta que cuanto más grande sea, más difícil será para las personas detectar errores).
Si no desea hacer eso, intente ejecutar un seguimiento de Profiler o Extended Events para rastrear los eventos de restauración, pero tenga cuidado: es mucho más difícil de lo que parece. (Lea los comentarios en esa publicación para obtener aún más ideas de lectores que han intentado y fallado).
fuente