¿Qué pasos son necesarios para reiniciar de forma segura una máquina que aloja Microsoft SQL Server?


24

¿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 shutdownproceso 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.


No tengo sentido pedir "estándares de la industria generalizados" y no querer un "trillón de pasos que personas individuales pueden recomendar". Esa es presumiblemente su explicación de los estándares de la industria. Ambas preguntas parecen válidas, pero la fuente autorizada será un enlace al artículo de Microsoft.
Evan Carroll

Respuestas:


14

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:

  • Detenga el servidor SQL utilizando la consola de Servicios.
  • Apagando su servidor
  • ejecutar el comando SHUTDOWN en SSMS

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:

  • apagado con nowait
  • tirando del cable de alimentación de su servidor (si tiene acceso).
  • matar sqlserver.exe desde el administrador de tareas
  • Error de Dirve en el que residen los binarios del servidor sql, exe, las bases de datos del sistema o la falla de la unidad del sistema de Windows ... por lo general, C: \ unidad.
  • sobrecalentamiento del servidor que hace que se apague (¡rara vez debería ocurrir!)

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:


Gran detalle, gracias. ¿Qué quieres decir con "Configuración DR"?
Jon of All Trades

@JonofAllTrades Recuperación ante desastres ... por ejemplo, envío de registros, creación de reflejo de la base de datos o incluso puede pensar en alta disponibilidad como Clustering
Kin Shah

1
Si bien estoy totalmente de acuerdo con esta lista de escenarios de apagado "incorrectos", la corrupción de datos no debería ocurrir incluso entonces, gracias al Registro de escritura anticipada.
John Alan

5

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

  • Usando cualquiera
    • línea de comando
    • Potencia Shell,
    • SQL Server Management Studio (GUI)
  • Para 2008, 2012, 2014, 2016.
  • Para el
    • Motor de base de datos
    • o agente

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

¿Es necesario o recomendado hacerlo antes de apagar un servidor que está ejecutando servicios SQL?

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 PRESHUTDOWNo SHUTDOWNfases. A partir de los documentos PRESHUTDOWN, que supongo que están usando,

Notifica a un servicio que el sistema se apagará. Los servicios que necesitan tiempo adicional para realizar tareas de limpieza más allá de la estricta restricción de tiempo al apagar el sistema pueden usar esta notificación. El administrador de control de servicios envía esta notificación a las aplicaciones que se han registrado antes de enviar una SERVICE_CONTROL_SHUTDOWNnotificación a las aplicaciones que se han registrado para esa notificación.

Un servicio que maneja esta notificación bloquea el apagado del sistema hasta que el servicio se detiene o el intervalo de tiempo de espera previo al apagado especificado SERVICE_PRESHUTDOWN_INFOexpira. Debido a que esto afecta la experiencia del usuario, los servicios deben usar esta función solo si es absolutamente necesario para evitar la pérdida de datos o un tiempo de recuperación significativo en el próximo inicio del sistema.

Como puede ser necesario, supongo que así es como funciona SQL Server.


Eso es casi lo que estaba preguntando. Ese documento describe cómo apagar el motor de SQL Server, pero no responde si es necesario o recomendado hacerlo antes de apagar un servidor que está ejecutando servicios SQL.
Jon of All Trades

@JonofAllTrades actualizado nuevamente.
Evan Carroll

3

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'.


-1

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.


Muy raramente es factible o vale la pena detener todo el tráfico a la base de datos para la mayoría de las personas. También estoy seguro de qué beneficio hay al desconectar todas las bases de datos; eso solo agregará más tiempo al proceso.
LowlyDBA

Este no es un buen consejo en absoluto. ¿por qué sugeriría desconectar dbs?
Kin Shah
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.