Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Usi l'approccio del file di progetto diviso per la distribuzione della soluzione, come descritto in Informazioni sul file di progetto.
- Si chiama VSDBCMD dal file di progetto per distribuire il progetto di database, come descritto in Informazioni sul processo di compilazione.
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 |
Annotazioni
Per altre informazioni sulle proprietà di distribuzione del database e sulle considerazioni sull'ambiente, vedere Panoramica delle impostazioni del progetto di database, Procedura: Configurare le proprietà per i dettagli della distribuzione, compilare e distribuire il database in un ambiente di sviluppo isolato e compilare e distribuire database in un ambiente di gestione temporanea o di produzione.
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
In Visual Studio 2010, nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di database e quindi scegliere Proprietà.
Nella scheda Distribuisci della pagina delle proprietà del progetto di database fare clic su Nuovo nella riga File di configurazione della distribuzione.
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.
Nella pagina [Filename].sqldeployment impostare le proprietà di distribuzione in modo che corrispondano ai requisiti dell'ambiente di destinazione e quindi salvare il file.
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: