Dans votre trigger, vous avez deux pseudo-tables disponibles, Inserted et Deleted. Qui contiennent ces valeurs. Dans le cas d'une UPDATE, la table supprimée contient les anciennes valeurs, tandis que la table Inserted contient les nouvelles valeurs. Donc, si vous voulez enregistrer l'ID, OldValue, NewValue dans votre trigger, vous devez écrire quelque chose comme: Fondamentalement, vous joignez les pseudo-tables Inserted et Deleted, saisissez l'ID (qui est le même, je présume, dans les deux cas ), L'ancienne valeur de la table supprimée, la nouvelle valeur de la table Inserted, et vous stockez tout dans le LogTable Répondre Jul 2008 à 18:12 marcs 467k 9679 96 9679 897 9679 1063 Dans SQL Server 2008, vous pouvez utiliser Changer de données Capturez pour cela. Détails de la façon de le mettre en place sur une table sont ici msdn. microsoften-uslibrarycc627369.aspx Répondre Jul 6 10 at 6:46 Répondu Sep 29 16 at 9:32 Votre réponse 2017 Stack Exchange, IncI a pris la parole lors d'une conférence l'année dernière sur Les sujets de DevOps, la configuration en tant que code et la livraison continue et utilisé l'histoire suivante pour démontrer l'importance de rendre les déploiements entièrement automatisés et répétables dans le cadre d'une initiative de livraison DevOpsContinuous. Depuis cette conférence, plusieurs personnes m'ont demandé de partager l'histoire à travers mon blog. Cette histoire est vraie ce qui s'est vraiment passé. C'est mon récit de l'histoire basée sur ce que j'ai lu (je n'étais pas impliqué dans ce). C'est l'histoire de la faillite d'une entreprise avec près de 400 millions d'actifs en 45 minutes en raison d'un déploiement défaillant. Contexte Knight Capital Group est une société américaine de services financiers internationaux qui s'engage dans la fabrication de marchés. L'exécution électronique et les ventes et le commerce institutionnels. En 2012, Knight a été le plus gros trader dans les actions américaines avec une part de marché d'environ 17 sur le NYSE et le NASDAQ. Knights Electronic Trading Group (ETG) a géré un volume de transactions journalier moyen de plus de 3,3 milliards de transactions quotidiennes, en négociant plus de 21 milliards de dollars par jour. Ce n'est pas une blague Le 31 juillet 2012, Knight avait environ 365 millions de dollars en espèces et équivalents. Le NYSE prévoyait de lancer un nouveau programme de liquidité de détail (un programme visant à fournir des prix améliorés aux investisseurs de détail par le biais de courtiers de détail, comme Knight) le 1er août 2012. En préparation pour cet événement, Knight a mis à jour son algorithme automatisé, à haute vitesse, algorithmique Routeur qui envoie des ordres dans le marché pour l'exécution connu sous le nom SMARS. L'une des fonctions principales de SMARS est de recevoir des ordres d'autres composants de la plate-forme de négociation Knights (ordres parents) et d'envoyer ensuite une ou plusieurs ordres enfants pour exécution. En d'autres termes, SMARS recevrait de grandes commandes de la plate-forme de négociation et les diviser en plusieurs commandes plus petites afin de trouver un match acheteur pour le volume d'actions. Plus l'ordre parent est grand, plus les ordres enfants seront générés. La mise à jour de SMARS était destinée à remplacer le vieux code inutilisé appelé Power Peg fonctionnalité que Knight hadnt utilisé en 8 ans (pourquoi le code qui avait été mort pour 8 ans était encore présent dans la base de code est un mystère, mais thats Pas le point). Le code qui a été mis à jour repurposed un vieux drapeau qui a été utilisé pour activer la fonctionnalité Power Peg. Le code a été entièrement testé et prouvé pour fonctionner correctement et de manière fiable. Ce qui pourrait aller mal Ce qui pourrait éventuellement aller mal En effet Entre le 27 juillet 2012 et le 31 juillet 2012 Knight a déployé manuellement le nouveau logiciel à un nombre limité de serveurs par jour huit (8) serveurs au total. C'est ce que le dépôt SEC dit sur le processus de déploiement manuel (BTW s'il ya un dépôt SEC sur votre déploiement quelque chose peut-être terriblement mal). Pendant le déploiement du nouveau code, cependant, un des techniciens de Knights n'a pas copié le nouveau code à l'un des huit serveurs d'ordinateur de SMARS. Knight n'a pas eu un deuxième technicien examiner ce déploiement et personne à Knight a réalisé que le code Power Peg n'avait pas été retiré du huitième serveur, ni le nouveau code RLP ajouté. Knight n'avait pas de procédure écrite qui exigeait un tel examen. Numéro de dépôt SEC 70694 16 octobre 2013 À 9 h 30, heure de l'Est, le 1er août 2012, les marchés ont été ouverts et Knight a commencé à traiter les commandes des courtiers pour le compte de leurs clients pour le nouveau programme de liquidité de détail. Les sept (7) serveurs ayant le bon déploiement SMARS ont commencé à traiter correctement ces commandes. Les ordres envoyés au huitième serveur déclenché le supposable repurposed drapeau et ramené des morts l'ancien Power Peg code. Attaque des Zombies du Code des Tueurs Il est important de comprendre ce que le code Power Peg mort était censé faire. Cette fonctionnalité était censée compter les actions boughtsold contre une commande parent comme les ordres fils ont été exécutés. Power Peg ordonnerait au système d'arrêter l'acheminement des ordres enfants une fois l'ordre parent rempli. Fondamentalement, Power Peg suivrait les ordres des enfants et les arrêterait une fois que l'ordre des parents était terminé. En 2005, Knight a déplacé cette fonctionnalité de suivi cumulatif vers un stade antérieur de l'exécution du code (ce qui supprime le suivi du comptage de la fonctionnalité Power Peg). Lorsque l'indicateur Power Peg sur le huitième serveur a été activé, la fonctionnalité Power Peg a commencé à acheminer des ordres fils pour exécution, mais n'a pas suivi la quantité d'actions par rapport à l'ordre parent comme une boucle sans fin. 45 minutes d'enfer Imaginez ce qui se passerait si vous aviez un système capable d'envoyer des ordres automatisés à grande vitesse sur le marché sans aucun suivi pour voir si suffisamment de commandes avaient été exécutées. Oui, c'était si mal. Lorsque le marché a ouvert à 9 h 30, les gens savaient rapidement que quelque chose n'allait pas. À 9 h 31, il était évident pour beaucoup de gens à Wall Street que quelque chose de grave se produisait. Le marché a été inondé avec des ordres hors de l'ordinaire pour les volumes de négociation régulière sur certains stocks. À 9 h 32, beaucoup de gens de Wall Street se demandaient pourquoi il ne s'était pas arrêté. C'était une éternité en termes de négociation à grande vitesse. Pourquoi hadnt quelqu'un a frappé le kill-switch sur n'importe quel système faisait cela Comme il s'avère qu'il n'y avait pas de commutateur kill. Au cours des 45 premières minutes de négociation Knights exécutions constituées plus de 50 du volume de négociation, la conduite de certains stocks de plus de 10 de leur valeur. En conséquence, d'autres stocks ont diminué en valeur en réponse aux métiers erronés. Pour aggraver les choses, le système Knights a commencé à envoyer des messages électroniques automatisés plus tôt dans la journée dès 8h01 (lorsque SMARS avait traité des commandes admissibles à la négociation avant la mise en marché). Les messages de courrier électronique renvoient SMARS et identifient une erreur en tant que Power Peg désactivée. Entre 8 h 01 et 9 h 30, 97 de ces courriels ont été envoyés au personnel de Knight. Bien sûr, ces courriels n'étaient pas conçus comme des alertes système et donc personne ne les regardait tout de suite. Oops. Pendant les 45 minutes de Hell que Knight a expérimenté, ils ont essayé plusieurs contre-mesures pour tenter d'arrêter les métiers erronés. Il n'y avait pas d'interrupteur de tuer (et pas de procédures documentées pour savoir comment réagir) de sorte qu'ils ont été laissés à essayer de diagnostiquer le problème dans un environnement commercial en direct où 8 millions d'actions étaient négociées chaque minute. Comme ils n'étaient pas en mesure de déterminer ce qui causait les commandes erronées, ils ont réagi en désinstallant le nouveau code des serveurs sur lesquels il a été déployé correctement. En d'autres termes, ils ont supprimé le code de travail et laissé le code brisé. Cela n'a fait qu'amplifier les problèmes entraînant l'activation de la commande Power Peg par tous les serveurs, et pas seulement celle qui n'a pas été déployée correctement. Finalement, ils ont été en mesure d'arrêter le système après 45 minutes de négociation. Dans les 45 premières minutes, le marché a été ouvert le code Power Peg reçu et traité 212 commandes parent. En conséquence SMARS a envoyé des millions d'ordres d'enfant dans le marché résultant dans 4 millions de transactions contre 154 stocks pour plus de 397 millions d'actions. Pour vous, drogués du marché boursier, cela signifiait que le chevalier supposait environ 3,5 milliards de positions longues nettes sur 80 actions et 3,15 milliards de positions courtes nettes sur 74 actions. En termes laymen8217s, Knight Capital Group a réalisé une perte de 460 millions en 45 minutes. Rappelez-vous, Knight n'a que 365 millions de dollars en espèces et équivalents. En 45 minutes, Knight est passé d'être le plus gros trader des actions américaines et un important market maker au NYSE et NASDAQ à la faillite. Ils avaient 48 heures pour réunir le capital nécessaire pour couvrir leurs pertes (ce qu'ils ont réussi à faire avec un investissement de 400 millions d'environ une demi-douzaine d'investisseurs). Knight Capital Group a finalement été acquis par Getco LLC (décembre 2012) et la société fusionnée s'appelle maintenant KCG Holdings. Une leçon à apprendre Les événements du 1er août 2012 devraient être une leçon pour toutes les équipes de développement et d'exploitation. Il ne suffit pas de construire de grands logiciels et de tester, vous devez également vous assurer qu'il est livré sur le marché correctement afin que vos clients obtiennent la valeur que vous fournissez (et donc vous ne faillir votre entreprise). Les ingénieurs qui ont déployé SMARS ne sont pas seuls à blâmer ici le processus que Knight avait mis en place n'était pas approprié pour le risque qu'ils ont été exposés. En outre, leur processus (ou leur absence) était intrinsèquement enclin à l'erreur. Chaque fois que votre processus de déploiement repose sur la lecture des humains et les instructions suivantes, vous vous exposez à des risques. Les humains font des erreurs. Les erreurs pourraient être dans les instructions, dans l'interprétation des instructions, ou dans l'exécution des instructions. Les déploiements doivent être automatisés et répétables et exempts d'erreurs humaines possibles. Si Knight avait implémenté un système de déploiement automatisé avec configuration, déploiement et automatisation des tests, l'erreur qui causerait le Knightmare aurait été évitée. Un couple des principes pour la livraison continue s'appliquent ici (même si vous ne mettez pas en œuvre un processus complet de livraison continue): Libérer le logiciel devrait être un processus répétable et fiable. Automatiser autant que cela est raisonnable. Un scénario: supposons qu'ils avaient de très bons DevOps. Donc, tous les serveurs seraient synchronisés. Mais 8211 supposent que le nouveau code avait un bug. Donc, tous les serveurs sont en synchronisation, mais ont le même code buggy. Que faire si deux versions du code, c'est-à-dire les 2 derniers déploiements avaient ce bogue. Donc, une fois qu'ils se rendent compte que quelque chose ne va pas, they8217d rouler le code, le bug reste encore 8230 Minutes précieuses ont disparu. Peut-être 20 minutes au lieu de 45 minutes dans votre article. Donc, en bref 8211 leur catastrophe kill-switch est un déploiement de rétablissement de code dans un environnement en direct. Ce serait toujours une conception défectueuse. Ce qu'ils auraient besoin serait un grand commutateur rouge (presque littéralement, quelque part dans leur tableau de bord) pour s'arrêter immédiatement. Où est la règle d'entreprise qui dit 8220first ne pas nuire8221. VJ si le déploiement sur tous les serveurs avait fonctionné, ils auraient été ok. Mais dans ce cas, 7 sur 8 pour un sous-système ont été déployés correctement. Parce que le mauvais comportement, ils ont roulé les 7 autres pensant que le nouveau code dans ce sous-système était le problème. Cela a multiplié le problème jusqu'à ce que le commutateur tuer. Les catastrophes sont presque toujours complexes. Dans ce cas, il s'agissait de mauvaises pratiques de codage, plus pratiques d'inspection de code de test douteuses, plus une erreur dans le déploiement, plus un retour à la granularité du sous-système plutôt que le système entier. Si vous résolvez l'un de ces problèmes, vous n'obtiendrez pas un désastre. L'une des choses que j'ai vu dans les entreprises qui ne reconnaissent pas la véritable importance et l'impact de leurs systèmes informatiques est qu'elles ne fournissent pas de budget pour les mises à jour de code héritées. Par exemple: J'ai vu des situations où les TI n'ont pas de budget. Il doit justifier tout ce qu'il fait contre une dépense d'entreprise. Ce qui signifie constamment brouiller pour aligner de nouveaux projets. Les entreprises voient rarement la nécessité de mettre à jour les anciens logiciels qui fonctionnent actuellement, de sorte qu'ils refusent de payer pour cela. Le résultat est un nouveau code constant, réalisé par les codeurs les moins chers possibles, sans pour autant investir dans les technologies qui amélioreraient les performances et réduiraient les risques. Pourquoi Parce que ceux-ci sont considérés comme 8220IT problèmes8221 et non la portée de tout projet sur les gens de TI travaillent, de sorte que personne ne paiera pour cela. Une grande lecture au sujet de cette pratique est le projet Phoenix par Gene Kim, Kevin Behr et George Spafford. Merci d'avoir appliqué le cerveau à la hype. Probablement on devrait demander pourquoi les techniciens impliqués ont réussi à prendre le blâme, mais n'a pas obtenu l'autorité de tuer le commutateur sur leurs propres. Oh bien, c'est pourquoi vous avez mis OpsSRE en place de toute façon. 8220R8221 est pour responsable, appât de flamme d'aka. J'ai écrit un peu sur cet événement, et je voudrais avertir quiconque d'utiliser le rapport de la SEC comme quoi que ce soit autrement que pour ce que la SEC avait besoin de lui. Kitchensoap20131029counterfactuals-knight-capital Fascinant lire. J'ai travaillé dans une grande maison de ventes pour les fruits et les légumes une fois où une nouvelle version de logiciel a été installée et a échoué, menant aux pertes importantes aux commerçants (mais pas aussi massif que ceux-ci). Il s'agissait également d'un déploiement inapproprié et d'un repli. La leçon à apprendre est qu'il ya des domaines où l'ordinateur ne devrait pas prendre de décision sans validation humaine. Qu'en est-il des personnes qui ont perdu leur emploi parce que, oops, il y avait un bogue Qu'en est-il les autres entreprises qui peut-être entré en trubble en raison de changement soudain de la valeur de stock Automation de 8220high niveau decisions8221 doit être manipulé avec soin8230 Nice and educational post Btw. Utiliser le cadre Cynefin fournit une meilleure caractérisation de cette 8216DevOps8217 échec Ce poste semble avoir été écrit à partir d'une perspective DevOps. Les solutions suggérées sont compatibles avec une perspective de DevOps 8211 examiner le processus de libération, d'automatiser plus, et de concevoir un commutateur kill avec des capacités de récupération. Quelqu'un peut lire le message et mettre trop d'emphase sur le technicien Knight qui n'a pas copié l'ancien code à l'un des huit serveurs. Quelqu'un peut trop simplifier une relation de cause à effet. 8211 Augmenter la diversité pour analyser la situation et synthétiser de meilleures options 8211 Améliorer la communication entre les spécialités 8211 Améliorer la coordination implicite entre les spécialités 8211 Recruter des individus avec plus Expertise pour écrire et réviser le code Un facteur majeur qui a limité l'amélioration de la capacité de l'équipe de neuf ans avant l'événement de défaillance significatif a été mal caractériser le système. Dans un cadre Cynefin, confiner cette défaillance à un problème DevOps est d'associer le système avec le domaine 8220Obvious8221 où il ya des relations de cause à effet simples qui sont reconnaissables par 8216professionals.8217 L'échec ne doit pas être associée au domaine Cynefin 8220Complicated8221 où une analyse significative Par 8216specialists8217 aurait empêché l'échec. Le système doit être associé au domaine 8257Complex8221 de Cynefin 8211, un système adaptatif complexe. Le système est dispositionnel. Les mêmes conditions initiales ne produiront pas la même défaillance (sauf par accident). Pour plus d'informations sur Cynefin, visitez en. wikipedia. orgwikiCynefin et CognitiveEdge. J'apprécie que vous souligniez les facteurs tacites dans une telle catastrophe. Comme l'auteur, je travaille aussi dans les opérations, et il est facile de tomber dans les mêmes vieux modèles de pensée sur les causes et les solutions. J'apprécie particulièrement votre point de vue sur la diversité (qui se présente sous toutes les formes: niveau d'expérience, niveau culturel et pédagogique, compétences, âge, etc.), car je pense que c'est le moteur du succès de DevOps lui-même. Ayant une variété de perspectives, à la fois dans et sans votre équipe, en regardant votre projet a forte, le potentiel démontrable et peut aider à freiner les oublis tels que celui soulevé dans cet article. Gt pourquoi le code qui avait été mort pour 8 ans était encore présent dans la base de code est un mystère, mais thats pas le point Au contraire, that8217s exactement le point. Code avec des possibilités de configuration non utilisées et donc non testées est un désastre qui attend. C'est pourquoi I8217m est très sceptique quant aux approches basées sur le drapeau caractéristique. La configuration fait partie de votre programme comme le code est, et les changements de configuration doivent passer par le même cycle de vie 8211 demande de traction, examen de code, la libération, le déploiement à l'étagement 8211 comme toute autre modification. Si votre processus de libération est trop lourd et que vous devez apporter des modifications rapides à la production, corrigez votre processus de validation. Il y avait trop d'erreurs pour attribuer l'échec épique à Just DevOps (bien que je suis entièrement d'accord que l'automatisation et les tests est le seul moyen): 8211 Pas de travail d'équipe et des listes de contrôle tout en faisant une mise à jour sur les serveurs de production. Toute mise à jour sur la production doit exiger une équipe de surveiller les uns les autres, et en passant par une liste de contrôle. 8211 8 ans d'ancien code inutilisé en production. Cela vous dit beaucoup sur le manque de compréhension des risques de dangling 8220unused8221 code. 8211 Journalisation insuffisante du code et surveillance insuffisante du journal en temps réel, corrélation et analyse. Cela aurait déclenché assez d'indices tôt un aux ingénieurs et aux gens d'ops. 8211 Pas de basculement hot-hot vers un cluster avec la version précédente. Cela aurait arrêté toutes les questions après 1 ou 2 minutes. Si vous avez également été l'architecture des logiciels, des systèmes et des entreprises pendant une longue période, vous savez catastrophe se produit, vous savez que certains bugs ne sont capturés dans la nature et pas pendant les simulations, tout comme vous Savoir machines vont descendre. Vous devez vous préparer au pire des cas dans les deux scénarios. Murphy8217s La loi est si vrai dans notre monde I8217ve été dans ce qui est maintenant appelé l'espace 8220DevOps8221 pendant près de 20 ans, plus de la moitié de celui dans le monde financier. Knight était à la fois vendeur et concurrent de la société pour laquelle je travaille actuellement. L'automatisation du déploiement aurait pu vous aider. Peut être. Mais peu d'entreprises peuvent se permettre des environnements exactement dupliqués, et cela est essentiellement dû à des différences environnementales. Même la validation automatisée du déploiement n'aurait peut-être pas aidé dans ce cas si l'automation ne connaissait pas la différence environnementale. L'automatisation est seulement aussi bonne que la connaissance des gens qui la mettent en place. Si une installation manuelle n'était pas au courant de l'ancien système, alors il ya une bonne chance que le système automatisé n'aurait pas su vérifier non plus. L'automatisation d'un rollback n'est pas aussi bonne que la prise de décision quant à savoir si le roll back doit être effectué. Et si l'automatisation a par inadvertance démarré l'ancien système, il n'y a pas non plus de garantie que la commutation du système contemporain aurait arrêté l'ancien système 8211, vous pourriez avoir fini avec le même problème, même après un recul automatisé du système contemporain. Ce qui m'amène à un point final: L'automatisation est une exigence dans les grands, les environnements modernes. Mais une trop grande dépendance à cet égard peut conduire à ce que les personnes qui exploitent le système ignorent ce qu'elles font. L'automatisation est la plus utile pour les validations, car la validation des choses est effectuée correctement est fastidieuse et facile à minimiser lorsqu'elle est effectuée manuellement. Même lorsque l'automatisation, la mise en place de points d'arrêt impliquant des personnes ou des étapes guidées par l'homme, aident les opérateurs à connaître le système et son fonctionnement, améliorant considérablement leur capacité à résoudre les problèmes, à diagnostiquer les problèmes et à faire des suggestions appropriées sur les étapes à suivre. Arrêter ou atténuer un problème. L'automatisation est un outil, mais il ne s'agit que d'un seul outil et il lui faut encore un artisan pour le manipuler de façon appropriée. L'expertise est ce qui fait et maintient grands systèmes grands. Reblogué ceci sur Garrett S. Y. Hampton et commenté: Incroyable. Il a commencé dans un magasin d'un armurier connu pour des milles autour comme un maître artisan, un inventeur, et un huntsman qui a eu le temps de voir, documenter et examiner vos déploiements. Traînaient les champs pendant des décennies. Il s'appelait Tony Knight et, dans son atelier du comté de Putnam, dans le Missouri, il écoutait les histoires de chasseurs qui utilisaient leurs fusils à ballots. Il a étudié l'histoire, les forces et les problèmes de la chargeuse frontale, depuis les fermoirs les plus primitifs jusqu'aux chargeurs de bouche d'aujourd'hui. Ces fusils avaient changé peu dans plus d'un siècle, l'incitant à aller travailler créant un chargeur muzzle vraiment moderne. En conséquence, Knight Rifles est né. En quelques années, ce qui a commencé comme une vision a conduit à la plus fine, plus sûre et plus polyvalente fusil en poudre noire jamais forgée. Un chargeur de bouche manuel léger et léger qui surpasse tous les autres en termes de précision, de fonctionnement en douceur et d'une puissance d'arrêt mortelle en aval. Un baril et un système de tir capable de livrer toute forme de munitions à sa cible avec une fiabilité impressionnante et une précision mortelle. Cela reste vrai aujourd'hui, car les fusils de chevalier continuent d'être les meilleurs dans tous les aspects, à tous les niveaux. Riche d'histoire et de performance, nous créons l'avenir de muzzleloading basé sur la base solide posée par ceux qui sont venus avant nous. Dans les années à venir, vous pouvez vous attendre à ce que le meilleur de Knight Muzzleloaders. Field Stream Ampère ajoute le chevalier MK-85 aux 50 meilleurs pistolets jamais fait liste Tony Knight est un autre armurier du pays qui a changé la façon dont les choses sont faites. En 1985, il a construit un chargeur avec le mamelon à l'arrière du canon, directement derrière la charge de poudre au lieu de côté. Cela a rendu l'allumage beaucoup plus fiable et a commencé la Grande Révolution de la Poudre Noire, ce qui a abouti à des chargeurs de bouche qui sont pratiquement aussi précis, fiable et rapide à charger que les bras de tir de cartouches. Tout cela conduit les traditionalistes fous. Mais les chasseurs ordinaires l'adorent. 8211 Field amp Stream En vedette Muzzleloaders Knight Rifles sur le Web
No comments:
Post a Comment