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.

Nota

L'argomento presuppone che si distribuisca 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 si vuole personalizzare le proprietà di distribuzione del database per ogni ambiente di destinazione. Ad esempio, negli ambienti di test si ricreare il database in ogni distribuzione, mentre negli ambienti di gestione temporanea o di produzione è molto più probabile che vengano apportati 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 (.sqldeployment). Questo argomento illustra come creare file di configurazione di 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 MVC 3 ASP.NET, un servizio Windows Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio di suddivisione del file di progetto descritto in Informazioni sul file di progetto, in cui il processo di compilazione è controllato da due file di progetto, uno contenente istruzioni di compilazione che si applicano 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 agnostico dell'ambiente per formare un set completo di istruzioni di compilazione.

Panoramica delle attività

In questo argomento si presuppone che l'utente:

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

  • Creare un file di configurazione della distribuzione (.sqldeployment) per ogni ambiente di destinazione.
  • Creare un comando VSDBCMD che specifica il file di configurazione della distribuzione come commutatore della riga di comando.
  • Parametrizzare il comando VSDBCMD in un file di progetto Microsoft Build Engine (MSBuild), in modo che le opzioni VSDBCMD siano appropriate all'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 di distribuzione denominato Database.sqldeployment. Se si apre questo file in Visual Studio 2010, è possibile visualizzare le diverse opzioni di distribuzione disponibili per l'utente:

  • Regole di confronto della distribuzione. In questo modo è possibile scegliere se usare le regole di confronto del database del progetto (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, si vuole usare le regole di confronto di origine quando si distribuisce in un ambiente di sviluppo o test. Quando si distribuisce in un ambiente di gestione temporanea 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à devono 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 portare il database di destinazione aggiornato con lo schema. Se si crea nuovamente il database, si perderanno i dati nel database esistente. Di conseguenza, è consigliabile impostare questo valore su false per le distribuzioni in ambienti di gestione temporanea o di produzione.
  • Bloccare la distribuzione incrementale se la perdita di dati potrebbe verificarsi. Ciò consente di scegliere se la distribuzione deve essere arrestata 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 tutti i dati importanti. Se il database viene ricreato sempre sufalse, 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 gestione temporanea o di produzione. Ciò impedisce agli utenti di apportare modifiche al database mentre la distribuzione è in corso.
  • Eseguire il backup del database prima della distribuzione. Questo valore viene in genere impostato su true quando si distribuisce in un ambiente di produzione, come precauzione rispetto alla perdita di dati. È anche possibile impostarlo su true quando si distribuisce in un ambiente di gestione temporanea, se il database di gestione temporanea 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 integrale e essenziale di apportare modifiche incrementali a un database. Se il database viene ricreato sempre sufalse, 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. Questo valore deve essere impostato su false nella maggior parte degli scenari.

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

Sviluppatore/test Gestione temporanea/integrazione Produzione
Confronto tra distribuzioni Source (Sorgente) Destinazione Destinazione
Distribuisci proprietà database True Solo prima volta Solo prima volta
Ricrea sempre database True False Falso
Blocca distribuzione incrementale in caso di perdita di dati Falso È possibile Vero
Eseguire lo script di distribuzione in modalità utente singolo False True True
Eseguire il backup del database prima della distribuzione Falso È possibile Vero
Generare istruzioni DROP per gli oggetti presenti nel database di destinazione, ma che non si trovano nel progetto di database False True True
Non utilizzare le istruzioni ALTER ASSEMBLY per aggiornare i tipi CLR False False 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.

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

  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.

Specifica del 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 della distribuzione specifico della configurazione che punta al file di configurazione della distribuzione specifico della configurazione. Tuttavia, uno degli obiettivi principali dell'approccio alla distribuzione descritta in queste esercitazioni consiste nel fornire 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. Verrà eseguito l'override del file di configurazione della distribuzione identificato dal manifesto della 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"

Nota

Si noti che il processo di compilazione può rinominare il file con estensione 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, 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 è più semplice per gli utenti fornire valori di proprietà in un file di progetto specifico dell'ambiente o eseguire l'override dei 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 tutte le proprietà universali come il percorso dell'eseguibile VSDBCMD, devono essere incluse 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

In questo argomento è stato 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 più grandi. 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: