Was ist dein größter SQL server Fehler oder peinlicher Vorfall?

Du kennst den, von dem ich rede.

Wir sind alle irgendwann dort gewesen. Sie bekommen dieses schreckliche Gefühl der Angst und die Verwirklichung von oh mein Gott tat das eigentlich nur passieren.

Sicher können Sie darüber lachen, aber, richtig, so weiter und teilen Sie Ihre SQL server Pannen mit uns.

Noch besser, wenn Sie detaillieren können, wie Sie Ihr Problem getriggers haben, damit wir aus unseren Fehlern gemeinsam lernen können.

Also, um den Ball ins Rollen zu bringen, gehe ich zuerst …… ..

Es war wieder in meinen frühen Jahren als Junior SQL server Guru. Ich war rund um Enterprise Manager, die Durchführung ein paar admin Aufgaben. Sie wissen, wie es ist, überprüfen ein paar Protokolle, sicherzustellen, dass die Backups ordnungsgemäß lief, eine kleine database Housekeeping, ziemlich viel über Business auf Autopilot und schlagen die Enter-button auf die üblichen Aufforderungen, die Pop-up.

Oh warte, war das ein "Bist du sicher, dass du diesen Tisch löschen willst". Zu spät!

Nur um für irgendwelche aufstrebenden DBA da draußen zu bestätigen, das Löschen einer Produktionstabelle ist eine sehr sehr schlechte Sache!

Unnötig zu sagen, ein Weltrekord wurde sofort für die schnellste database wiederherstellen, um eine neue database, schnell gefolgt von einer Tabelle Migration, oh yeah. Alle anderen waren natürlich nicht klüger, aber immer noch eine wertvolle Lektion gelernt. Konzentrieren!

Ich vermute, jeder hat die WHERE-Klausel aus einem DELETE oder UPDATE irgendwann verpasst …

Eingefüllte 5 Millionen Testpersonen in eine Produktionsdatenbank. Der größte Fehler meiner Meinung nach war, dass ich Schreibzugriff auf die Produktion db in den ersten Platz haben würde. : P Schlechtes dba!

Mein größter SQL server-Fehler war davon ausgegangen, dass es so fähig war wie Oracle, wenn es um concurrency kam.

Lassen Sie mich erklären.

Wenn es um die Transaktionsisolationsebene in SQL server geht, haben Sie zwei Möglichkeiten:

  1. Dirty liest: transactions können nicht gebundene data (von anderen transactions) sehen; oder
  2. Wählt Block auf nicht gebundenen Updates aus.

Ich glaube, diese kommen aus ANSI SQL.

(2) ist die Standardisolationsstufe und (imho) das kleinere von zwei Übeln. Aber es ist ein großes Problem für jeden langwierigen process. Ich musste eine Batch-Last von data machen und konnte es nur aus Stunden machen, weil es die Website getötet hat, während es läuft (es dauerte 10-20 Minuten, da es eine halbe Million datasätze einfügte).

Oracle auf der anderen Seite hat MVCC. Dies bedeutet im Grunde, dass jede Transaktion eine konsistente Sicht auf die data sieht. Sie sehen keine ungebundenen data (es sei denn, Sie setzen die Isolationsstufe, um das zu tun). Sie blockieren auch nicht auf ungebundene transactions (ich war auf der Idee, dass eine angeblich Unternehmensdatenbank dies für eine gleichzeitige Einschätzung akzeptieren würde, betäubt).

Es genügt zu sagen, es war eine Lernerfahrung.

Und ya knkow was? Auch MySQL hat MVCC.

Ich habe alle Preise auf Null auf einer High-Volume, Produktion, eCommerce Website geändert. Ich musste die Seite ablegen und die DB aus dem Backup wiederherstellen .. SEHR HÄSSLICH.

Zum Glück war das vor langer time ein LOOONG.

Vergessen, die WHERE-Klausel beim Aktualisieren oder Löschen zu markieren

Scripting-Procs und checking drop abhängige objecte zuerst und läuft dies auf Produktion

Ich arbeite an dem Zahlungssystem auf einem großen Online-Geschäft. Multi-Millionen-Euro-Geschäft.

  • Holen Sie sich ein Skript von einem Kollegen mit ein paar kleinen Updates.
  • Führen Sie es auf Produktion.
  • Erhalten Sie einen Fehlerbericht 30 Minuten später von Helpdesk, Beschwerde über keine Einkäufe letzten 30 Minuten.
  • Entdecken Sie, dass alle Verbindungen auf einem Tischsperre warten, um freigegeben zu werden
  • Entdecken Sie, dass das Skript von meinem Kollegen mit einer expliziten BEGIN TRANSACTION begonnen hat und erwartet, dass ich manuell COMMIT TRANSACTION am Ende manuell eingeben muss.
  • Erklären Sie dem Chef, warum 30 Minuten Umsatz verloren gingen.
  • Tadeln Sie mich dafür, dass Sie die Skriptdokumentation nicht richtig lesen.

Starten einer Wiederherstellung von der letzten Woche auf eine Produktionsinstanz statt der Entwicklungsinstanz. Kein guter morgen

Zum Glück machen wir immer nur einen Cock-up, bevor Sie erkennen, dass mit transactions wirklich sehr, sehr trivial ist. Ich habe Tausende von Aufzeichnungen über Unfall vor, glücklicherweise Roll-back ist da …

Wenn du die Live-Umgebung abfragt, ohne deine Skripte gründlich getestet zu haben, dann denke ich, dass Peinlichkeit wirklich tollkühn oder vielleicht unprofessionell sein sollte.

Ich habe gesehen, dass viele andere Leute eine WHERE Klausel vermissen.

Myself, ich WHERE immer die WHERE Klausel zuerst und gehe dann zurück zum Anfang der Zeile und tippe den Rest der Abfrage ein 🙂

Einer meiner Favoriten geschah in einem automatisierten Import, wenn der Client die datastruktur geändert hat, ohne uns zuerst zu sagen. Die Spalte der Sozialversicherungsnummer und die Geldmenge, die wir bezahlen sollten, wurde umgestellt. Zum Glück haben wir es gefunden, bevor das System versuchte, jemand seine Sozialversicherungsnummer zu bezahlen. Wir haben jetzt Checks in automatisierte Importe, die nach lustigen data suchen, bevor sie laufen und es aufhören, wenn die data ungerade erscheinen.

Wie zabzonk sagte, vergaß die WHERE-Klausel auf ein Update oder zwei in meinem Tag.

Wir hatten eine alte Anwendung, die nicht mit der Synchronisation mit unserer HR-database für Namensaktualisierungen sehr effizient umgeht, vor allem wegen der Art, wie sie sich an Änderungen an Titeln verkürzten. Jedenfalls hat eine gewisse Frau geheiratet, und ich musste eine databaseänderungsanfrage schreiben, um ihren Nachnamen zu aktualisieren, ich habe die Wo-Klausel vergessen und jeder in dem Namen der Anwendung war jetzt Allison Smith.

Spalten sind nullable, und Parameterwerte können die korrekte Information nicht abrufen …

Der größte Fehler gab den Entwicklern den "Schreibzugriff" auf die Produktions-DB. Viele DEV- und TEST-Aufzeichnungen wurden eingefügt / überschrieben und zu produktioniert, bis es klug vorgeschlagen wurde (von mir!), Um nur Lesezugriff zuzulassen!

sorting von SQL-server bezogen. Ich erinnere mich daran, darüber nachzudenken, wie wichtig es ist, immer einen SqlDataReader zu entsorgen. Ich hatte ein System, das in der Entwicklung gut funktionierte und random gegen die ERP-database läuft. In der Produktion brachte es die database herunter, weil ich davon ausgegangen war, dass es genug war, um SqlConnection zu schließen, und hatte Hunderte, wenn nicht Tausende von offenen Verbindungen.

Zu Beginn meines Co-op-Begriffs endete ich den Zugang zu allen, die dieses System benutzten (das von vielen Anwendungen in meiner Provinz verwendet wurde). In meiner Verteidigung war ich neu bei SQL server Management Studio und wusste nicht, dass man 'Tafeln' öffnen und bestimmte Einträge mit einer SQL-statement bearbeiten konnte.

Ich habe den Benutzerzugriff mit einer einfachen UPDATE-statement abgelaufen (der Zugriff auf diese Anwendung wurde durch ein Benutzerkonto auf der SQL-Box sowie einen bestimmten Eintrag in einer Zugriffstabelle gegeben), aber als ich diese markante Aussage hervorgehoben und ausgeführt habe, Ich habe die WHERE-Klausel nicht aufgenommen.

Ein häufiger Fehler, den mir gesagt wird. Die schnelle Lösung war unexpire everyones Konten (einschließlich Konten, die abgelaufen sein sollten), bis die database gesichert werden konnte. Jetzt öffne ich entweder Tabellen und wähle bestimmte Einträge mit SQL oder ich wickle absolut alles in einer Transaktion, gefolgt von einem sofortigen Rollback.

Unser IT Ops hat sich entschlossen, auf SQL 2005 von SQL 2000 zu aktualisieren.

Am nächsten Montag haben die Benutzer gefragt, warum ihre App nicht funktioniert hat. Fehler wie:

DTS nicht gefunden usw.

Dies führt zu einem schönen Satz von 3 samstags im büro umbau die pakete in SSIS mit einem guten überstunden paket 🙂

Nicht genau ein "Fehler" aber zurück, als ich zum ersten Mal PHP und MYSQL lernte, würde ich Stunden täglich verbringen und versuche herauszufinden, warum mein Code nicht funktioniert hat, ohne zu wissen, dass ich das falsche Passwort / Benutzername / Host / database Anmeldeinformationen hatte meine SQL-database. Du kannst nicht glauben, wieviel time ich damals verschwendet habe, und um es noch schlimmer zu machen, war dies kein einmaliger Zwischenfall. Aber LOL, es ist alles gut, es baut Charakter.

Ich einmal, und nur einmal, tippte etwas ähnliches wie folgt:

 psql> UPDATE big_table SET foo=0; WHERE bar=123 

Ich habe es geschafft, den Fehler ziemlich schnell zu beheben. Seitdem und einem anderen Fehler fängst meine Updates immer als:

 psql> UPDATE table SET WHERE foo='bar'; 

Viel einfacher zu vermeiden Fehler auf diese Weise.

Ich arbeitete mit einem Junior-Entwickler einmal, die verwirrt wurde und "Drop" anstelle von "Delete" auf einem Tisch genannt.

Es war eine lange Nacht, um das Backup wiederherzustellen …

Bearbeiten: Ich hätte schon erwähnt, das war in einer Produktionsumgebung, und der Tisch war voller data …

Dies war vor den Tagen, an denen Google helfen konnte. Ich habe dieses Problem nicht mit SQL server, aber mit seinem hässlichen älteren Cousin Sybase.

Ich habe ein Tabellenschema in einer Produktionsumgebung aktualisiert. Es versteht sich nicht zu der time, dass gespeicherte Prozeduren, die SELECT * verwenden, neu kompiliert werden müssen, um neue Felder aufzunehmen, fuhr ich fort, die nächsten acht Stunden zu verbringen, um herauszufinden, warum die gespeicherte Prozedur, die ein Schlüsselstück der Arbeit ausführte, fehlte. Erst nach einem server-Neustart habe ich angemerkt.

Verlieren Tausende von Dollar und Hunderte von (Endbenutzer) Mann-Stunden auf Ihrem Flaggschiff Kunden-Website ist eine pädagogische Erfahrung. Sehr empfehlenswert!!

Eine gesunde Menge von Jahren arbeitete ich an einer Kunden-Website, die ein schönes Skript hatte, um die dev Umgebung aller Aufträge, Karren und Kunden zu löschen. Um das Testen zu erleichtern, also habe ich natürlich das verdammte Skript auf dem Produktionen server Abfrage-Analysator und lief es.

Nahm 5-6 Minuten, um zu laufen, war ich huschen, wie langsam der Dev-server war, bis die Anzahl der gelöschten Zeilen kam. 🙂

Glücklicherweise hatte ich gerade ein komplettes Backup geführt, seit ich eine Installation machen wollte.

Jenseits der typischen wo Klausel Fehler. Ran einen Tropfen auf eine falsche DB und musste also eine Wiederherstellung durchführen. Jetzt verdreifle ich meinen servernamen. Zum Glück hatte ich eine gute Unterstützung.

Ich stelle den maximalen server-memory auf 0. Ich dachte an die time, die automatisch sagen würde SQL-server, um alle verfügbaren memory (Es war früh). Kein solches Glück SQL-server beschlossen, nur 16 MB zu verwenden und ich musste im Einzelbenutzermodus verbinden, um die Einstellung wieder zu ändern.

Hit "Restore" anstelle von "Backup" in Management Studio.