Ich habe gerade gelernt, dass das Trennen der Verbindung zu einem Server im Objekt-Explorer Sie nicht daran hindert, Abfragefenster auszuführen, die auf diesem Server bereits geöffnet waren.
Meine Situation sieht folgendermaßen aus: Ich verwende eine Instanz von SSMS, um eine Verbindung zu unserem Entwicklungs- / Staging-Server und zu unserem Produktionsserver herzustellen. Ich musste eine Reihe von Daten auf dev löschen, damit ich dachte, ich sollte meine Verbindung zur Produktion schließen, aber ich habe nicht auf das Abfragefenster geachtet, das ich verwendete. (Zum Glück hatten wir ein Backup von nur ein paar Stunden.)
Ich bin nicht der Erste, der Produktionsdaten zerstört, und ich bin nicht der Letzte, dessen ich mir sicher bin. Daher suche ich nach Checklisten, Best Practices usw., mit denen Sie das Risiko minimieren können, dass Abfragen in der falschen Datenbank ausgeführt werden. Ist Ihnen das schon einmal passiert, und wie haben Sie Ihren Workflow angepasst, um dies zu vermeiden?
quelle
Antworten:
Eine Sache, die ich in SSMS gerne mache, ist die Verwendung von benutzerdefinierten Farben beim Herstellen einer Verbindung zur Datenbank. Sie wählen also ein schönes helles Rot für Live-Datenbanken und ein sanftes Blau oder Grün für Entwickler- oder Testsysteme. Früher habe ich das eingebaute SSMS verwendet, heutzutage bevorzuge ich die SSMS Tools Addon-Farbcodierung.
Oder wie folgt für SSMS Tools (Ein wirklich nettes Addon, und ich finde die Farbe besser, wenn sie oben ist, anstatt unten wie die eingebaute)
quelle
Je nachdem , wen man fragt, wird es ein wenig mehr Arbeit erfordern, aber ich habe die Gewohnheit , immer die folgenden Anweisung für alle Produktions- oder Vorproduktion Abfragefenster, und für alle
UPDATE
,DELETE
undINSERT
Aussagen in allen Umgebungen.Wenn ich das sehe, werde ich sofort wissen, "Ups, das Abfragefenster war noch verbunden" oder "Oh Mist, ich habe automatisch etwas getan, was ich nicht haben sollte" - und ja, Sie können die Datenbank im Objekt-Explorer schließen, aber ein Abfragefenster kann weiterhin verbunden werden. Meiner Meinung nach sollten alle Produktionsabfragen hervorgehoben und mit ausgeführt werden
BEGIN TRAN
. Ein versehentliches F5 auf alles, sollte alles zurückrollen, nichtCOMMIT
. Dies zwingt den Benutzer, sich seiner Handlungen bewusst zu werden. Ähnlich wie das Aufnehmen eines Fotos von jeder Mahlzeit, die Sie essen, hilft Ihnen beim Abnehmen, da Sie innehalten und überlegen müssen, was Sie tun.Dauert das länger? Ja. Stoppt es 100% der Fehler? Ja, denn es wird nie etwas festgeschrieben, es sei denn, ich erzwinge manuell das
COMMIT
Schreiben des Postens, was mich aufgrund der Natur des Postens gezwungen hat, das zu berücksichtigenCOMMIT
.quelle
Erstellen Sie ein zweites Benutzerkonto für Produktionsänderungen und widerrufen Sie den Zugriff, den Ihr Konto derzeit hat. Wenn Sie in der Produktion arbeiten möchten, können Sie ssms als zweiten Benutzer ausführen.
EDIT: Dies wäre nur bei Domain-Logins von Vorteil. Wenn Sie zwei separate Domänenkonten hätten, wären Sie gezwungen, separate Instanzen von SSMS für DEV und PROD zu haben. Wenn Sie keine Domain-Konten verwenden, hilft Ihnen dieser Vorschlag nicht wirklich weiter.
Wenn Sie separate Domänenkonten verwenden, können Sie auch die SSMS-Farbeinstellungen pro Benutzer anpassen. Möglicherweise hat das Konto, das eine Verbindung zu PROD herstellt, einen leuchtend roten Hintergrund.
Dies ist auch ein gutes Whitepaper : http://download.microsoft.com/download/D/2/D/D2D931E9-B6B5-4E3B-B0AF-22C749F9BB7E/SQL_Server_Separation_of_Duties_White_Paper_Jul2011.docx
Es werden Dinge besprochen, wie beispielsweise, Ihrem täglichen Anmeldekonto keinen vollständigen SA-Zugriff zu gewähren.
quelle
Schauen Sie sich mein Add-In an: SSMSBoost. Es hat genau das, was Sie brauchen. Ich habe die Farbfunktion der SSMS-Statusleiste verbessert, sodass sie Ihre aktuelle Datenbank nachverfolgt und ihre Farbe ändert. Zusätzlich können Sie den schwebenden Tooltip "Wichtige DB-Warnung" hinzufügen:
Weitere Informationen zu dieser Funktion finden Sie hier: http://www.ssmsboost.com/Features/ssms-add-in-preferred-connections
quelle
In einem meiner Jobs haben wir dafür ein Tool entwickelt.
Wenn Sie eine Anweisung zu PROD ausführen wollten, mussten Sie Folgendes schreiben:
run_sql servername PROD <file_with_sqlstatements>.sql
Es würde die Ergebnisse in eine Protokolldatei schreiben und die Ausführung in ein Protokoll in unserer Verwaltungsdatenbank einfügen. Es war zum Beispiel sehr praktisch, wenn wir herausfinden wollten, wer als letzter einen bestimmten Tisch gewechselt hat.
Wenn Sie in SSMS Server registriert haben, können Sie einer Verbindung eine bestimmte Farbe zuweisen, sodass beispielsweise alle PROD-Verbindungen unten eine rote Farbe haben. Verwenden Sie GUI-Tools jedoch möglichst nicht auf einem Produktionsserver.
quelle
Nur noch zwei Tipps, da ich hier schon nichts Ähnliches sehe:
In meinem Workflow arbeite ich oft mit mehreren Anweisungen in einem einzigen Fenster und bin es gewohnt, Text auszuwählen und dann auszuführen. Aber ich habe immer Angst, versehentlich F5 zu drücken, wenn kein Text ausgewählt ist, und als Ergebnis alle Anweisungen in einem Fenster auszuführen. Jedes Mal, wenn ich ein neues Fenster öffne, beginne ich mit der Eingabe von Garbage SQL, das sich nicht kompilieren lässt. Dies macht den gesamten Stapel effektiv nicht ausführbar. (Achtung! Wenn Sie mehrere durch getrennte
GO
Stapel verwenden, ist pro Stapel Müll erforderlich.)Bei Datenänderungen auf dem Produktionsserver (oder wenn ich äußerste Sorgfalt benötige) sind implizite Transaktionen sehr nützlich (entweder Sie
SET IMPLICIT_TRANSACTIONS ON
oder Sie ändern eine Option in SSMS, sodass die Option für jedes neue Fenster wirksam wird). Auf diese Weise startet jede Anweisung, die nicht in der Transaktion ist, eine neue Transaktion. Ich verpflichte mich nur, wenn ich zweimal sicher bin, dass ich das getan habe, was ich beabsichtigt hatte.quelle
Verwenden Sie einen separaten Windows-Benutzer, der als einziger die Produktionsdatenbank konfiguriert hat. Setzen Sie das gesamte Farbschema dieses Benutzers auf Rot. Bei schnellem Benutzerwechsel sollte dies kein Problem sein.
Verwenden Sie die Produktionsanmeldeinformationen niemals in einem Konto, das sich auf einem Entwicklungscomputer befindet. Eine kurze Telefon- oder Mitarbeiterfrage und danach löschen Sie gerne alles für Ihren neuen Testlauf ...
Eine andere Option (dieselbe Idee) ist die Verwendung eines Remote-Desktops oder einer virtuellen Maschine mit einem anderen Thema.
quelle
Eine andere Möglichkeit, die Ausführung aller Elemente im Abfragefenster zu verhindern, wenn F5 gedrückt wird, besteht darin, den gesamten Inhalt mit / * und * / zu umgeben und so das Ganze zu einem Kommentar zu machen.
Sie können die gewünschten Anweisungen weiterhin ausführen, indem Sie sie markieren und wie gewohnt F5 drücken, obwohl sie in einem Kommentar enthalten sind.
Hinweis: Wenn Sie diese Methode wählen, können Sie die Syntaxhervorhebung oder die automatische Vervollständigung nicht nutzen. Wenn Sie diese Funktionen jedoch nicht so häufig verwenden, ist es möglicherweise sinnvoll, sie zu opfern, um sicherzustellen, dass sie zu 100% unbeschädigt sind die Datenbank mit einem versehentlichen F5.
Bearbeiten: Sie können / * * / auch nicht im gesamten Abfragefenster verwenden, da Sie sonst versehentlich nachfolgenden Code auskommentieren. Halten Sie sich stattdessen an die - -Notation.
quelle
In Übereinstimmung mit dem Kommentar von swasheck zur ursprünglichen Frage, wie wäre es mit der Ausführung ...
Wählen Sie @@ Servername + '\' + @@ Servername
... bevor Sie eine DML ausführen oder in der Statusleiste nachsehen, mit welcher Instanz Sie verbunden sind, oder sogar die gesamte DML in einer Transaktion ausführen, damit Sie ein Rollback durchführen können, wenn Sie feststellen, dass Sie einen Fehler gemacht haben? Viele großartige Vorschläge, aber im Grunde werden Gimmicks, wenn es um potenziell destruktives DML geht, Sie nur so weit bringen. Ich überprüfe, überprüfe und überprüfe immer wieder. Und wenn ich mit einer kleinen Datenmenge zu tun habe, kann ich sogar vor der DML IN eine neue Tabelle AUSWÄHLEN, meine DML ausführen, einige Vergleiche durchführen, um sicherzustellen, dass die Dinge richtig funktionierten, und dann die "Backup" -Tabelle löschen. Arbeite schlauer, nicht härter.
quelle