Condividi tramite


Personalizzazione delle distribuzioni di database per più ambienti

di Jason Lee

In questo argomento viene descritto come personalizzare le proprietà di un database in ambienti di destinazione specifici come parte del processo di distribuzione.

Annotazioni

L'argomento presuppone che si stia distribuendo un progetto di database di Visual Studio 2010 usando MSBuild.exe e VSDBCMD.exe. Per altre informazioni sul motivo per cui è possibile scegliere questo approccio, vedere Distribuzione Web in Enterprise e Distribuzione di progetti di database.

Quando si distribuisce un progetto di database in più destinazioni, è spesso necessario personalizzare le proprietà di distribuzione del database per ogni ambiente di destinazione. Ad esempio, negli ambienti di test si ricrea in genere il database in ogni distribuzione, mentre in ambienti di staging o di produzione è molto più probabile che si esemplino gli aggiornamenti incrementali per conservare i dati.

In un progetto di database di Visual Studio 2010 le impostazioni di distribuzione sono contenute all'interno di un file di configurazione della distribuzione (con estensione sqldeployment). Questo argomento illustra come creare file di configurazione della distribuzione specifici dell'ambiente e specificare quello che si vuole usare come parametro VSDBCMD.

Questo argomento fa parte di una serie di esercitazioni basate sui requisiti di distribuzione aziendali di una società fittizia denominata Fabrikam, Inc. Questa serie di esercitazioni usa una soluzione di esempio, la soluzione Contact Manager, per rappresentare un'applicazione Web con un livello realistico di complessità, tra cui un'applicazione ASP.NET MVC 3, un servizio Windows Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio split project file descritto in Informazioni sul file di progetto, in cui il processo di compilazione è controllato da due file di progetto, uno contenente istruzioni di compilazione applicabili a ogni ambiente di destinazione e uno contenente le impostazioni di compilazione e distribuzione specifiche dell'ambiente. In fase di compilazione, il file di progetto specifico dell'ambiente viene unito al file di progetto indipendente dall'ambiente per formare un set completo di istruzioni di compilazione.

Panoramica delle attività

In questo argomento si presuppone che:

Per creare un sistema di distribuzione che supporta diverse proprietà di distribuzione del database tra gli ambienti di destinazione, è necessario:

  • Creare un file di configurazione della distribuzione (con estensione sqldeployment) per ogni ambiente di destinazione.
  • Creare un comando VSDBCMD che specifica il file di configurazione della distribuzione come opzione della riga di comando.
  • Parametrizzare il comando VSDBCMD in un file di progetto di Microsoft Build Engine (MSBuild), in modo che le opzioni VSDBCMD siano appropriate per l'ambiente di destinazione.

Questo argomento illustra come eseguire ognuna di queste procedure.

Creazione di file di configurazione della distribuzione Environment-Specific

Per impostazione predefinita, un progetto di database contiene un singolo file di configurazione della distribuzione denominato Database.sqldeployment. Se si apre questo file in Visual Studio 2010, è possibile visualizzare le diverse opzioni di distribuzione disponibili:

  • Aggregazione del confronto di distribuzione. In questo modo è possibile scegliere se usare le regole di confronto del database del progetto (le regole di confronto di origine ) o le regole di confronto del database del server di destinazione (regole di confronto di destinazione ). Nella maggior parte dei casi, è consigliabile usare le regole di confronto di origine quando distribuisci in un ambiente di sviluppo o di test. Quando si esegue la distribuzione in un ambiente di staging o di produzione, in genere si vuole lasciare invariate le regole di confronto di destinazione per evitare eventuali problemi di interoperabilità.
  • Distribuire le proprietà del database. In questo modo è possibile scegliere se applicare le proprietà del database, come definito nel file Database.sqlsettings . Quando si distribuisce un database per la prima volta, è necessario distribuire le proprietà del database. Se si aggiorna un database esistente, le proprietà dovrebbero essere già presenti e non è necessario distribuirle di nuovo.
  • Ricreare sempre il database. In questo modo è possibile scegliere se ricreare il database di destinazione ogni volta che si distribuisce o si apportano modifiche incrementali per aggiornare il database di destinazione con lo schema. Se si ricrea il database, si perderanno tutti i dati nel database esistente. Di conseguenza, è consigliabile impostare questa impostazione su false per le distribuzioni negli ambienti di gestione temporanea o di produzione.
  • Blocca la distribuzione incrementale se potrebbe verificarsi una perdita di dati. In questo modo è possibile scegliere se la distribuzione deve essere interrotta se una modifica allo schema del database causerà la perdita di dati. Questo valore viene in genere impostato su true per una distribuzione in un ambiente di produzione, per offrire l'opportunità di intervenire e proteggere eventuali dati importanti. Se hai impostato Ricrea sempre il database su false, questa impostazione non avrà alcun effetto.
  • Eseguire la distribuzione in modalità utente singolo. Questo non è in genere un problema negli ambienti di sviluppo o test. Tuttavia, è consigliabile impostare questo valore su true per le distribuzioni in ambienti di staging o di produzione. Ciò impedisce agli utenti di apportare modifiche al database mentre è in corso la distribuzione.
  • Eseguire il backup del database prima della distribuzione. Questo valore viene in genere impostato su true quando si esegue la distribuzione in un ambiente di produzione, come precauzione contro la perdita di dati. È anche possibile impostarlo su true quando si esegue la distribuzione in un ambiente di gestione temporanea, se il database di staging contiene molti dati.
  • Generare istruzioni DROP per gli oggetti presenti nel database di destinazione, ma che non si trovano nel progetto di database. Nella maggior parte dei casi, si tratta di una parte integrante ed essenziale di apportare modifiche incrementali a un database. Se hai impostato Ricrea sempre il database su false, questa impostazione non avrà alcun effetto.
  • Non usare istruzioni ALTER ASSEMBLY per aggiornare i tipi CLR. Questa impostazione determina il modo in cui SQL Server deve aggiornare i tipi CLR (Common Language Runtime) a versioni di assembly più recenti. Questa impostazione deve essere impostata su false nella maggior parte degli scenari.

Questa tabella mostra le impostazioni di distribuzione tipiche per ambienti di destinazione diversi. Tuttavia, le impostazioni potrebbero essere diverse a seconda dei requisiti esatti.

Sviluppo/test Gestione temporanea/integrazione Produzione
Collazione del confronto di distribuzione origine Destinazione Destinazione
Distribuire le proprietà del database Vero Solo prima volta Solo prima volta
Ricreare sempre il database Vero Falso Falso
Bloccare la distribuzione incrementale se potrebbe verificarsi una perdita di dati Falso Forse Vero
Eseguire lo script di distribuzione in modalità utente singolo Falso Vero Vero
Eseguire il backup del database prima della distribuzione Falso Forse Vero
Generare istruzioni DROP per gli oggetti presenti nel database di destinazione, ma che non si trovano nel progetto di database Falso Vero Vero
Non usare istruzioni ALTER ASSEMBLY per aggiornare i tipi CLR Falso Falso Falso

Per supportare la distribuzione di un progetto di database in più destinazioni, è necessario creare un file di configurazione della distribuzione per ogni ambiente di destinazione.

Per creare un file di configurazione specifico dell'ambiente

  1. In Visual Studio 2010, nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di database e quindi scegliere Proprietà.

  2. Nella scheda Distribuisci della pagina delle proprietà del progetto di database fare clic su Nuovo nella riga File di configurazione della distribuzione.

    Sulla pagina delle proprietà del progetto di database, nella scheda Distribuisci, nella riga File di configurazione della distribuzione, fare clic su Nuovo.

  3. Nella finestra di dialogo Nuovo file di configurazione della distribuzione assegnare al file un nome significativo, ad esempio TestEnvironment.sqldeployment, quindi fare clic su Salva.

  4. Nella pagina [Filename].sqldeployment impostare le proprietà di distribuzione in modo che corrispondano ai requisiti dell'ambiente di destinazione e quindi salvare il file.

    Nella pagina Filename .sqldeployment impostare le proprietà di distribuzione in modo che corrispondano ai requisiti dell'ambiente di destinazione e quindi salvare il file.

  5. Si noti che il nuovo file viene aggiunto alla cartella Proprietà nel progetto di database.

    Si noti che il nuovo file viene aggiunto alla cartella Proprietà nel progetto di database.

Specificare il file di configurazione della distribuzione in VSDBCMD

Quando si usano configurazioni della soluzione (ad esempio Debug e Versione) in Visual Studio 2010, è possibile associare un file di configurazione della distribuzione a ogni configurazione. Quando si compila una configurazione specifica, il processo di compilazione genera un file manifesto di distribuzione relativo alla configurazione che punta al file di configurazione di distribuzione specifico. Tuttavia, uno degli obiettivi principali dell'approccio alla distribuzione descritto in queste esercitazioni consiste nell'offrire agli utenti la possibilità di controllare il processo di distribuzione senza usare Visual Studio 2010 e le configurazioni della soluzione. In questo approccio, la configurazione della soluzione è la stessa indipendentemente dall'ambiente di distribuzione di destinazione. Per personalizzare la distribuzione del database in un ambiente di destinazione specifico, è possibile usare le opzioni della riga di comando VSDBCMD per specificare il file di configurazione della distribuzione.

Per specificare un file di configurazione della distribuzione in VSDBCMD, usare l'opzione p:/DeploymentConfigurationFile e specificare il percorso completo del file. Sarà sovrascritto il file di configurazione della distribuzione identificato dal manifesto di distribuzione. Ad esempio, è possibile usare questo comando VSDBCMD per distribuire il database ContactManager in un ambiente di test:

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

Annotazioni

Si noti che il processo di compilazione può rinominare il file .sqldeployment quando copia il file nella directory di output.

Se si usano variabili di comando SQL negli script SQL di pre-distribuzione o post-distribuzione, è possibile usare un approccio simile per associare un file con estensione sqlcmdvars specifico dell'ambiente alla distribuzione. In questo caso, si usa l'opzione p:/SqlCommandVariablesFile per identificare il file con estensione sqlcmdvars.

Esecuzione del comando VSDBCMD da un file di progetto MSBuild

È possibile richiamare un comando VSDBCMD da un file di progetto MSBuild usando un'attività Exec all'interno di una destinazione MSBuild. Nella sua forma più semplice, l'aspetto sarà simile al seguente:

<Target Name="DeployDatabase">     
   <PropertyGroup>      
      <_Cmd>
         Add your VSDBCMD command here
      </_Cmd>
   </PropertyGroup>
   <Exec Command="$(_Cmd)"/> 
 </Target>
  • In pratica, per semplificare la lettura e il riutilizzo dei file di progetto, è necessario creare proprietà per archiviare i vari parametri della riga di comando. In questo modo gli utenti possono fornire più facilmente i valori delle proprietà in un file di progetto specifico dell'ambiente o sostituire i valori predefiniti dalla riga di comando di MSBuild. Se si usa l'approccio split project file descritto in Informazioni sul file di progetto, è necessario dividere le istruzioni di compilazione e le proprietà tra i due file di conseguenza:
  • Le impostazioni specifiche dell'ambiente, ad esempio il nome file di configurazione della distribuzione, la stringa di connessione del database e il nome del database di destinazione, devono essere incluse nel file di progetto specifico dell'ambiente.
  • La destinazione MSBuild che esegue il comando VSDBCMD, insieme a qualsiasi proprietà universale come il percorso del file eseguibile VSDBCMD, deve essere inserito nel file di progetto universale.

È anche necessario assicurarsi di compilare il progetto di database prima di richiamare VSDBCMD in modo che il file con estensione deploymanifest venga creato e pronto per l'uso. È possibile visualizzare un esempio completo di questo approccio nell'argomento Informazioni sul processo di compilazione, che illustra i file di progetto nella soluzione di esempio Contact Manager.

Conclusione

Questo argomento ha descritto come personalizzare le proprietà del database in ambienti di destinazione diversi quando si distribuiscono progetti di database usando MSBuild e VSDBCMD. Questo approccio è utile quando è necessario distribuire progetti di database come parte di soluzioni su scala aziendale di grandi dimensioni. Queste soluzioni vengono spesso distribuite in più destinazioni, ad esempio ambienti di sviluppo o test in modalità sandbox, piattaforme di gestione temporanea o integrazione e ambienti di produzione o live. Ognuno di questi ambienti di destinazione richiede in genere un set univoco di proprietà di distribuzione del database.

Altre informazioni

Per altre informazioni sulla distribuzione di progetti di database tramite VSDBCMD.exe, vedere Distribuzione di progetti di database. Per altre informazioni sull'uso di file di progetto MSBuild personalizzati per controllare il processo di distribuzione, vedere Informazioni sul file di progetto e Informazioni sul processo di compilazione.

Questi articoli su MSDN forniscono indicazioni più generali sulla distribuzione del database: