Quelles sont les étapes nécessaires pour redémarrer en toute sécurité une machine hébergeant Microsoft SQL Server?


24

Y a-t-il des étapes spéciales nécessaires pour empêcher la corruption des données lors du redémarrage d'un serveur hébergeant une instance MS SQL Server?

Par exemple, j'ai récemment rencontré la recommandation d'arrêter le service SQL manuellement. Ma compréhension est que cela est géré par le shutdownprocessus Windows .

Je suis sûr qu'il y a un nombre illimité d'étapes que certaines personnes peuvent recommander, comme celle que je viens de mentionner, mais j'aimerais éviter de répéter des pratiques obsolètes ou superstitieuses . Existe-t-il des recommandations de Microsoft ou des normes industrielles répandues?


Cette question concerne la procédure à court terme de redémarrage d'une machine. Il y a une autre question concernant la procédure à long terme pour s'assurer qu'une machine n'est pas utilisée, avant de la démonter définitivement.


Je ne peux pas comprendre le fait de demander des «normes industrielles répandues» et de ne pas vouloir de «zillions d'étapes que certaines personnes pourraient recommander». C'est probablement leur compte rendu des normes de l'industrie. Ces deux questions semblent valables, mais la source faisant autorité sera un lien vers l'article Microsoft.
Evan Carroll

Réponses:


14

Vous n'avez pas besoin d'être fantaisiste / inquiet ou effrayé lorsque vous redémarrez le serveur SQL.

Assurez-vous simplement que vous n'avez pas de transactions de longue durée. Le mieux est de redémarrer le serveur SQL à l'aide de la console ou de la commande d'arrêt pendant une période d'activité faible / minimale également appelée fenêtre de maintenance pour minimiser l'impact sur votre entreprise.

Si vous avez une configuration DR et que vous ne voulez pas être en panne, le mieux est de basculer puis de redémarrer le nœud passif ou secondaire.

Clean Shutdown SQL Server se produit dans les scénarios ci-dessous:

  • Arrêtez le serveur SQL à l'aide de la console Services.
  • Arrêter votre serveur
  • exécution de la commande SHUTDOWN dans SSMS

Dans toutes les situations, le serveur SQL ferme proprement toutes ses bases de données, puis met fin au service, ce qui implique de valider ou d'annuler toutes les transactions, d'écrire toutes les pages sales sur le disque, puis d'écrire une entrée dans le journal des transactions.

Arrêt incorrect du serveur SQL:

  • arrêt avec nowait
  • tirant le câble d'alimentation de votre serveur (si vous y avez accès).
  • tuer sqlserver.exe du gestionnaire de tâches
  • Échec de Dirve sur lequel résident les fichiers binaires du serveur SQL, EXE, les bases de données système ou échec du lecteur système Windows. Généralement C: \ lecteur.
  • surchauffe du serveur provoquant son arrêt (devrait rarement arriver !!)

SQL Server essaiera toujours de faire un arrêt net ... sauf si vous faites quelque chose de incorrect comme indiqué ci-dessus.

Quelques très bons liens de lecture sur ce qui se passe dans les coulisses pendant la phase de récupération:


Grand détail, merci. Qu'entendez-vous par une «configuration DR»?
Jon of All Trades

@JonofAllTrades Disaster Recovery .. par exemple, l'envoi de journaux, la mise en miroir de bases de données ou vous pouvez même penser à la haute disponibilité comme le clustering
Kin Shah

1
Bien que je sois totalement d'accord avec cette liste de scénarios d'arrêt «incorrects», la corruption des données ne devrait pas se produire même alors, grâce à la journalisation en écriture.
John Alan

5

Tout cela est détaillé en détail sur cette page.

Étant donné que votre question demande spécifiquement «existe-t-il des recommandations de Microsoft », je suis enclin à penser que c'est contre-productif d'avoir cette discussion ici. L'article leurs détails le processus à travers

  • Utiliser soit
    • ligne de commande
    • Powershell,
    • SQL Server Management Studio (GUI)
  • Pour 2008, 2012, 2014, 2016.
  • Pour les deux
    • Moteur de base de données
    • ou, agent

Que ces étapes soient satisfaisantes ou non serait à mon avis, ce que vous ne voulez pas. La bonne réponse sera donc toujours la plus à jour.

Arrêt du service avant la mise hors tension

est-il nécessaire ou recommandé de le faire avant d'arrêter un serveur qui exécute des services SQL.

Non, ce n'est pas nécéssaire. Lorsque le noyau Windows envoie le signal d'arrêt à SQL Server, il le fait de manière sûre et le système attend qu'il se termine. D'une manière générale, tout ce qui est construit avec la possibilité de s'arrêter en toute sécurité ne doit pas être arrêté manuellement, et il va de soi que toutes les applications Microsoft suivent leur propre API et procédures liées aux phases PRESHUTDOWNou SHUTDOWN. À partir des documents PRESHUTDOWN, que je suppose qu'ils utilisent,

Avertit un service que le système va s'arrêter. Les services qui ont besoin de temps supplémentaire pour effectuer des tâches de nettoyage au-delà de la restriction de temps serrée à l'arrêt du système peuvent utiliser cette notification. Le gestionnaire de contrôle des services envoie cette notification aux applications qui s'y sont inscrites avant d'envoyer une SERVICE_CONTROL_SHUTDOWNnotification aux applications qui se sont inscrites pour cette notification.

Un service qui gère cette notification bloque l'arrêt du système jusqu'à ce que le service s'arrête ou que l'intervalle de délai d'attente avant l'arrêt spécifié SERVICE_PRESHUTDOWN_INFOexpire. Étant donné que cela affecte l'expérience utilisateur, les services ne doivent utiliser cette fonctionnalité que si cela est absolument nécessaire pour éviter la perte de données ou un temps de récupération important au prochain démarrage du système.

Comme cela peut être nécessaire, je suppose que c'est ainsi que fonctionne SQL Server.


C'est presque ce que je demandais. Ce document décrit comment arrêter le moteur SQL Server, mais ne répond pas s'il est nécessaire ou recommandé de le faire avant d'arrêter un serveur qui exécute des services SQL.
Jon of All Trades

@JonofAllTrades a de nouveau été mis à jour.
Evan Carroll

3

Pas exactement quand il s'agit d'arrêter et d'empêcher la corruption de la base de données. MS SQL Server est un produit très mature et les chances de provoquer un problème de corruption par un simple «arrêt» seraient un scénario de pointe. Vous êtes beaucoup plus susceptible de provoquer une corruption en n'exécutant pas CHECK DB ou en définissant la validation de la somme de contrôle sur votre base de données.

Peut-être que le fait d'avoir des outils externes touchant directement les fichiers MDF / NDF / LDF pourrait causer des problèmes, comme essayer de `` déplacer '' les fichiers entre les arrêts ou faire essayer à certains logiciels de verrouiller les fichiers pendant l'arrêt. J'ai vu Windows Clustering bousiller lorsqu'un disque hébergeant des fichiers DB est plein, mais ne provoque pas spécifiquement de «corruption de base de données».

Si vous voulez aider à assurer un arrêt ou un basculement en douceur, vous pouvez exécuter un point de contrôle, assurez-vous que vous exécutez DBCC CHECKDB souvent (au moins suffisamment de fois pour pouvoir récupérer les données corrompues à partir d'une sauvegarde) et vérifiez que toutes les dépendances externes sont pris en charge tels que la mise en miroir.

Si des experts ont d'autres `` meilleures pratiques '', j'aimerais cependant les entendre, mais en parcourant les blogs et les ressources en ligne au cours des dernières années, je n'ai pas vu grand-chose dans la corruption de données et un simple `` arrêt / redémarrage ''.


-1

La façon dont je le fais: 1) Désactivez tous les travaux. 2) Assurez-vous qu'aucun travail n'est en cours d'exécution. 3) Exécutez SP_Who3 fréquemment pour vérifier l'activité, exécutez également sp_whoisactive pour plus d'informations. 4) S'il n'y a pas d'activité et que la seule chose que vous voyez est votre requête sp_who3 actuelle 5) Mettez les bases de données hors ligne 6) Cliquez avec le bouton droit en haut de la base de données et cliquez sur Arrêter 7) Vérifiez si les services sont à l'état arrêté dans services.msc 8 ) Terminé

PS. Si vous avez un PAGEIOLATCH / IOCOMPLETION ou toute autre activité dans SP_Who3, ne faites pas ce qui précède car cela pourrait mettre vos bases de données en mode de récupération.


Il est très rarement possible ou utile d’arrêter tout le trafic vers la base de données pour la plupart des gens. Je suis également sûr de savoir quel avantage il y a à mettre toutes les bases de données hors ligne - cela ne fera qu'ajouter plus de temps au processus.
LowlyDBA

Ce n'est pas du tout un bon conseil. pourquoi suggéreriez-vous de mettre dbs hors ligne - si les dbs sont en HADR, par exemple en miroir ou AG, vous ne pourrez pas le faire.
Kin Shah
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.