¿Hay algún paso especial necesario para evitar la corrupción de datos al reiniciar un servidor que aloja una instancia de MS SQL Server?
Por ejemplo, recientemente encontré la recomendación de detener el servicio SQL manualmente. Tengo entendido que esto es manejado por el shutdown
proceso de Windows .
Estoy seguro de que hay millones de pasos que las personas individuales pueden recomendar, como el que acabo de mencionar, pero me gustaría evitar repetir prácticas obsoletas o supersticiosas . ¿Hay alguna recomendación de Microsoft o estándares de la industria generalizados?
Esta pregunta se relaciona con el procedimiento a corto plazo de reiniciar una máquina. Hay otra pregunta con respecto al procedimiento a largo plazo para garantizar que una máquina no se use, antes de desmontarla permanentemente.
fuente
Respuestas:
No tiene que ser elegante / preocupado o asustado cuando reinicia el servidor SQL.
Solo asegúrate de no tener transacciones de larga duración. Lo mejor es reiniciar el servidor sql usando la consola o el comando de apagado durante un período de actividad bajo / mínimo, también llamado ventana de mantenimiento, para minimizar el impacto en su negocio.
Si tiene alguna configuración de recuperación ante desastres y no desea estar inactivo, lo mejor es realizar una conmutación por error y luego reiniciar el nodo pasivo o secundario.
El apagado limpio de SQL Server se produce en los siguientes escenarios:
En todas las situaciones, el servidor sql cierra limpiamente todas sus bases de datos y luego termina el servicio que implica confirmar o deshacer todas las transacciones, escribir todas las páginas sucias en el disco y luego escribir una entrada en el registro de transacciones.
Apagado incorrecto del servidor sql:
SQL Server siempre intentará hacer un apagado limpio ... a menos que haga algo incorrecto como se indicó anteriormente.
Algunos enlaces de lectura realmente buenos sobre lo que sucede detrás de escena durante la fase de recuperación:
fuente
Todo esto se detalla exhaustivamente en esta página.
Dado que su pregunta específicamente pregunta "¿hay alguna recomendada por Microsoft ", me inclino a pensar que esto es contraproducente tener esta discusión aquí. El artículo detalla el proceso a través de
Si esos pasos son satisfactorios o no, sería mi opinión, que no desea. Entonces la respuesta correcta siempre estará más actualizada allí.
Detener el servicio antes de apagar
No, no es necesario. Cuando el kernel de Windows envía la señal de apagado a SQL Server, lo hará de manera segura y el sistema esperará a que se complete. Hablando en general, cualquier cosa construida con la capacidad de apagado con seguridad no tiene que ser apagado manualmente, y es lógico pensar todas las aplicaciones de Microsoft siguen su propio API y los procedimientos que atan a las
PRESHUTDOWN
oSHUTDOWN
fases. A partir de los documentosPRESHUTDOWN
, que supongo que están usando,Como puede ser necesario, supongo que así es como funciona SQL Server.
fuente
No exactamente cuando se trata de cerrar y prevenir la corrupción de la base de datos. MS SQL Server es un producto muy maduro y las posibilidades de causar un problema de corrupción por un simple 'apagado' serían un escenario de borde. Es mucho más probable que cause corrupción al no ejecutar CHECK DB o tener la validación de suma de comprobación establecida en su DB.
Quizás tener herramientas externas que toquen directamente los archivos MDF / NDF / LDF podría causar problemas, como intentar 'mover' los archivos entre apagados o hacer que algún software intente bloquear los archivos durante el apagado. He visto que Windows Clustering se arruina cuando un disco que aloja archivos DB está lleno, pero no específicamente causa 'corrupción de db'.
Si desea ayudar a garantizar un apagado o una conmutación por error sin problemas, puede ejecutar un punto de control, asegurarse de que está ejecutando DBCC CHECKDB con frecuencia (al menos las veces suficientes para poder recuperar datos corruptos de una copia de seguridad) y verificar que cualquier dependencia externa esté cuidado como espejo.
Sin embargo, si algún experto TIENE otras 'mejores prácticas', me encantaría escucharlas, pero revisando los blogs y los recursos en línea durante los últimos años, no he visto mucho en corrupción de datos y un simple 'apagado / reinicio'.
fuente
La forma en que lo hago: 1) Desactiva todos los trabajos. 2) Asegúrese de que no se estén ejecutando trabajos actualmente. 3) Ejecute SP_Who3 con frecuencia para verificar la actividad, también ejecute sp_whoisactive para obtener más información. 4) Si no hay actividad y lo único que ve es su consulta sp_who3 actual 5) Ponga los DB fuera de línea 6) Haga clic derecho en la parte superior de la base de datos y haga clic en Parar 7) Verifique si los servicios están en estado detenido en services.msc 8 ) Hecho
PD. Si tiene un PAGEIOLATCH / IOCOMPLETION o cualquier otra actividad en SP_Who3, no haga lo anterior, ya que podría poner sus bases de datos en modo de recuperación.
fuente