Sqlproj: Die Lösung zur Bereitstellung einer Datenbank, in der Kommandozeile?
Ich bin derzeit auf der Bereitstellung einer website auf einem server mithilfe der Microsoft Web Deployment Technologien (msbuild und msdeploy-Befehle). Die website erfordert die Bereitstellung einer Datenbank und werden beide in den gleichen server. Ich Suche die beste Lösung für die Bereitstellung einer Datenbank-Projekt (mit einem Befehlszeile) und ich würde gerne besser verstehen, alle Technologien rund um Datenbank-Bereitstellung.
- Gehalt der Lösung (Visual Studio 2013):
- einer Projekt-Datenbank (für SQL Server 2008),
- ein Klasse-Bibliothek (Data access layer mit NHibernate)
- ein web-Projekt (ASP.NET MVC4).
Hinweis: ich bin nicht freiwillig mit einem continuous integration/delivery tool oder Methode "publish" in VS. Mein erstes Ziel mit diesem Projekt war die Erkenntnis, wie msbuild /msdeploy Arbeit...
Hatte ich einen Blick auf die vsdbcmd Befehl, die scheint, alles zu tun, die Schritte, die ich will... außer ich würde für den import von Visual Studio DLLs/Dateien in meinem remote-server, und ich Frage mich, ob es keinen besseren Weg... ich schaute auf die msdeploy Anbieter dbSqlPackage/dbDacFx, sondern von dem, was ich verstanden, es ist mit einem dacpac für die Anwendung der schema-änderungen. Ebenso die SqlPackage.exe scheint die Verwendung einer dacpac, wie gut.
Mit einem dacpac klingt eine gute Idee, aber ich bin verwirrt mit den folgenden Fragen:
- Bedeutet das, ich müsste ein anderes Verfahren, das erste mal meine Datenbank erstellt wird? Wenn ja, welcher Befehl wäre das beste?
- Ist es möglich, erstellen Sie eine dacpac von meinem sqlproj-Datei? Wenn ja, wie tun Sie es?
Gibt es andere Möglichkeiten, die die Bereitstellung von einer Befehlszeile und von Ihren Erfahrungen und Projekten, was der beste Weg für die Bereitstellung dieser Art von Projekt?
Vielen Dank,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weitere Forschung, entdeckte ich, dass Visual Studio war die Schaffung eines dacpac, wenn es baut eine sqlproj (bin/Debug oder bin/Release je nach Ihren build-Konfiguration). Die erste Zeit, die Sie bereitstellen, die dacpac erstellen Sie Ihre Datenbank. Wenn Sie Schemaänderungen, so scheint es, um Sie anzuwenden.
Hier eine Summe die Befehlszeilen für die website und für die Datenbank:
Website bauen
Website Bereitstellung (Standard-Anwendungs-pool)
%fullpathpackage%: der Pfad der zip-Datei, die erstellt wird, indem Sie msbuild verwenden, wenn /T:Paket ist da (bin/Release)
Datenbank aufbauen:
Datenbank Bereitstellung:
Diese Lösung satifies mich für jetzt. Dennoch, ich bin immer noch offen für Kommentare und Verbesserungsvorschläge.
Entwickeln Sie Ihre Datenbank als eine Reihe von patch-Dateien, die abhängig von einander und verwenden Sie dann https://github.com/LuvDaSun/sqlpatch für die Bereitstellung.
Ok so .sqlproj-Datei kompiliert wird in einer dacpac-Datei, die im Grunde ist ein zipfile mit pre/post-deployment-Dateien und eine xml-Datei mit dem Inhalt aller Ihrer sql-Skripte (des-Modell).
Wenn Sie msbuild es nutzt die DacFx-api zu vergleichen und veröffentlichen Sie die änderungen in der dacpac auf die sql-Datenbank.
Können Sie msbuild verwenden, oder verwenden Sie die DacFx-api selbst oder in der Regel Menschen nutzen sqlpackage.exe nehmen Sie die dacpac und zu vergleichen, um eine Datenbank, es kann dann entweder ein Skript generieren, so dass Sie können es manuell ausführen, oder Sie können das Skript ausführen, erzeugt es die Datenbank zu aktualisieren.
Können Sie andere Dinge tun mit sqlpackage wie die Erzeugung eines deployment-Bericht mit allen Sachen, die er ändern würde, wenn er darum gebeten wurde.
Generieren Sie eine dacpac durch den Aufbau von Ihrem Projekt, es wird in Ihrem Ausgabeverzeichnis.
Es ist idempotent, so dass heißt, egal, wie oft es ausgeführt wird, nachdem die erste Instanz, die es immer endet mit dem gleichen Ergebnis - jedes mal also, wenn Sie den code ändern, bauen die dacpac und stellen es - wenn die Datenbank nicht existiert, dann wird es erzeugt, wenn es vorhanden ist, wird nur die änderungen bereitstellen.