Gespeicherte Prozeduren unter Versionskontrolle, Best Practice


15

Ich verwende derzeit Tortoise SVN zur Quellcodeverwaltung einer .NET-Webanwendung. Was wäre der beste Weg, um unsere gespeicherten SQL Server-Prozeduren in die Quellcodeverwaltung zu bringen? Ich verwende derzeit VS 2010 als Entwicklungsumgebung und verbinde mich mit SQL Server Data Tools (SSDT) ​​mit einer SQL Server 2008 R2-Datenbank außerhalb des Unternehmens.

In der Vergangenheit habe ich die Procs in einer .sql-Datei gespeichert und diese Dateien unter Versionskontrolle gehalten. Ich bin sicher, dass es einen effizienteren Weg geben muss? Gibt es eine Erweiterung, die ich auf VS2010, SSDT oder sogar SQL Server auf dem Produktionscomputer installieren kann?


2
Wenn Sie den SSDT-Projekttyp in Visual Studio verwenden, fügen Sie das Projekt der Quellcodeverwaltung hinzu. Das ist es.
Mark Storey-Smith

1
Bitte erläutern Sie Ihre Ziele. Suchen Sie nur nach einer Versionierung der Datenbankobjekte, oder versuchen Sie, diese auch als Bereitstellungsplattform zu verwenden?
Jon Seigel

Antworten:


14

Es gibt Tools wie dieses von Redgate , aber ich habe immer herausgefunden, dass es am besten ist, sie als SQL-Dateien zu speichern, vielleicht sogar in einem Datenbankprojekt (SSDT?) In Ihrer Lösung.

Dazu schlage ich folgende Richtlinien vor:

  • Nehmen Sie immer die SVN-Version als "aktuell" / "aktuell" an
  • Stellen Sie sicher, dass jedes Skript, das Sie ausführen, if exists then dropzu Beginn " " über ein geeignetes verfügt
  • Denken Sie daran, Ihre Berechtigungen, falls vorhanden, zu skripten

Sie können diese SQL-Dateien zunächst erstellen, indem Sie Skripte direkt aus SSMS erstellen, und Sie können SSMS so einstellen, dass alle Ihre " drop" und " create" sowie Ihre Berechtigungen per Skript ausgeführt werden .


Ich kannte den Typ des Datenbankprojekts nicht und habe gerade erst angefangen, SSDT zu untersuchen, aber das sieht vielversprechend aus. Ich habe mich für diese Lösung entschieden, da keine Abhängigkeit von Tools von Drittanbietern besteht und ich die .sql-Dateien problemlos in unserer aktuellen Quellcodeverwaltung ablegen kann.
QFDev

Erlauben Sie außerdem keine Rechte für Entwickler auf Produkten und solche mit Rechten, die nur über die Quellcodeverwaltung bereitgestellt werden.
HLGEM

3
Seien Sie vorsichtig, wenn Sie Tabellen / Ansichten ändern, auf die von anderen Ansichten / Prozessen verwiesen wird. Ich bin auf Situationen gestoßen, in denen die Ausgabe solcher abhängiger Ansichten beschädigt ist (Spaltentyp und Inhalt wurden verschoben, Namen jedoch nicht), weil ein Abfrageplan erneut verwendet wurde, ohne die vorherige Struktur erneut zu kompilieren. Eine sicherere Option ist "Wenn nicht vorhanden, Dummy erstellen", gefolgt von "Tabelle / Ansicht / Prozess ändern", da "Ändern" den sysdepends-Datensätzen folgt, um die Pläne nach Bedarf ungültig zu machen baumelnde Referenzen.
David Spillett

Der Kommentar von @DavidSpillett ist umso wichtiger, wenn Sie Auslöser in der Versionskontrolle haben, da drop + create auch bei Deadlock fehlschlagen kann. Dies sollte nicht mit create dummy + alter geschehen
James Z

4

Durch das Speichern der SQL-Dateien in der Quellcodeverwaltung können nur die SQL-Dateien gesteuert werden. Es kontrolliert weder die Änderungen der tatsächlichen Datenbankobjekte, noch verhindert es gleichzeitige Änderungen des gleichen Datenbankobjekts durch mehrere Benutzer (und ich denke, Sie möchten dies auch im Griff haben). Was wir verwenden, ist ein Drittanbieter-Tool ( ApexSQL-Version), wird es sowohl in SSMS als auch in VS integriert. Sie können wählen, ob Sie mit einer Datenbankversion des Objekts oder mit einer Versionsverwaltungsversion arbeiten möchten. Wenn Sie eine Datenbankversion bearbeiten, wird diese automatisch nur für Sie ausgecheckt, sodass sie von niemand anderem bearbeitet werden kann (Änderungen von verschiedenen Benutzern werden nicht zusammengeführt). Nur wenn Sie es erneut einchecken, können andere es ändern. Und Sie können Ihre SC-Version von der Version eines Live-Objekts unterscheiden (ich verwende diese, wenn ich für den Tag abreise und plane, die Änderungen abzuschließen und sie beim nächsten Mal zu testen).



3

Probieren Sie Ankhsvn aus , sehr empfehlenswert und kostenlos.

Von der Homepage:

AnkhSVN ist ein Subversion-Versionsverwaltungsanbieter für Microsoft Visual Studio 2005, 2008, 2010 und 2012 .

AnkhSVN bietet Apache ™ Subversion®-Quellcodeverwaltungsunterstützung für alle von Visual Studio unterstützten Projekttypen und ermöglicht es Ihnen, die gängigsten Versionskontrollvorgänge direkt in der Microsoft Visual Studio-IDE durchzuführen.

Das Dashboard "Anstehende Änderungen" bietet Ihnen einen einzigartigen Einblick in Ihren Entwicklungsprozess und einen einfachen Zugriff auf den Quellcode und die Funktionen zur Problemverwaltung. Die Integration von Deep Source Code Control (SCC) ermöglicht es Ihnen, sich auf die Entwicklung zu konzentrieren, während AnkhSVN alle Ihre Änderungen verfolgt und Ihnen die Tools zur Verfügung stellt, mit denen Sie Ihre spezifischen Anforderungen effektiv erfüllen können.


2

Ich habe sowohl das RedGate- als auch das Visual Studio-Datenbankprojekt ausprobiert und bevorzuge das Speichern der Datenbankdefinition im Datenbankprojekt. Sobald die Datenbank Teil der Lösung wird, können Sie Ihren bevorzugten Versionsverwaltungsanbieter verwenden. Die meisten haben eine hervorragende Visual Studio-Integration.

Mit den SSDT-Tools verfügen Sie über die 'neueste Version' der Datenbankdefinition, sodass Sie auf einfache Weise Schema-Vergleiche durchführen und Schema-Upgrade-Skripte generieren können.

Das Schema ist jedoch in der Regel nur ein Teil der Equasion. Im wirklichen Leben stellt sich heraus, dass Datenbanken bereits viele Daten enthalten. Und meine Benutzer werden eher enttäuscht, wenn sie es verlieren.

Sobald ich also die Version 1.0 herausgebracht habe, muss ich die Upgrade-Skripte warten. Manchmal enthalten diese nur Schemaänderungen, aber oft muss ich Standardeinstellungen basierend auf dem Inhalt einer anderen Tabelle erstellen, eine bestimmte Einschränkung aufheben, bis ich die Daten geimpft habe usw. Normalerweise führt ein einfaches Upgrade des Schemas nicht zu einer vollständigen Kürzung. Ich bevorzuge es, dieses Upgrade-Skript auch in einem separaten Ordner im Datenbankprojekt zu haben. Diese sehen normalerweise so aus: 'Upgrade von v1.0 auf v1.1'.

Meine Datenbanken haben immer eine Referenztabelle mit der aktuellen Versionsnummer, sodass ich inkompatible Upgrades blockieren kann. Die erste Anweisung in meinen Upgrade-Skripten überprüft die aktuelle Version und stellt fest, ob sie sich von den erwarteten unterscheidet.

Ein weiterer Vorteil der Datenbankprojekte besteht darin, dass unterschiedliche Datensätze basierend auf demselben Schema bereitgestellt werden können. Ich habe verschiedene Datensätze für die Entwicklung, das QA-Team, den Benutzerakzeptanztest und für automatisierte Integrationstests. Da ein Datenbankprojekt nur 1 Post-Deployment-Skript haben kann, besteht der Trick hier darin, ein neues Datenbankprojekt zu erstellen, das auf das 'Master'-Projekt verweist, und das benutzerdefinierte Dataset zum Teil der Post-Deployment-Prozesse dieses Projekts zu machen.

Das waren meine 2 Cent. Was auch immer Sie tun, es muss zu Ihnen und Ihrem Team passen und Sie hoffentlich bei den meisten der üblichen Aufgaben unterstützen.


0

Am Ende habe ich selbst ein Werkzeug geschrieben.

Es steht zum kostenlosen Download zur Verfügung - http://www.gitsql.net

Ich hoffe, es hilft anderen Menschen, die das gleiche Endziel erreichen wollen.

In diesem Artikel wird die Quellcodeverwaltung von SQL Server beschrieben. http://gitsql.net/documentation-04_SQL_Server_and_GIT

Ich habe versucht, es so einfach wie möglich zu machen. (3 Bildschirme)

  • Stellen Sie eine Verbindung zu SQL Server her
  • Objekte auswählen
  • Wählen Sie einen Ordner zum Exportieren nach / Importieren von

Ich habe außerdem aus Versehen die Funktion hinzugefügt, einzelne Objekte zum Importieren oder Exportieren auswählen zu können. Das macht das Entwickeln sehr einfach.

Normalerweise änderte ich eine gespeicherte Prozedur und eine Tabelle und exportierte diese beiden Objekte in ein GIT-Verzeichnis.

Dann benutze ich Source Tree, um die Änderungen visuell zu sehen und sie dann in bitbucket zu übertragen, wenn ich glücklich bin.


3
kostenloser Download - aber nur für 20 Objekte. Diese Antwort ist nur eine Werbung für Ihr Produkt.
Thronk

-1

Mein Unternehmen hat gerade dieses neue Tool ( kostenlos ) entwickelt, mit dem Sie Skripts für SQL-Datenbanken einfach extrahieren , vergleichen , WinMerge zum schnellen Vergleichen von Skripts mit einer Live-Datenbank starten und Unterschiede synchronisieren können, indem Sie die Skripts aktualisieren oder die Änderungen anwenden in die Datenbank (außer für Tabellen, die komplexer und risikoreicher wären).

Servantt ist WinMerge zum Vergleichen von SQL Server-Datenbanken mit versionskontrollierten Skripten.

Es unterstützt und fördert Best Practices in der Softwareentwicklung:

  • Datenbankobjekte unter Versionskontrolle halten (*)
  • Entfernen von Zugriffsrechten von Entwicklern in Produktionsumgebungen
  • DBA-Überprüfung von Änderungen in Prozeduren / Ansichten auf Leistungsengpässe und Namensstandards
  • Benennen von Objekten mit vollständig qualifizierten Bezeichnern und Begrenzungszeichen in Klammern (behebt die Skripte CREATE PROCEDURE / VIEW / FUNCTION / etc)

(*) Skripte werden in einem lokalen Ordner gespeichert, der eine Arbeitskopie von Git, Subversion, TFS, Source Safe oder einem anderen VCS sein kann.

Kostenloser Download: http://servantt.com

Die professionelle Version (die sich noch in der Entwicklung befindet) wird eine völlig andere sein - sie zielt auf die Automatisierung der Bereitstellung (Versionsverwaltung) ab, um Aufgaben wie das Aktualisieren von IIS, das Aktualisieren von Windows-Diensten usw. zu automatisieren.


Dieses Tool funktioniert nicht.
Neeraj Kumar

@NeerajKumar Auf der Seite befindet sich eine "Kontakt" -Adresse, unter der Sie Ihr Problem beschreiben können. Ich helfe gerne weiter Es gibt mehr als tausend aktive Benutzer, ich nehme an, dass es in gewissem Sinne funktioniert :-)
Drizin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.