Des bugs se produisent et parfois des données doivent être corrigées en production. Quelle est la manière la plus sûre d’y parvenir du point de vue d’une grande entreprise? Existe-t-il des outils qui peuvent vous aider? Voici quelques considérations motivant cette exigence ...
- Nous devons enregistrer qui a exécuté la requête et ce qu'ils ont exécuté
- Idéalement, nous devons autoriser la personne à exécuter uniquement des requêtes sur les tables d'intérêt et uniquement pendant une courte période.
- Tout ce qui est en cours d'exécution, les requêtes doivent être intelligentes pour ne pas autoriser l'exécution longue et le verrouillage de SQL sans autorisation explicite.
- Ce processus doit être indépendant de la base de données ou au moins comprendre DB2, Oracle et SQL Server.
Nous essayons de réduire le risque que les requêtes de correction de produit ad hoc ne fassent la «mauvaise chose» et en même temps ajoutent une certaine sécurité / audtis au processus. Pensées ou idées?
Réponses:
Ne mettez jamais à jour les bases de données de production manuellement.
Écrire des scripts.
Vérifiez-les trois fois et demandez à plusieurs personnes de le faire, pas seulement à une seule personne qui le fait trois fois.
Incluez des requêtes de validation post-modification dans ces scripts.
Chaque fois que la situation le permet, testez l'ensemble de la modification dans une transaction qui est annulée à la fin, après l'exécution de la validation post-modification. Lorsque vous êtes sûr des résultats, modifiez la restauration en un commit.
Testez ces scripts ad nauseam contre une base de données de test.
Effectuez une sauvegarde avant d'exécuter le script sur la base de données de production.
Exécutez les scripts.
Vérifiez, validez et revérifiez les données modifiées à l'aide des scripts de validation post-modification.
Faites quand même un contrôle visuel.
Si quelque chose semble éteint, reculez et restaurez la sauvegarde.
Ne continuez pas avec les données modifiées en tant que données de production tant que vous n'êtes pas absolument sûr que tout va bien et que vous avez approuvé les responsables (commerciaux) impliqués.
la source
WHERE
et votre base de données sera en panne pour le reste de la journée. Ou semaine.La réponse de Marjan Venema est techniquement valable et doit être suivie dans la mesure du possible. Hélas, Marjan répond du point de vue d'un théoricien ou d'un administrateur de base de données puriste qui aime faire les choses proprement. Dans la pratique, les contraintes commerciales empêchent parfois de faire les choses de manière propre.
Imaginez le cas suivant:
Il y a un bogue dans le produit logiciel qui l'empêche de fonctionner lorsqu'il détecte ce qu'il pense être une incohérence des données dans la base de données,
Tous les développeurs qui pourraient potentiellement corriger le bogue dans l'application sont inaccessibles,
L'entreprise perd actuellement des milliers de dollars par heure (disons 6 000 $, ce qui signifie 100 $ par minute),
Le bogue affecte plusieurs tables, dont une est énorme, et ne concerne que les données elles-mêmes, pas le schéma,
Afin de contourner le bogue, vous devez expérimenter un peu avec les données, ce qui implique à la fois de les supprimer et de les modifier,
La base de données est volumineuse et il faudrait trois heures pour effectuer ou restaurer la sauvegarde,
La dernière sauvegarde complète a été effectuée il y a trois semaines; il existe également des sauvegardes incrémentielles quotidiennes, et la dernière sauvegarde incrémentielle quotidienne a été effectuée il y a 14 heures,
Les sauvegardes de bases de données sont supposées fiables; ils ont été sévèrement testés, y compris récemment,
La perte de 14 heures de données n'est pas acceptable, mais la perte d'une à deux heures de données est,
L'environnement de mise en scène a été utilisé pour la dernière fois il y a six mois; il semble qu'il ne soit pas à jour, et cela peut prendre des heures à le configurer,
La base de données est Microsoft SQL Server 2008 Enterprise.
La façon propre de faire les choses est de:
Restaurer la sauvegarde dans un environnement intermédiaire,
Expérimentez là-bas,
Vérifiez le script final deux fois,
Exécutez le script sur le serveur de production.
La première étape coûtera 18 000 $ à votre entreprise. Le risque est assez faible si vous effectuez la troisième étape sans problème, mais comme vous travaillez sous une pression extrême, le risque serait beaucoup plus élevé. Vous pouvez vous retrouver avec un script qui a parfaitement fonctionné dans la mise en scène, puis visser la base de données de production.
Au lieu de cela, vous auriez pu faire comme ceci:
Créer un instantané (Microsoft SQL Server prend en charge cela, et il faut quelques secondes pour revenir (et rien à créer) un instantané d'une base de données qui prend une heure à sauvegarder; j'imagine que d'autres produits de base de données prennent également en charge les instantanés),
Expérimentez directement sur la base de données de production, en revenant à l'instantané en cas de problème.
Alors qu'un puriste réparerait la base de données d'une manière propre et aurait toujours un risque de foirer les choses compte tenu de la pression du temps tout en gaspillant plus de 20 000 $ de son entreprise, un administrateur de base de données qui prend en compte les contraintes commerciales réparera la base de données d'une manière ce qui minimisera les risques (grâce aux instantanés) tout en le faisant rapidement.
Conclusion
Je suis moi-même un puriste, et je déteste faire les choses d'une manière non propre. En tant que développeur, je refactorise le code que je modifie, je commente les parties difficiles qui n'ont pas pu être refactorisées, je teste la base de code unitaire et je fais des revues de code. Mais je prends également en considération les circonstances dans lesquelles soit vous faites les choses proprement et le lendemain, vous êtes renvoyé, soit vous minimisez à la fois les risques et l'impact financier en faisant un hack rapide qui fonctionne.
Si un gars de l'informatique veut faire les choses proprement juste pour le bien de la propreté alors que cela cause des milliers de dollars de pertes pour l'entreprise, ce gars de l'informatique a une profonde incompréhension de son travail.
la source
C'est une mauvaise pratique et une porte d'invitation pour plus de problèmes et de problèmes de données. Il y a même une phrase qui décrit cette approche comme « rapide et sale ».
Poursuivre les corrections / mises à jour directement sur un serveur de production est très dangereux , car cela vous coûtera une fortune à votre entreprise ( poursuites judiciaires, données incorrectes / sales, entreprises perdues, etc.) )
Cependant, des bogues seront là et devront être corrigés. La norme industrielle de facto consiste à appliquer des correctifs / (scripts de déploiement) sur un staging (environnement de pré-production avec la dernière copie de la base de données prod) et à laisser l'analyste de données / QA vérifier le correctif. Le même script doit être contrôlé par la version et appliqué à l'environnement Prod pour éviter les problèmes.
Il existe un certain nombre de bonnes pratiques mentionnées dans cet article connexe - Bonnes pratiques de la base de données de mise en scène
Un bon ensemble de références à regarder sont:
la source
Dans la plupart des organisations, j'ai travaillé la mise à jour des données dans l'environnement réel a toujours été effectuée par un petit groupe de personnes disposant des droits d'accès nécessaires, généralement avec un titre de poste tel que DBA. Étant donné que les mises à jour ne peuvent être effectuées que par un petit nombre de personnes, il y a au moins une chance qu'elles se familiarisent avec les données et réduisent donc (mais n'éliminent pas) le risque de problèmes.
La personne qui écrit le script de mise à jour le ferait lors du test (selon les autres réponses) et obtiendrait une approbation sérieuse de la part des non-techniciens (ceux qui connaissent le système, plus quelqu'un avec une autorité supérieure) que les fonctionnalités semblent être `` à nouveau correctes '' dans en plus de leurs propres tests paranoïaques. Les scripts et les données seraient vérifiés indépendamment par un autre technicien (souvent le rôle DBA que j'ai mentionné) lors du test avant d'être mis en production. Les résultats seraient vérifiés par rapport aux valeurs anticipées (uniques pour chaque scénario, mais souvent des choses comme les nombres de lignes, etc.)
Dans une entreprise pour laquelle je travaillais, prendre des sauvegardes n'était pas une option réaliste, mais toutes les lignes à mettre à jour étaient écrites dans un fichier texte pour référence AVANT la mise à jour, puis à nouveau APRÈS la mise à jour si quelqu'un devait y faire référence. Les scripts et ces données sont conservés dans un journal des modifications des données correctement organisé.
Chaque entreprise est unique et les risques de mise à jour de certaines données sont nettement plus importants que dans d'autres.
En ayant un processus qui oblige les gens à sauter à travers des cerceaux pour faire ces mises à jour, j'espère que vous promouvez une culture qui donne envie aux gens de traiter cela en dernier recours et de créer une attitude saine de "double vérification, triple vérification" autour de ce genre de choses.
la source
Il y a des moments où vous devez corriger des données sur Prod qui n'existent pas sur d'autres serveurs. Il ne s'agit pas uniquement de bogues, mais pourrait provenir d'une importation de données d'un fichier envoyé par un client qui était incorrecte ou d'un problème causé par un piratage de votre système. Ou d'un problème causé par une mauvaise saisie de données. Si votre base de données est volumineuse ou critique, vous n'aurez peut-être pas le temps de restaurer la dernière sauvegarde et de corriger le dev.
Votre première défense (et quelque chose qu'aucune base de données d'entreprise ne peut se permettre de se passer!) Sont les tables d'audit. Vous pouvez les utiliser pour annuler les modifications de données incorrectes. De plus, vous pouvez écrire des scripts pour ramener les données à l'état précédent et les tester sur d'autres serveurs bien avant de devoir rétablir les données auditées. Ensuite, le seul risque est que vous ayez identifié les enregistrements corrects à rétablir.
Ensuite, tous les scripts pour modifier les données de production doivent inclure les éléments suivants:
Ils doivent être dans des transactions explicites et avoir un bloc TRY Catch.
Ils devraient avoir un mode de test que vous pouvez utiliser pour annuler les modifications après avoir vu ce qu'elles auraient été. Vous devez avoir un état sélectionné avant la modification et une exécution après la modification pour vous assurer que la modification était correcte. Le script doit s'assurer que le nombre de lignes traitées est affiché. Nous avons une partie de cette pré-mise en place dans un modèle qui garantit que les pièces sont terminées. Les modèles de modifications permettent également de gagner du temps lors de l'écriture du correctif.
S'il y a une grande quantité de données à modifier ou à mettre à jour, pensez à écrire le script à exécuter par lots avec des validations pour chaque lot. Vous ne voulez pas verrouiller l'ensemble du système pendant que vous corrigez un million d'enregistrements. Si vous avez de grandes quantités de données à corriger, assurez-vous qu'un administrateur de base de données ou quelqu'un qui est habitué à l'optimisation des performances examine le script avant de l'exécuter et de l'exécuter pendant les heures de repos, si possible.
Ensuite, tous les scripts pour changer quoi que ce soit en production sont examinés et mis en contrôle de code source. Tous - sans exception.
Enfin, les développeurs ne doivent pas exécuter ces scripts. Ils doivent être exécutés par dbas ou un groupe de gestion de configuration. Si vous n'avez ni l'un ni l'autre, alors seules les personnes qui sont des prospects technologiques ou supérieurs devraient avoir le droit d'exécuter des choses sur prod. Moins il y a de personnes qui exécutent des choses sur prod, plus il est facile de détecter un problème. Les scripts doivent être écrits de manière à être simplement exécutés, sans surligner les parties et à exécuter une étape à la fois. Ce sont les éléments de mise en évidence qui mettent souvent les gens en difficulté lorsqu'ils oublient de mettre en évidence la clause where.
la source
J'ai mis à jour des données plusieurs fois lors de l'exécution de bases de données de production. Je suis d'accord avec la réponse ci-dessus, que ce ne serait jamais une procédure d'exploitation standard.
Cela coûterait aussi cher (nous regarderions par-dessus les épaules et discuterions peut-être de 2 ou 3)
Et la règle d'or: faites toujours une instruction select pour montrer ce qui serait fait avant de faire une instruction update / delete / insert
La règle d'or est appliquée par les deux autres personnes de l'équipe!
la source
re: Réponse de MainMa ...
la source