web-dev-qa-db-fra.com

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

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 de 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 processus Windows shutdown.

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 pour é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 ne 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.

24
Jon of All Trades

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 suivants:

  • 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 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:

14
Kin Shah

Tout cela est détaillé de manière exhaustive sur cette page.

Étant donné que votre question demande spécifiquement "y a-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

  • Utilisation de
    • ligne de commande
    • Powershell,
    • SQL Server Management Studio (GUI)
  • Pour 2008, 2012, 2014, 2016.
  • Pour le
    • 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 leurs propres API et procédures se liant au PRESHUTDOWN, ou SHUTDOWN phases. D'après les documents sur 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 se sont inscrites avant d'envoyer un SERVICE_CONTROL_SHUTDOWN notification 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 l'intervalle de temporisation de pré-arrêt spécifié via SERVICE_PRESHUTDOWN_INFO expire. Parce que cela affecte l'expérience utilisateur, les services ne doivent utiliser cette fonctionnalité que si elle 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.

5
Evan Carroll

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 Edge. Vous êtes beaucoup plus susceptible de provoquer la corruption en n'exécutant pas CHECK DB ou en ayant défini 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 ''.

3
Ali Razeghi