Nous avons des PC exécutant SQL Server (2008 SP4 et 2016 SP1) qui perdent régulièrement de la puissance. Évidemment, cela conduit parfois à une corruption (index) de la base de données SQL Server, que nous devons restaurer par la suite.
Je suis conscient que SQL Server n'est pas conçu pour de tels scénarios et la bonne solution consiste à corriger la cause de la panne de courant (plus d'informations ci-dessous, si vous êtes curieux). Néanmoins, y a-t-il des options de réglage dans SQL Server que je peux définir pour réduire le risque de corruption de la base de données en cas de panne de courant?
Contexte: Le "PC" est une tablette Windows montée sur un chariot élévateur. Lorsque l'utilisateur éteint le chariot élévateur, la tablette perd de la puissance. Nous avons essayé d'apprendre aux utilisateurs à fermer correctement Windows avant d'éteindre le chariot élévateur, mais nous avons échoué (probablement parce que le désactiver "fonctionne" la plupart du temps). Nous étudions également actuellement d'autres options, telles que l'ajout d'un onduleur qui signale à la tablette de s'arrêter en cas de coupure de courant.
Je suis conscient que SQL Server n'est pas conçu pour de tels scénarios et la bonne solution est de corriger la cause de la panne de courant […]
En fait, il est conçu pour faire face à la perte de puissance, c'est pourquoi il existe des choses comme l'écriture à l'avance (WAL) et la récupération après incident au démarrage (ou comme vous voulez l'appeler). L'une des façons de le faire est de choisir de ne pas mettre en cache les écritures qui semblent être ce que fait la tablette, d'où la corruption.
Néanmoins, existe-t-il des options de réglage dans SQL Server que je peux définir pour réduire le risque de corruption de la base de données en cas de coupure de courant?
Non, SQL Server fait ce qu'il devrait. Vous devriez regarder soit en dehors de SQL Server (paramètres Windows pour la mise en cache des lecteurs [que SQL veut désactiver mais nous ne pouvons pas vous forcer], les mises à jour matérielles/micrologicielles, etc.) ou, comme Eric l'a dit, acheter une alimentation externe pour relativement bon marché, ce qui pourrait résoudre les symptômes (le problème réel est probablement un type de mise en cache ou d'écriture sur batterie qui n'est pas réellement soutenu).
Si la tablette a une batterie qui fonctionne , vous pouvez configurer Windows pour qu'il s'éteigne lorsque la batterie est faible .
Si la tablette a une batterie qui ne fonctionne pas , pensez à remplacer la batterie. (J'ai eu des ordinateurs portables comme ça - vous seriez surpris de voir à quel point les batteries de remplacement peu coûteuses peuvent être sur eBay. Elles ne fonctionnent pas aussi bien que les OEM, mais bon, rien de mieux que rien dans cette situation.)
Si la tablette n'a pas du tout de capacité de batterie , envisagez d'ajouter une petite alimentation sans coupure (UPS) avec des sorties USB qui peuvent communiquer avec Windows pour le dire lorsqu'il fonctionne sur batterie. (Par exemple, j'ai mon propre bureau configuré pour s'éteindre lorsque l'onduleur est faible sur batterie - de cette façon, il s'éteindra en cas de panne de courant même si je ne suis pas à la maison.)
Si aucune de ces options n'est possible, vous n'avez pas de chance. C'est un vieux livre blanc, mais le SQL Server 2000 I/O Basics de Microsoft explique essentiellement que vous avez besoin d'un sous-système d'E/S qui peut gérer les pannes de courant avec élégance.
Il existe des options que vous pouvez utiliser pour augmenter le risque - comme Durabilité retardée ou tables uniquement en mémoire (non durables) - mais par défaut, SQL Server fait déjà de son mieux pour maximiser la fiabilité à chaque écriture dans le journal des transactions. Si même l'écriture du journal des transactions ne peut pas être garantie en raison de pannes de courant aléatoires, dépensez 100 $ sur une batterie UPS.
En supposant que vous ayez une base de données locale sur le chariot élévateur plutôt qu'un serveur en raison de connexions sans fil irrégulières? Évidemment, retirer SQL du chariot élévateur serait la solution préférable.
Quoi qu'il en soit, comme Brent l'a suggéré, réglez la tablette pour qu'elle s'éteigne d'elle-même après x minutes sur batterie ou selon des critères similaires.
À défaut, un petit onduleur pouvant déclencher un arrêt normal sera probablement votre meilleur pari dans ce cas. S'appuyer sur les utilisateurs pour des choses comme ça, c'est échouer.
L'os sous-jacent doit garantir une écriture réussie ou une erreur est retournée. Le système d'exploitation s'appuie à son tour sur des pilotes qui, à leur tour, s'appuient sur un micrologiciel qui repose sur le matériel.
C'est pourquoi vous devez vérifier auprès du fabricant du pilote/micrologiciel/matériel.
De même, l'ordre d'écriture doit être garanti sur toutes les couches, ce qui doit également être vérifié.
Même les caches sauvegardés par batterie peuvent échouer, par exemple pendant les tempêtes de New York, certains centres de données n'étaient pas accessibles pendant des jours et les batteries seraient épuisées, ce qui pourrait perdre les écritures commutées
https://www.postgresql.org/docs/devel/static/wal-reliability.html
Pour développer les autres réponses:
Tout d'abord, essayez de retirer le SQL du chariot élévateur si possible. Pensez que la récupération après une perte de puissance est mauvaise, essayez de le faire après que l'ordinateur portable s'est écrasé de plus de 7000 livres. Avec des heures d'activité en entrepôt, non sauvegardées ...
Deuxièmement, un mécanisme permettant à l'ordinateur portable de procéder à un arrêt automatique après une durée x sur la batterie devrait de toute façon être en place.
Troisièmement, la connexion de l'ordinateur portable à une alimentation non commutée sur le chariot élévateur serait-elle une option? Assurez-vous de tenir compte des règles de sécurité (l'environnement peut exiger que tout soit désactivé avec la clé du chariot élévateur) et de la durée pendant laquelle le chariot élévateur reste entre les utilisations (en particulier le week-end et les jours fériés) pour éviter de décharger la batterie de la machine.