Sollten Entwickler LocalDB gegen eine "Entwicklungs" -Instanz verwenden dürfen?

9

Ähnlich wie die Ader der Frage, die hier zuvor unter " Sollten Entwickler in der Lage sein, Produktionsdatenbanken abzufragen? " Gestellt wurde, wollte ich Ihre Gedanken zu einem anderen besonders nervigen Thema einholen!

Viele Unternehmen verhindern, dass Entwickler SQL Server Express und dergleichen auf Entwicklungsmaschinen installieren, und fördern stattdessen die Verwendung zentraler Entwicklungs-SQL Server.

Dies geschieht insbesondere, um Folgendes sicherzustellen:

  • Konsistenz auf Patch-Ebene zwischen Entwicklungsservern und Produktion
  • Fähigkeit, alle oben genannten Patches zu beweisen und zu validieren
  • Datensicherheit; Für die Entwicklung werden nur Daten auf den Entwicklungsservern verwendet
  • Wiederherstellbarkeit; Daten können wiederhergestellt und trotzdem gesichert werden
  • Sortierunterschiede, die bei der Verlagerung in die Produktion Probleme verursachen können

Für mich sind alle diese Argumente besonders ungültig, vielleicht mit Ausnahme der Patching-Argumente. Wenn eine Datenbank auf einem lokalen Computer jedoch nur für Entwicklungsaktivitäten und nicht zum Testen verwendet wird, wird das Patchen bewiesen, wenn eine Anwendung über Test / UAT usw. in die Produktion übergeht.

Die Sortierung scheint kein gültiger Grund zu sein, als ob dies ein Problem für die Datenbank wäre. Sie sollte festgelegt werden, wenn sie trotzdem erstellt wird. Soweit ich weiß, haben nur SharePoint und SCCM Probleme damit;)

Angenommen, es ist NUR für die Entwicklung bestimmt und die Datenbank wird nicht in die Produktion "verschoben". Die einzigen Bewegungen wären:

  • Skripte, mit denen die Datenbank erstellt wurde, die für die Bereitstellung in der Produktion generiert wird
  • Backups von "Produktions" -Systemen von Drittanbietern werden wiederhergestellt und gegebenenfalls zur Validierung und Entwicklung abgeschnitten

Kann jemand irgendwelche Probleme sehen? Vermisse ich etwas

Ich denke, eines der größten Probleme wäre die Möglichkeit, dass lokale Datenbankinstanzen nicht mehr aktuell sind, aber das ist ein Softwareverwaltungsproblem, kein DBA-IMO.

Andy Neillans
quelle
1
Warum vs? Warum lassen Sie sie nicht beide haben? Möglicherweise müssen sie jemanden testen.
Paparazzo

Antworten:

4

Ja. Alle Entwickler sollten eine lokale Instanz von SQL Server UND eine gemeinsam genutzte SQL Server-Instanz haben. Sie existieren für verschiedene Zwecke. Beides wird benötigt.


Vielleicht sieht Ihre aktuelle Umgebung so aus?

Legacy Shared SQL Server-Entwicklung

Oben erstellen mehrere Entwickler Änderungen und stellen sie in einer gemeinsamen SQL Developer-Datenbank bereit. Das ist schlecht. Microsoft MVP Troy Jagd dokumentiert einige der schmerz Punkte dieser veralteten Ansatz, hier . Die primären sind ...

  1. Unfähigkeit zur angemessenen Quellcodeverwaltung. GROSS!
  2. Unfähigkeit zur Leistungsoptimierung ohne Rechte auf Serverebene.
  3. Unfähigkeit zu experimentieren, ohne andere zu beeinflussen.

Dieses Muster verursacht Entwicklerkonflikte. Ein Symptom des Konflikts ist die Datenbankausbreitung. Viele Datenbanken werden erstellt, wenn Entwickler nach einem sicheren, isolierten Speicherplatz für ihre Arbeit suchen. Es gibt mehrere Gründe, warum die Organisation an diesem Muster festhält. Das erste ist, dass sie nicht in ein geeignetes Versionsverwaltungssystem investiert haben . Ein weiterer Grund ist, dass sie dieses Designmuster einfach geerbt haben und sich nicht die Mühe machen, es zu ändern. Microsoft ist stetig von diesem Muster weg und in etwas Ähnliches marschiert ...

Geben Sie hier die Bildbeschreibung ein

In der obigen Abbildung verwendet jeder Entwickler Visual Studio, um seine Datenbankänderungen in eine lokale Instanz von SQL Server zu schreiben und zu speichern. Diese lokalen Änderungen werden dann mit einem geeigneten Versionsverwaltungssystem synchronisiert. Hier kann jeder Entwickler in einer Umgebung entwerfen und experimentieren, in der seine Änderungen bis zum Einchecken keine Auswirkungen auf andere haben. Und zu diesem Zeitpunkt werden Konflikte gelöst.

Die oben verwendete lokale Datenbank kann eine LocalDB-, Express- oder Developer-Edition sein. Einfach-Talk hat eine große Aufgabe , die Vor- und Nachteile des jeweiligen Gewicht von hier . Es gibt einen Grund, warum Microsoft so viele Optionen für lokale Entwicklungsdatenbanken erstellt hat: LocalDB, Express, Developer. Wir sollten sie verwenden!

Wenn Sie sich entscheiden müssen, ist es schwer zu behaupten, dass auf jedem Entwickler eine lokale Version der SQL Server Developer Edition installiert ist. Es ist völlig kostenlos und hat Feature-Parität mit der Enterprise Edition. Damit kann Ihr gesamtes Team den gesamten Microsoft BI-Stack (SQL Server, SSIS, SSRS und SSAS) auf sichere Weise erkunden und entwerfen.

Wir können die kommunale Datenbank weiterhin behalten, aber sie sollte nicht zur Entwicklung, sondern zum Testen dienen. Es ist ein Server, auf dem Einstellungen auf Systemebene mit der Produktion synchronisiert sind. Hardware, Betriebssystem, Patches usw ..

Troy Witthoeft
quelle
6

Für mich sind all diese Argumente besonders ungültig

OK. Aber sie sind nicht für den Rest von uns. Warum?

Konsistenz auf Patch-Ebene zwischen Entwicklungsservern und Produktion

Das Patchen würde sich herausstellen, wenn eine Anwendung den Test durchlaufen hat

Durch das Patchen können Stabilitäts- und Datenkorruptionsprobleme behoben werden, die Entwickler sonst plagen würden. Dies sollte unabhängig davon auf Entwicklungsmaschinen erfolgen.

Datensicherheit; Für die Entwicklung werden nur Daten auf den Entwicklungsservern verwendet

Es ist nützlich, "was sein sollte" von "was ist" zu trennen. Entwickler haben vertrauliche (nicht unbedingt personenbezogene Daten, aber auch keine freien) Daten in ihren Datenbanken. Es passiert.

Wiederherstellbarkeit; Daten können wiederhergestellt und trotzdem gesichert werden

Super wichtig.

Sortierunterschiede, die bei der Verlagerung in die Produktion Probleme verursachen können

Nur SharePoint und SCCM haben Probleme damit

Alles, was eine temporäre Tabelle verwendet, hat dieses Problem. Es ist sehr häufig. Man merkt es nie, weil die meisten Leute sich überhaupt für eine Standardkollation entscheiden.

Vorausgesetzt, es ist NUR für die Entwicklung und die Datenbank wird nicht in die Produktion "verschoben"

Warum sollten wir das annehmen? Die Dinge gehen oft von der Entwicklung bis zur Produktion. Wie sonst wird die Produktion zum ersten Mal bevölkert? Reine Skripte? Nicht unbedingt, wenn sich die Anwendung seit einiger Zeit in der Vorproduktion befindet.

Ich denke, eines der größten Probleme wäre die Möglichkeit, dass lokale Datenbankinstanzen nicht mehr aktuell sind, aber das ist ein Softwareverwaltungsproblem, kein DBA-IMO.

Sie müssen lediglich eine Erklärung darüber abgeben, was Sie tun und was nicht und warum.

LocalDB ist jetzt ein zentraler Bestandteil von SSDT und unvermeidlich. Es ist jedoch nicht remote verfügbar und verfügt nicht über eine Planungskomponente (Express weist ähnliche Probleme auf). Daher wird es von DBAs in Bezug auf Sicherungen, Wartung und Integritätsprüfungen im Allgemeinen nicht unterstützt.

Die Konsolidierung auf zentralisierten Entwicklungsservern ist jedoch weiterhin sinnvoll. Und jetzt, da die Developer Edition kostenlos ist, ist es noch einfacher zu rechtfertigen, mehr davon zu haben.

Cody Konior
quelle
Großartige Erklärung @Cody Konior
Renato Afonso
3

Konzeptionell sind Sie auf dem richtigen Weg. Für ein Unternehmen mit einem ausgereiften Entwicklungsprozess / Software Development Life Cycle (SDLC), der Quellcodeverwaltung, kontinuierliche Integration (CI), automatisierte Tests und eine IT-Gruppe umfasst, die weiß, wie verschiedene Umgebungen und Workstations verwaltet werden, um sie synchron zu halten in Bezug auf Software und Patch-Level, und diszipliniert Entwickler , dass dem Prozess, b) zusammenarbeiten , um a) folgen, und c) die Arbeit mit IT, dann 50 (oder wie viele) kann DBs Entwicklung arbeiten:

  • Ja, konsistente Software- und Patch-Levels können auf einer beliebigen Anzahl von Workstations verwaltet werden.
  • Ja, alle "Probleme" können in automatisierten Test- und / oder QA / UAT-Umgebungen auftreten.
  • Viele Entwickler-DBs sind nicht so einfach zu sichern, aber auch nicht unmöglich. Wenn Sie Roaming-Profile verwenden, können die Datendateien im Ordner "Lokale Einstellungen" jedes Windows-Benutzers möglicherweise einfacher gesichert werden. Zumindest kann es von der IT per Skript erstellt werden, um Dateien von allen Entwicklungsarbeitsstationen abzurufen, ähnlich wie sie sicherstellen würden, dass alle ordnungsgemäß gepatcht werden.

ABER wie bei fast allem anderen kommt es wirklich auf den Kontext der Situation an.

Ein Vorteil separater Entwicklungs-DBs besteht darin, dass verschiedene Projekte gleichzeitig bearbeitet werden können, ohne sich gegenseitig zu beeinflussen. (Dies könnte natürlich der einzige Vorteil sein.)

Es sind jedoch verschiedene Aspekte zu berücksichtigen:

  • Wie groß ist das Team und wie viele Personen arbeiten an einem bestimmten Projekt? Je mehr Personen an einem Projekt arbeiten, desto mehr benötigen Sie einen gemeinsam genutzten / zentralisierten Entwicklungsserver, damit alle Änderungen erhalten.

  • In Bezug auf die Sortierung weist SQL Server Express LocalDB eine besonders ärgerliche Nuance / Einschränkung / Einschränkung auf:

    Die Instanzsortierung für LocalDB ist auf SQL_Latin1_General_CP1_CI_AS festgelegt und kann nicht geändert werden. Kollatierungen auf Datenbankebene, Spaltenebene und Ausdrucksebene werden normalerweise unterstützt. Enthaltene Datenbanken folgen den Metadaten- und Tempdb-Kollatierungsregeln, die durch Enthaltene Datenbankkollatierungen definiert sind .

    Die tempdbSortierung auf Instanzebene wirkt sich nicht nur auf die Auflösung von Objektnamen im Datenbankbereich und die Standardkollatierung für temporäre Tabellen, sondern nicht auf Tabellenvariablen aus, sondern auch auf lokale Variablennamen, Cursornamen / Parameternamen und gotoBeschriftungsnamen. Wenn Ihre Produktionsserver über eine SQL_Latin1_General_CP1_CI_ASSortierung auf Instanzebene verfügen , ist LocalDB daher keine gute Wahl.

  • Verwenden Sie Enterprise Edition-Funktionen? Wenn es nur darum geht, ONLINE-Index-Neuerstellungen durchzuführen, spielt das wahrscheinlich keine Rolle. Wenn Sie jedoch so etwas wie die Tabellenpartitionierung verwenden, ist LocalDB keine gute Wahl.

  • Das vielleicht größte Problem ist der insgesamt größere Umfang potenzieller Probleme, die sich aus Umgebungsunterschieden (Betriebssystemebene, Software-Patch-Ebene, Instanzkonfiguration, DB-Konfiguration usw.) ergeben und zu einem Fehler führen können. Obwohl wir bereits (im Allgemeinen) akzeptiert haben, dass automatisierte Tests / QS / UAT diese Probleme finden würden, ist dies nicht garantiert ! Da die Menschen Fehler machen und dass die Menschen müssen kommen mit all den Tests , die prüfen würde alle Code-Pfade und alle Variationen von Daten (Art, Größe, usw.), ist es sehr wahrscheinlich, dass eine beliebige Anzahl von Szenarien nichtgetestet werden und dass ein Fehler es schaffen könnte und erst bemerkt wird, wenn ein Kunde ihn in der Produktion findet. Dies geschieht trotzdem, aber die Chancen steigen, wenn LocalDB verwendet wird, sodass jeder Entwickler seine eigene private Datenbank haben kann.

Worauf es wirklich ankommt, ist: Was ist der zwingende Grund für die Verwendung in einer Teamumgebung? Über verschiedene Jobs hinweg habe ich immer in Gruppen gearbeitet, in denen es App-Entwickler und Datenbankingenieure gab, und während die App-Entwickler manchmal eine gespeicherte Prozedur verspotteten, um sie schneller zu erledigen (nicht genug von uns DBEs), haben die DBEs die meisten Aufgaben erledigt DB-Programmierung, einschließlich Überprüfung (dh Korrektur) von Code, den die App-Entwickler geschrieben haben. Die Verwendung von LocalDB hätte es viel schwieriger gemacht, in einer Gruppe zu arbeiten. Und während SQL Server Express (oder sogar Developer Edition) verwendet wurde, um persönliche Instanzen auf jeder Entwicklerarbeitsstation zu haben, auf die remote zugegriffen werden konnte - was die Zusammenarbeit erleichtert -, war diese Isolationsstufe nie wirklich erforderlich, da dies selten der Fall war DB-Änderungen für ein Projekt wirken sich negativ auf ein anderes aus.

Natürlich hatten diejenigen von uns, die Datenbankingenieure (DBEs) waren, lokale Installationen von Express Edition und / oder Developer Edition. Dies war jedoch ein Test, der mehr Kontrolle über Konfiguration / Sicherheit auf Instanzebene usw. erforderte, als auf einem gemeinsam genutzten Server zulässig war. Und ich habe die lokalen Instanzen gelegentlich verwendet, aber nicht besonders oft. Aber für meine persönlichen Projekte liebe ich LocalDB und benutze es ziemlich häufig.

Solomon Rutzky
quelle