Cenni preliminari sui processi di generazione e distribuzione di database
Aggiornamento: novembre 2007
Per distribuire un nuovo database o le modifiche apportate a un database esistente dal progetto di database a un server di database, è necessario generare il progetto di database e quindi distribuirlo sul server di database. Con la fase di generazione, gli script di definizione oggetto e gli eventuali script pre-distribuzione o post-distribuzione vengono assemblati in un unico script di generazione utilizzando le proprietà di progetto impostate nella finestra corrispondente. Con la fase di distribuzione lo script viene assemblato e quindi eseguito sulla destinazione specificata. Con l'azione di pulitura della generazione vengono eliminati gli eventuali script di generazione esistenti. Se si intende aggiornare un server di gestione temporanea o di produzione, è possibile scegliere di generare il progetto di database e quindi modificare lo script di generazione. Dopo aver apportato le modifiche e se si ritiene che il risultato sia appropriato, è possibile distribuire manualmente questo script di generazione modificato nell'ambiente di produzione.
Script di distribuzione
È possibile specificare gli script da eseguire prima o dopo gli script per la creazione o l'aggiornamento della destinazione. Possono essere presenti un unico script pre-distribuzione e un unico script post-distribuzione, ma è possibile includere altri script dall'interno di questi. Per ulteriori informazioni, vedere Utilizzo di script di database.
È possibile eseguire uno script di generazione su database di destinazione diversi, ciascuno dei quali è caratterizzato da una diversa configurazione. Lo script di generazione contiene pertanto istruzioni per impostare tutte le proprietà del database, anche se i relativi valori corrispondono già a quelli delle proprietà del progetto di database.
Considerazioni per la distribuzione in un database esistente
Quando vengono distribuite le modifiche in un database esistente, alcune di esse possono generare una perdita di dati. Nel caso di modifiche che causerebbero la perdita dei dati contenuti nella tabella, la distribuzione verrà annullata a meno che la casella di controllo Blocca distribuzione incrementale se dovesse verificarsi una perdita di dati non sia stata deselezionata nella finestra delle proprietà del progetto. Per ulteriori informazioni, vedere Panoramica delle impostazioni del progetto di database. Le modifiche che causano una perdita di dati sono ad esempio l'eliminazione e la ricreazione di una tabella, la modifica delle dimensioni di una colonna (char(100) in char(50) o nchar(100) in char(100)) oppure la modifica del confronto di una colonna di tipo carattere.
Recupero dalle distribuzioni non riuscite
Team Edition for Database Professionals crea un punto di salvataggio nel registro delle transazioni che può essere ripristinato in caso di distribuzione non riuscita. Tuttavia, se i dati contenuti nel database vengono modificati durante la distribuzione fra il momento in cui viene creato il punto di salvataggio e il momento in cui viene ripristinato il database, può verificarsi una perdita di dati. Per questa ragione, se la distribuzione viene eseguita in un server di database condiviso, è necessario attivare la modalità utente singolo per il database prima della distribuzione.
Nota: |
---|
È necessario utilizzare il modello di recupero con registrazione completa per ripristinare un database da una distribuzione non riuscita. Il modello di recupero con registrazione minima non è sufficiente poiché è richiesto il registro delle transazioni. Per ulteriori informazioni sui modelli di recupero, vedere Panoramica dei modelli di recupero |
File esclusi
Se dal progetto di database vengono esclusi dei file, gli oggetti di database definiti all'interno di tali file non verranno inclusi nella generazione o nella distribuzione. Se uno o più oggetti sono ancora in uso ma si desidera distribuire il lavoro già completato, è possibile escludere alcuni file per distribuire solo gli elementi pronti. Quando i file saranno pronti, sarà quindi possibile includerli nella distribuzione. Il database verrà quindi aggiornato con i nuovi oggetti senza modificare gli oggetti esistenti (se non sono stati modificati nel progetto).
Generazione da riga di comando
La generazione, la distribuzione o le operazioni di pulitura possono essere eseguite dall'interfaccia utente di Visual Studio oppure come parte di una generazione da riga di comando utilizzando MSBuild.exe. È possibile specificare le destinazioni Build, Deploy, Rebuild, Clean, SQLBuild, SQLDeploy e CleanProject. Per impostazione predefinita, per i processi di generazione e distribuzione vengono utilizzate le proprietà del progetto definite all'interno del progetto di database, nel file con estensione dbproj o dbproj.user. È tuttavia possibile eseguire l'override di queste proprietà dalla riga di comando o da un file di risposta.
Nota importante: |
---|
Prima di eseguire una generazione da riga di comando, è necessario chiudere Visual Studio. Se viene eseguita una generazione da riga di comando mentre Visual Studio è in esecuzione, è possibile che alcuni errori non vengano rilevati. |
Sintassi della riga di comando
È possibile generare il progetto di database dalla riga di comando utilizzando una sintassi semplice, come illustrato negli esempi seguenti:
MSBuild /target:Build NomeSoluzionePersonale.sln
In questo esempio viene eseguita l'azione di generazione sulla soluzione denominata NomeSoluzionePersonale.sln utilizzando le proprietà del progetto specificate nei file di progetto contenuti nella soluzione. Se la soluzione contiene uno più progetti di database, verranno generati insieme a tutti gli altri elementi della soluzione. Con l'azione di generazione verrà creato, ma non distribuito, lo script necessario per creare o aggiornare il database di destinazione. È anche possibile generare un progetto di database specifico. La destinazione Build include gli script pre-distribuzione e di post-distribuzione nello script di generazione creato.MSBuild /target:SQLBuild NomeProgettoPersonale.dbproj
Anche in questo esempio viene eseguita un'azione di sola generazione. Viene generato solo un singolo progetto di database denominato NomeProgettoPersonale.dbproj. Le proprietà del progetto all'interno del file con estensione dbproj vengono utilizzate per assemblare lo script di generazione, che non viene distribuito. La destinazione SQLBuild non include lo script pre-distribuzione o di post-distribuzione nello script di generazione creato.MSBuild /target:Build /p:BuildScriptName=NomeScriptPersonale.sql NomeProgettoPersonale.dbproj
Anche in questo esempio viene eseguita un'azione di sola generazione. Viene generato solo un singolo progetto di database denominato NomeProgettoPersonale.dbproj. Le proprietà del progetto all'interno del file con estensione dbproj vengono utilizzate per assemblare lo script di generazione, La riga di comando consente di eseguire l'override della proprietà BuildScriptName e di specificare un nuovo nome per lo script di output. È possibile utilizzare questo approccio se si desidera distribuire lo script di generazione in più server. Lo script non viene distribuito.MSBuild /target:Deploy /property:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" NomeProgettoPersonale.dbproj
In questo esempio viene illustrato come distribuire il progetto di database, eseguendo l'override del nome e della stringa di connessione del database di destinazione.MSBuild /target:rebuild /p:Configuration="Default" /p: DefaultDataPath ="Unità:Percorso\\" MyProjectName.dbproj
In questo esempio viene illustrato come ricompilare il progetto di database, specificare una configurazione (Predefinito) ed eseguire l'override della variabile DefaultDataPath.
Nota importante: |
---|
È necessario specificare la barra rovesciata finale aggiuntiva ("\") per DefaultDataPath. In caso contrario, verranno visualizzati gli avvisi quando si compila e il progetto di database non verrà compilato correttamente. |
MSBuild /target:Deploy /property:BuildScriptName= NomeScriptPersonale.sql /property:outdir=PercorsoScript /property:TargetDatabase=DataBaseDestinazioneAggiornato;TargetConnectionString="Data Source=NomeIstanza\NomeDatabase;Integrated Security=True;Pooling=False" PercorsoProgetto\NomeProgettoPersonale.dbproj
Questo esempio mostra come distribuire un database da un computer diverso da quello sul quale è stata eseguita la compilazione. Ad esempio, è possibile utilizzare questa riga di comando se si ha un computer di compilazione centrale che crea uno script di compilazione ogni notte. È necessario specificare il nome dello script di compilazione, il percorso in cui è disponibile (outdir), il database di destinazione, nonché il percorso e il nome del file del progetto di database.MSBuild @dbbuild.arf NomeProgettoPersonale.dbproj
In questo esempio viene illustrato l'utilizzo di un file di risposta per fornire gli argomenti della riga di comando. Il file, dbbuild.arf, può contenere qualsiasi opzione valida della riga di comando MSBuild, incluse quelle che eseguono l'override delle proprietà di progetto. Per ulteriori informazioni sui file di risposta, vedere File di risposta MSBuild.MSBuild /target:Rebuild NomeProgettoPersonale.dbproj
In questo esempio viene eseguita la rigenerazione del progetto o della soluzione specificata, anche se non sono state apportate modifiche dopo l'ultima generazione.MSBuild /target:Clean NomeProgettoPersonale.dbproj
In questo esempio viene illustrato come eliminare gli eventuali script di generazione esistenti. In genere, dopo questa azione viene eseguita un'altra azione di generazione o distribuzione.
Nota: |
---|
È necessario abbreviare /target: in /t: e /property: in /p:. |
Per ulteriori informazioni sulle opzioni della riga di comando disponibili per MSBuild, vedere Riferimenti alla riga di comando di MSBuild.
Per ulteriori informazioni sui file di risposta, vedere File di risposta di MSBuild (informazioni in lingua inglese).
Nota: |
---|
Per eseguire MSBuild.exe, è necessario utilizzare il prompt dei comandi di Visual Studio 2005 o eseguire il file batch vsvars32.bat disponibile nella cartella specificata dalla variabile di ambiente %VS80COMNTOOLS%. |
Proprietà dei progetti di database
Alcune proprietà dei progetti di database influiscono sulla modalità di generazione e distribuzione del progetto di database. Tali proprietà sono memorizzate nel file di progetto di database e nel file con estensione user ed è possibile eseguirne l'override con una riga di comando o in un file di risposta. Per ulteriori informazioni sulle proprietà dei progetti di database, vedere Panoramica delle impostazioni del progetto di database.
Considerazioni sulla sicurezza
Se altri utenti possono modificare l'istanza corrente del database di convalida della fase di progettazione, potranno aggiungere o modificare oggetti che verranno inclusi nello script di generazione. L'output di generazione consentirà di ottenere tali oggetti, ad esempio trigger DDL, che verranno eseguiti nel contesto dell'utente che distribuisce il database. Tali oggetti non verranno necessariamente visualizzati in Esplora soluzioni o Visualizzazione schema. In Confronto schema non verranno rilevate differenze quando si confronta il progetto di database con il database distribuito perché tali oggetti sono inclusi anche nel database di convalida della fase di progettazione.
Per ridurre al minimo i rischi per il database in uso:
Non condividere con altri utenti l'istanza corrente del database di convalida della fase di progettazione.
Esaminare gli script di generazione prima di distribuirli.
Vedere anche
Attività
Procedura: preparare script di generazione database
Procedura: distribuire modifiche in un database nuovo o esistente
Procedura dettagliata: creazione e distribuzione di un nuovo database con controllo delle versioni