Wdrażanie projektów baz danych

Autor : Jason Lee

Uwaga

W wielu scenariuszach wdrażania w przedsiębiorstwie potrzebna jest możliwość publikowania aktualizacji przyrostowych w wdrożonej bazie danych. Alternatywą jest ponowne utworzenie bazy danych w każdym wdrożeniu, co oznacza utratę danych w istniejącej bazie danych. Podczas pracy z programem Visual Studio 2010 użycie narzędzia VSDBCMD jest zalecanym podejściem do przyrostowego publikowania bazy danych. Jednak następna wersja programu Visual Studio i potoku publikowania w sieci Web (WPP) będą zawierać narzędzia obsługujące bezpośrednie publikowanie przyrostowe.

Jeśli otworzysz przykładowe rozwiązanie Contact Manager w programie Visual Studio 2010, zobaczysz, że projekt bazy danych zawiera folder Properties zawierający cztery pliki.

Jeśli otworzysz przykładowe rozwiązanie Contact Manager w programie Visual Studio 2010, zobaczysz, że projekt bazy danych zawiera folder Properties zawierający cztery pliki.

Razem z plikiem projektu (ContactManager.Database.dbproj w tym przypadku) te pliki kontrolują różne aspekty procesu kompilacji i wdrażania:

  • Plik Database.sqlcmdvars zawiera wartości wszystkich zmiennych SQLCMD używanych podczas wdrażania projektu. Każda konfiguracja rozwiązania (na przykład debugowanie i wydanie) może określać inny plik .sqlcmdvars.
  • Plik Database.sqldeployment zawiera ustawienia specyficzne dla wdrożenia, takie jak użycie sortowania zdefiniowanego w projekcie lub sortowania serwera docelowego, czy ponownego utworzenia docelowej bazy danych za każdym razem, czy po prostu zmienić istniejącą bazę danych, aby wyświetlić ją na bieżąco itd. Każda konfiguracja rozwiązania może określać inny plik .sqldeployment.
  • Plik Database.sqlpermissions jest dokumentem XML, którego można użyć do zdefiniowania wszelkich uprawnień, które chcesz dodać do docelowej bazy danych. Wszystkie konfiguracje rozwiązań współdzielą ten sam plik sqlpermissions.
  • Plik Database.sqlsettings określa właściwości na poziomie bazy danych do użycia podczas tworzenia bazy danych, takie jak sortowanie, zachowanie operatorów porównania itd. Wszystkie konfiguracje rozwiązań współużytkować ten sam plik .sqlsettings.

Warto pośmieć chwilę na otwarcie tych plików w programie Visual Studio i zapoznanie się z zawartością.

Podczas tworzenia projektu bazy danych proces kompilacji tworzy dwa pliki:

  • Schemat bazy danych (plik dbschema). W tym artykule opisano schemat bazy danych, którą chcesz utworzyć w formacie XML.
  • Manifest wdrożenia (plik deploymanifest). Zawiera wszystkie informacje wymagane do utworzenia i wdrożenia bazy danych. Odwołuje się on do pliku dbschema wraz z innymi zasobami, takimi jak instrukcje wdrażania (plik .sqldeployment) i skrypty SQL przed wdrożeniem lub po wdrożeniu.

Spowoduje to wyświetlenie relacji między tymi zasobami:

Relacja między powyższymi zasobami

Jak widać, plik sqlsettings i plik sqlpermissions są danymi wejściowymi procesu kompilacji. Wraz z plikiem projektu bazy danych te pliki są używane do tworzenia pliku schematu bazy danych. Plik .sqldeployment i plik .sqlcmdvars przechodzą przez proces kompilacji bez zmian. Manifest wdrożenia wskazuje lokalizację schematu bazy danych, plik sqldeployment, plik .sqlcmdvars oraz wszystkie skrypty SQL przed wdrożeniem lub po wdrożeniu.

Dlaczego warto używać vsDBCMD do wdrażania projektu bazy danych?

Istnieją różne podejścia do wdrażania projektów baz danych. Jednak nie wszystkie z nich są odpowiednie do wdrażania projektu bazy danych na serwerach zdalnych w środowisku przedsiębiorstwa. Zastanów się nad tym, co chcesz wykonać w ramach wdrożenia projektu bazy danych. W scenariuszach wdrażania w przedsiębiorstwie prawdopodobnie potrzebujesz następujących elementów:

  • Możliwość wdrożenia projektu bazy danych z lokalizacji zdalnej.
  • Możliwość wprowadzania aktualizacji przyrostowych do istniejącej bazy danych.
  • Możliwość uwzględnienia skryptów przed wdrożeniem lub skryptów po wdrożeniu.
  • Możliwość dostosowania wdrożenia do wielu środowisk docelowych.
  • Możliwość wdrożenia projektu bazy danych w ramach większego, zwykle skryptowego wdrożenia rozwiązania jednoetapowego.

Istnieją trzy główne podejścia, których można użyć do wdrożenia projektu bazy danych:

  • Możesz użyć funkcji wdrażania z typem projektu bazy danych w programie Visual Studio 2010. Podczas kompilowania i wdrażania projektu bazy danych w programie Visual Studio 2010 proces wdrażania używa manifestu wdrożenia do wygenerowania pliku wdrożenia opartego na języku SQL specyficznego dla konfiguracji kompilacji. Spowoduje to utworzenie bazy danych, jeśli jeszcze nie istnieje lub wprowadzenie jakichkolwiek niezbędnych zmian w bazie danych, jeśli już istnieje. Możesz użyć SQLCMD.exe, aby uruchomić ten plik na serwerze docelowym lub ustawić program Visual Studio, aby utworzyć i uruchomić plik. Wadą tego podejścia jest to, że masz ograniczoną kontrolę nad ustawieniami wdrażania. Często konieczne może być również zmodyfikowanie pliku wdrożenia SQL w celu zapewnienia wartości zmiennych specyficznych dla środowiska. Tego podejścia można używać tylko z komputera z zainstalowanym programem Visual Studio 2010, a deweloper musi wiedzieć i podać parametry połączenia i poświadczenia dla wszystkich środowisk docelowych.
  • Aby wdrożyć bazę danych w ramach projektu aplikacji internetowej, można użyć narzędzia internetowego wdrażania (IIS) internetowego wdrażania (Web Deploy). Jednak takie podejście jest o wiele bardziej złożone, jeśli chcesz wdrożyć projekt bazy danych, a nie po prostu replikować istniejącą lokalną bazę danych na serwerze docelowym. Narzędzie Web Deploy można skonfigurować do uruchamiania skryptu wdrażania SQL generowanego przez projekt bazy danych, ale w tym celu należy utworzyć niestandardowy plik obiektów docelowych programu WPP dla projektu aplikacji internetowej. Zwiększa to znaczną złożoność procesu wdrażania. Ponadto narzędzie Web Deploy nie obsługuje bezpośrednio aktualizacji przyrostowych istniejących baz danych. Aby uzyskać więcej informacji na temat tego podejścia, zobacz Rozszerzanie potoku publikowania internetowego na projekt bazy danych pakietów wdrożony plik SQL.
  • Możesz użyć narzędzia VSDBCMD do wdrożenia bazy danych przy użyciu schematu bazy danych lub manifestu wdrożenia. Można wywołać VSDBCMD.exe z docelowego programu MSBuild, który umożliwia publikowanie baz danych w ramach większego, skryptowego procesu wdrażania. Zmienne można zastąpić w pliku .sqlcmdvars i wiele innych właściwości bazy danych z polecenia VSDBCMD, co umożliwia dostosowanie wdrożenia dla różnych środowisk bez tworzenia wielu konfiguracji kompilacji. VSDBCMD zapewnia funkcje różnicowania, co oznacza, że wprowadzi tylko niezbędne zmiany w celu dostosowania docelowej bazy danych do schematu bazy danych. VsDBCMD oferuje również szeroką gamę opcji wiersza polecenia, które zapewniają szczegółową kontrolę nad procesem wdrażania.

W tym omówieniu widać, że użycie polecenia VSDBCMD z programem MSBuild jest najlepszym rozwiązaniem dla typowego scenariusza wdrażania w przedsiębiorstwie:

Obsługuje Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Obsługuje wdrażanie zdalne? Tak Tak Tak
Obsługuje aktualizacje przyrostowe? Tak Nie Tak
Obsługuje skrypty przed/po wdrożeniu? Tak Tak Tak
Obsługuje wdrażanie w wielu środowiskach? Ograniczone Ograniczone Tak
Czy obsługuje wdrażanie skryptowe? Ograniczone Tak Tak

W pozostałej części tego tematu opisano użycie programu VSDBCMD z programem MSBuild do wdrażania projektów bazy danych.

Opis procesu wdrażania

Narzędzie VSDBCMD umożliwia wdrożenie bazy danych przy użyciu schematu bazy danych (pliku dbschema) lub manifestu wdrożenia (pliku deploymanifest). W praktyce niemal zawsze będziesz używać manifestu wdrożenia, ponieważ manifest wdrożenia umożliwia podanie wartości domyślnych dla różnych właściwości wdrożenia i zidentyfikowanie wszystkich skryptów przed wdrożeniem lub po wdrożeniu skryptów SQL, które chcesz uruchomić. Na przykład to polecenie VSDBCMD służy do wdrażania bazy danych ContactManager na serwerze bazy danych w środowisku testowym:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd+
            /script:"…\Publish-ContactManager-Db.sql"

W takim przypadku:

  • Przełącznik /a (lub /Action) określa, co chcesz zrobić VSDBCMD. Możesz ustawić tę opcję na import lub wdróż. Opcja Importuj służy do generowania pliku dbschema z istniejącej bazy danych, a opcja Wdróż służy do wdrażania pliku dbschema w docelowej bazie danych.
  • Przełącznik /manifest (lub /ManifestFile) identyfikuje plik .deploymanifest, który chcesz wdrożyć. Jeśli zamiast tego chcesz użyć pliku dbschema, użyj przełącznika /model (lub /ModelFile).
  • Przełącznik /cs (lub /ConnectionString) udostępnia parametry połączenia dla docelowego serwera bazy danych. Należy pamiętać, że nie zawiera to nazwy bazy danych — usługa VSDBCMD musi nawiązać połączenie z serwerem w celu utworzenia bazy danych; nie musi łączyć się z pojedynczą bazą danych. Jeśli plik .deploymanifest zawiera parametry połączenia, możesz pominąć ten przełącznik. Jeśli mimo to użyjesz przełącznika, wartość przełącznika zastąpi wartość .deploymanifest.
  • Właściwość /p:TargetDatabase zawiera nazwę, którą chcesz przypisać do docelowej bazy danych podczas tworzenia. Spowoduje to zastąpienie wartości właściwości TargetDatabase w pliku .deploymanifest. Składnia /p:[nazwa właściwości]umożliwia ustawienie szerokiej gamy właściwości wdrożenia i zastąpienie wszystkich zmiennych SQLCMD zadeklarowanych w pliku .sqlcmdvars.
  • Przełącznik /dd+ (lub /DeployToDatabase+) wskazuje, że chcesz utworzyć wdrożenie i wdrożyć je w środowisku docelowym. Jeśli określisz /dd-lub pominięto przełącznik, program VSDBCMD wygeneruje skrypt wdrożenia, ale nie wdroży go w środowisku docelowym. Ten przełącznik jest często źródłem nieporozumień i jest bardziej szczegółowo opisany w następnej sekcji.
  • Przełącznik /script (lub /DeploymentScriptFile) określa, gdzie chcesz wygenerować skrypt wdrożenia. Ta wartość nie ma wpływu na proces wdrażania.

Aby uzyskać więcej informacji na temat vsDBCMD, zobacz Dokumentacja wiersza polecenia dla VSDBCMD.EXE (wdrażanie i importowanie schematu) i Instrukcje: przygotowywanie bazy danych do wdrożenia z poziomu wiersza polecenia przy użyciu VSDBCMD.EXE.

Aby zapoznać się z przykładem używania polecenia VSDBCMD z pliku projektu MSBuild, zobacz Understanding the Build Process (Opis procesu kompilacji). Przykłady konfigurowania ustawień wdrażania bazy danych dla wielu środowisk można znaleźć w temacie Dostosowywanie wdrożeń bazy danych dla wielu środowisk.

Opis przełącznika DeployToDatabase

Zachowanie przełącznika /dd lub /DeployToDatabase zależy od tego, czy używasz vsDBCMD z plikiem dbschema, czy plikiem deploymanifest. Jeśli używasz pliku dbschema, zachowanie jest dość proste:

  • Jeśli określisz /dd+ lub /dd, program VSDBCMD wygeneruje skrypt wdrożenia i wdroży bazę danych.
  • Jeśli określisz /dd- lub pominięto przełącznik, vsDBCMD wygeneruje tylko skrypt wdrożenia.

Jeśli używasz pliku .deploymanifest, zachowanie jest o wiele bardziej skomplikowane. Wynika to z tego, że plik .deploymanifest zawiera nazwę właściwości DeployToDatabase , która określa również, czy baza danych jest wdrożona.

<DeployToDatabase>False</DeployToDatabase>

Wartość tej właściwości jest ustawiana zgodnie z właściwościami projektu bazy danych. Jeśli ustawisz akcję Wdróż na wartość Utwórz skrypt wdrożenia (.sql), wartość będzie mieć wartość False. Jeśli ustawisz akcję Wdróż na wartość Utwórz skrypt wdrożenia (.sql) i wdrożysz w bazie danych, wartość będzie mieć wartość True.

Uwaga

Te ustawienia są skojarzone z konkretną konfiguracją i platformą kompilacji. Jeśli na przykład skonfigurujesz ustawienia konfiguracji debugowania , a następnie opublikujesz je przy użyciu konfiguracji wydania , ustawienia nie będą używane.

Jeśli na przykład skonfigurujesz ustawienia konfiguracji debugowania, a następnie opublikujesz je przy użyciu konfiguracji wydania, ustawienia nie będą używane.

Uwaga

W tym scenariuszu akcja Wdróż powinna być zawsze ustawiona na wartość Utwórz skrypt wdrożenia (.sql), ponieważ nie chcesz, aby program Visual Studio 2010 wdrażał bazę danych. Innymi słowy, właściwość DeployToDatabase powinna zawsze mieć wartość False.

Po określeniu właściwości DeployToDatabaseprzełącznik /dd zastąpi właściwość tylko wtedy, gdy wartość właściwości ma wartość false:

  • Jeśli właściwość DeployToDatabase ma wartość False i określisz właściwość /dd+ lub /dd, polecenie VSDBCMD zastąpi właściwość DeployToDatabase i wdroży bazę danych.
  • Jeśli właściwość DeployToDatabase ma wartość False i określisz /dd- lub pominięto przełącznik, program VSDBCMD nie wdroży bazy danych.
  • Jeśli właściwość DeployToDatabase ma wartość True, program VSDBCMD zignoruje przełącznik i wdroży bazę danych.
  • Skrypt wdrażania jest generowany w każdym przypadku, niezależnie od tego, czy wdrażasz bazę danych.

Podsumowanie

W tym temacie omówiono proces kompilowania i wdrażania projektów baz danych w programie Visual Studio 2010. Opisano w nim również sposób użycia VSDBCMD.exe z programem MSBuild do obsługi wdrożenia bazy danych w skali przedsiębiorstwa.

Aby uzyskać więcej informacji o tym, jak to działa w praktyce, zobacz Dostosowywanie wdrożeń bazy danych dla wielu środowisk.

Dalsze informacje

Aby uzyskać informacje na temat dostosowywania wdrożeń baz danych przez utworzenie oddzielnego pliku konfiguracji wdrożenia dla każdego środowiska, zobacz Dostosowywanie wdrożeń bazy danych dla wielu środowisk. Aby uzyskać wskazówki dotyczące konfigurowania członkostwa w rolach bazy danych przez uruchomienie skryptu po wdrożeniu, zobacz Wdrażanie członkostwa w rolach bazy danych w środowiskach testowych. Aby uzyskać wskazówki dotyczące zarządzania niektórymi unikatowymi wyzwaniami, jakie nakładają bazy danych członkostwa, zobacz Wdrażanie baz danych członkostwa w środowiskach przedsiębiorstwa.

Te tematy w witrynie MSDN zawierają szersze wskazówki i podstawowe informacje dotyczące projektów baz danych programu Visual Studio i procesu wdrażania bazy danych: