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 shutdown
processus 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.
la source
Réponses:
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:
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:
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:
la source
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
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
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
PRESHUTDOWN
ouSHUTDOWN
. À partir des documentsPRESHUTDOWN
, que je suppose qu'ils utilisent,Comme cela peut être nécessaire, je suppose que c'est ainsi que fonctionne SQL Server.
la source
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 ''.
la source
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.
la source