Condividi tramite


Cenni preliminari sui processi di compilazione e distribuzione di database

Per creare un database oppure pubblicare aggiornamenti a un database esistente da un progetto di database a un server database, è necessario compilare il progetto di database e quindi distribuirlo sul server database desiderato.

La procedura prevede innanzitutto la compilazione del progetto di database in file utilizzabili per la distribuzione. Tali file includono il file con estensione dbschema e quello con estensione deploymentmanifest, nonché gli script pre-distribuzione e post-distribuzione. Quando si esegue la compilazione del progetto di database non viene eseguito alcun confronto con un database di destinazione. Quando si distribuisce il progetto di database, l'output dell'azione di compilazione viene confrontato con il database di destinazione, se il database di destinazione esiste e vengono identificate le azioni richieste per aggiornare la destinazione in modo corrispondente al progetto di database. Questi aggiornamenti vengono distribuiti nel database di destinazione in base alle impostazioni in uso.

In alternativa, è possibile generare lo script di distribuzione (file con estensione SQL) e quindi modificarlo prima di distribuirlo a un server di gestione temporanea o a un server di produzione utilizzando Editor Transact-SQL o un altro strumento quale SQL Server Management Studio. L'azione di pulizia della compilazione consente di eliminare eventuali elementi di compilazione quali script, manifesti della distribuzione e file con estensione dbschema.

Script di distribuzione

È possibile creare script da eseguire prima o dopo gli script che creano o aggiornano la 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 Creazione e modifica di script di database.

Manifesto di distribuzione

Quando si compila il progetto di database, viene generato un manifesto della distribuzione. Il manifesto contiene tutte le informazioni di configurazione a livello di progetto necessarie per consentire la distribuzione senza necessità di disporre anche del file di progetto di database (con estensione dbproj).

Un file manifesto della distribuzione (con estensione deploymanifest) è un file XML la cui struttura è molto simile a un file di progetto MSBuild. Il file con estensione deploymanifest viene creato nella cartella sql\Configurazione nella cartella del progetto di database, dove Configurazione rappresenta la configurazione della build, ad esempio debug o versione.

Nell'esempio seguente viene illustrato il file con estensione deploymanifest per un progetto di database SQL Server 2008 vuoto denominato Empty2008DbProj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetConnectionString>Data Source=stevenpoauth\sql2k8;Integrated Security=True;Pooling=False</TargetConnectionString>
    <TargetDatabase>Empty2008DbProj</TargetDatabase>
    <DeployToDatabase>True</DeployToDatabase>
    <DeployToScript>True</DeployToScript>
    <SourceModel>Empty2008DbProj.dbschema</SourceModel>
    <DeployScriptFileName>Empty2008DbProj.sql</DeployScriptFileName>
    <DeploymentConfigurationFile>Empty2008DbProj_Database.sqldeployment</DeploymentConfigurationFile>
  </PropertyGroup>
  <PropertyGroup>
    <SqlCommandVariablesFile>Empty2008DbProj_Database.sqlcmdvars</SqlCommandVariablesFile>
  </PropertyGroup>
  <ItemGroup>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PostDeployment.sql">
      <__PostdeploymentMetadata>
      </__PostdeploymentMetadata>
    </DeploymentExtensionConfiguration>
    <DeploymentExtensionConfiguration Include="Empty2008DbProj_Script.PreDeployment.sql">
      <__PredeploymentMetadata>
      </__PredeploymentMetadata>
    </DeploymentExtensionConfiguration>
  </ItemGroup>
  <ItemGroup>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPlanOrderModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Build.SqlPrePostDeploymentModifier">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
    <DeploymentExtension Include="Microsoft.Data.Schema.Sql.Refactoring.SqlRefactoringDeploymentContributor">
      <Assembly>Microsoft.Data.Schema.Sql</Assembly>
      <Version>10.0.0.0</Version>
      <Token>sD9ffxHVCjo=</Token>
    </DeploymentExtension>
  </ItemGroup>
</Project>

Il file manifesto della distribuzione contiene uno o più nodi PropertyGroup che definiscono la configurazione predefinita utilizzata per la distribuzione. Il file manifesto della distribuzione include inoltre i nodi ItemGroup che contengono nodi DeploymentExtensionConfiguration e nodi Reference.

I nodi DeploymentExtensionConfiguration definiscono file di configurazione passati alle estensioni di distribuzione quando quest'ultima viene eseguita. Questi file di configurazione includono gli script pre-distribuzione e post-distribuzione, nonché il log di refactoring utilizzato per mantenere le finalità al momento della distribuzione.

I nodi Reference definiscono eventuali elementi a cui viene fatto riferimento dal progetto e che vengono copiati nella cartella di output quando si compila il progetto. I file a cui viene fatto riferimento vengono elaborati al momento della distribuzione per garantire che il modello del database venga ricreato in modo corretto.

Transazioni nello script di distribuzione

La maggior parte delle modifiche al database nello script di distribuzione vengono apportate nell'ambito di una transazione in modo che possano essere annullate qualora la distribuzione avesse esito negativo. Tuttavia, gli oggetti seguenti vengono creati, aggiornati o eliminati all'esterno della transazione di distribuzione.

Versione di SQL Server

Oggetti all'esterno della transazione di distribuzione

SQL Server 2008 

Appartenenze al ruolo del server

Endpoint

Indici full-text

Cataloghi full-text

Server collegati

Accessi server collegato

Sessioni eventi

Specifiche controllo server

Full Text Stop List

SQL Server 2005

Appartenenze al ruolo del server

Endpoint

Indici full-text

Cataloghi full-text

Server collegati

Accessi server collegato

Questi oggetti sono in genere esclusi dalla transazione di distribuzione poiché vengono gestiti mediante stored procedure di sistema.

Considerazioni relative alla distribuzione di modifiche in un database esistente

Quando si distribuiscono modifiche in un database esistente, alcune di esse possono causare perdite di dati. Se sussiste il rischio che una modifica possa causare la perdita di dati in una tabella ed è selezionata la casella di controllo Blocca distribuzione incrementale se dovesse verificarsi una perdita di dati, la distribuzione viene annullata. Questa casella di controllo è selezionata per impostazione predefinita, tuttavia è disponibile nella finestra delle proprietà del progetto. Per ulteriori informazioni, vedere Panoramica delle impostazioni del progetto di database.

I tipi di modifiche che possono causare perdite di dati sono le seguenti: eliminazione e ricreazione di una tabella, modifiche della dimensione di una colonna (da char(100) a char(50) oppure da nchar(100) a char(100)) o modifica delle regole di confronto di una colonna con un tipo di carattere.

Nota

Quando si utilizza il refactoring per rinominare un oggetto di database o spostare un oggetto di database in un altro schema, l'azione viene registrata nel file di log del refactoring. In fase di distribuzione, le informazioni presenti nel file di log consentono di mantenere lo scopo delle modifiche. È ad esempio possibile perdere dati in caso di ridenominazione di una tabella, in quanto tale modifica prevede l'eliminazione della tabella e la sua ricreazione con il nuovo nome. Grazie al file di log del refactoring, lo script di distribuzione è invece in grado di rinominare la tabella mantenendone lo scopo e i dati.

Recupero dalle distribuzioni non riuscite

È possibile che si verifichi una perdita di dati se la distribuzione non riesce al di fuori delle sezioni transazionali dello script di distribuzione. È pertanto consigliabile mettere i database condivisi in modalità utente singolo ed effettuarne il backup prima di procedere alla distribuzione.

File esclusi

Se si escludono file dal progetto di database, gli oggetti di database definiti all'interno di tali file non verranno inclusi nel file con estensione dbschema creato durante la compilazione del progetto di database. Gli oggetti non vengono distribuiti perché non sono inclusi nel file con estensione dbschema. Se si utilizzano ancora uno o più oggetti ma si desidera distribuire lavoro già completato, è possibile escludere file dalla compilazione in modo che solo gli oggetti pronti vengano inclusi nel file con estensione dbschema e distribuiti nel database di destinazione. 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). Per ulteriori informazioni, vedere Procedura: escludere file da un progetto di database.

Nota importanteImportante

È possibile che si verifichino perdite di dati se si escludono dal progetto di database oggetti presenti nel database di destinazione e quindi si distribuisce il progetto. Tali oggetti verranno eliminati dal database di destinazione se la casella di controllo Genera istruzioni DROP per oggetti contenuti nel database di destinazione, ma non nel progetto di database è selezionata nella configurazione della distribuzione.

Progetti server

I progetti Server contengono definizioni per gli oggetti inclusi nel database "master". Il nome del database di destinazione di un progetto server è sempre "master". Per ogni impostazione del server, è possibile specificare se si desidera verificarne il valore al momento della distribuzione del progetto server. Le impostazioni non verificate vengono ignorate. Se il valore di un'impostazione del server non corrisponde al valore di un'impostazione che si desidera verificare, la distribuzione ha esito negativo e viene visualizzato un messaggio di errore.

Compilazione da riga di comando

Oltre che dall'interfaccia utente di Visual Studio, è possibile eseguire azioni di compilazione, distribuzione e pulizia al prompt dei comandi mediante MSBuild.exe. È possibile specificare destinazioni per la compilazione, la distribuzione, la ricompilazione e la pulizia. Per impostazione predefinita, per i processi di compilazione e distribuzione vengono utilizzate le proprietà del progetto definite all'interno del progetto di database, nel file con estensione dbproj o dbproj.user. È comunque possibile eseguire l'override di queste proprietà al prompt dei comandi oppure in un file di risposta.

Nota importanteImportante

Prima di eseguire la compilazione da riga di comando, è necessario chiudere Visual Studio. Se si esegue una compilazione da riga di comando mentre Visual Studio è in esecuzione, alcuni errori potrebbero non essere rilevati.

È anche possibile utilizzare VSDBCMD.EXE per distribuire un file con estensione dbschema da un prompt dei comandi. È possibile utilizzare VSDBCMD in un computer che non dispone di Visual Studio installato. Per ulteriori informazioni, vedere Procedura: preparare un database per la distribuzione da un prompt dei comandi tramite VSDBCMD.EXE. In alternativa, è possibile generare lo script di distribuzione (file con estensione SQL) e quindi modificarlo prima di distribuirlo a un server di gestione temporanea o a un server di produzione utilizzando Editor Transact-SQL o un altro strumento quale SQL Server Management Studio.

Sintassi della riga di comando

È possibile compilare il progetto di database al prompt dei comandi mediante i seguenti esempi di sintassi:

  • MSBuild /target:Build NomeSoluzionePersonale.sln
    In questo esempio l'azione di compilazione viene eseguita sulla soluzione denominata NomeSoluzionePersonale.sln con le proprietà del progetto specificate nei file di progetto contenuti nella soluzione. Se la soluzione contiene più progetti di database, essi verranno compilati insieme a tutti gli altri elementi della soluzione. È anche possibile compilare un progetto di database specifico. La destinazione Build include gli script pre-distribuzione e di post-distribuzione nello script di compilazione creato.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" NomeProgetto.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:Deploy /p:UseSandboxSettings=false /p:DeploymentConfiguration=PercorsoDistribuzione\ConfigurazioneDistribuzioneAlternativa.deploymentconfig /p:SqlCommandVarsFile=PercorsoVariabile\VariabiliAlternative.sqlcmdvars /p:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" NomeProgetto.dbproj
    In questo esempio viene illustrato come distribuire il progetto di database, specificando un database di destinazione e una stringa di connessione diversi ed eseguendo l'override delle variabili di configurazione della distribuzione e di distribuzione.

  • MSBuild /target:Deploy /p:UseSandboxSettings=false /p:BuildScriptName=NomeScript.sql /p:outdir=PercorsoScriptCompilazione /p:TargetDatabase=DatabaseDestinazioneAggiornato;TargetConnectionString="Data Source=NomeIstanza\NomeDatabase;Integrated Security=True;Pooling=False" PercorsoProgetto\NomeProgetto.dbproj
    In questo esempio viene illustrato come distribuire un database da un computer diverso da quello sul quale è stata eseguita la compilazione. È ad esempio possibile utilizzare questa sintassi se si dispone di un computer centrale per la compilazione che crea uno script di compilazione ogni notte. È necessario specificare il nome dello script di compilazione, il percorso in cui esso è 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 come utilizzare un file di risposta per fornire gli argomenti della riga di comando. Il file, dbbuild.arf, può contenere qualsiasi argomento valido per MSBuild, inclusi quelli che consentono di eseguire l'override delle proprietà del progetto.

  • MSBuild /target:Rebuild NomeProgettoPersonale.dbproj
    In questo esempio viene eseguita la ricompilazione del progetto o della soluzione specificata, anche se non sono state apportate modifiche dopo l'ultima compilazione.

  • MSBuild /target:Clean NomeProgettoPersonale.dbproj
    In questo esempio viene illustrato come eliminare gli eventuali script di compilazione esistenti. Nella maggior parte dei casi, a questa azione fa seguito un'altra azione di compilazione o di distribuzione.

Nota

È necessario abbreviare /target: in /t: e /property: in /p:.

Per ulteriori informazioni, vedere Riferimenti alla riga di comando di MSBuild.

Per ulteriori informazioni sui file di risposta, vedere l'argomento File di risposta MSBuild nel sito Web Microsoft.

Nota

Per eseguire MSBuild.exe, è necessario utilizzare il prompt dei comandi di Visual Studio oppure eseguire il file batch vsvars32.bat. Il file batch è disponibile nella cartella specificata dalla variabile di ambiente %VS80COMNTOOLS%.

Software richiesto nel computer di compilazione

Visual Studio Team Foundation Server 2010 dispone di supporto nativo per compilazione, distribuzione, unit test e generatori per un progetto di database. Non è necessario installare Visual Studio nel computer di compilazione. Se non si utilizza Visual Studio Team Foundation Server 2010 nel computer di compilazione, è necessario installare Visual Studio 2010 Professional, Visual Studio 2010 Premium o Visual Studio 2010 Ultimate nel computer di compilazione.

Inoltre, se si desidera distribuire un database da Team Foundation Build non all'interno di un unit test del database, è necessario eseguire un'installazione aggiuntiva. È necessario copiare la cartella %PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy e il relativo contenuto, sottocartelle incluse, da un'installazione Visual Studio 2010 al computer di compilazione. Per ulteriori informazioni, vedere Procedura: distribuire modifiche con Team Foundation Build e Procedura dettagliata: definire un flusso di lavoro personalizzato per la distribuzione di un database da Team Foundation Build.

Proprietà progetto

Alcune proprietà dei progetti server e di database influiscono sulla modalità di compilazione e distribuzione dei progetti stessi. Tali proprietà sono archiviate nel file di progetto e nel file con estensione user, tuttavia è possibile eseguirne l'override al prompt dei comandi o in un file di risposta. Per ulteriori informazioni, vedere Procedura: configurare le impostazioni di compilazione dei progetti di database e server e Procedura: configurare le impostazioni di distribuzione dei progetti di database e di server.

Esecuzione dell'override delle proprietà del manifesto della distribuzione

È possibile eseguire l'override delle proprietà di distribuzione predefinite (quali la configurazione della distribuzione, la stringa di connessione o le variabili SQLCMD) quando si esegue la distribuzione dalla riga di comando. È possibile scegliere di procedere in tal modo se si desidera distribuire un file con estensione dbschema in più ambienti.

Se ad esempio si desidera distribuire uno schema definito in EnterpriseDB.dbproj in ambienti di sviluppo, test e produzione, è possibile utilizzare le righe di comando seguenti:

Ambiente di sviluppo

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Development.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Development.sqlcmdvars /p:TargetConnectionString="Data Source=DEV\sql2008;Integrated Security=true;Pooling=false"

Ambiente di test

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\UserTest.sqldeployment /p:SqlCommandVariablesFile=sql\debug\UserTest.sqlcmdvars /p:TargetConnectionString="Data Source=USERTEST\sql2008;Integrated Security=true;Pooling=false"

Ambiente di produzione

MSBuild EnterpriseDB.dbproj /t:Deploy /p:UseSandboxSettings=false /p:DeploymentConfigurationFile=sql\debug\Production.sqldeployment /p:SqlCommandVariablesFile=sql\debug\Production.sqlcmdvars /p:TargetConnectionString="Data Source=PRODUCTION\sql2008;Integrated Security=true;Pooling=false"

In ogni ambiente, occorre specificare un file di configurazione della distribuzione diverso, un file delle variabili SQLCMD diverso e una stringa di connessione diversa.

Vedere anche

Attività

Procedura: compilare un progetto di database per generare un file di schema compilato (con estensione dbschema)

Procedura: distribuire modifiche in un database nuovo o esistente

Procedura dettagliata: creazione e distribuzione di un nuovo database con controllo delle versioni

Procedura dettagliata: distribuzione delle modifiche a un database esistente con controllo della versione

Concetti

Compilazione e distribuzione di database in un ambiente di sviluppo isolato

Compilazione e distribuzione di database in un ambiente di produzione o gestione temporanea

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2010

È stato chiarito quale software è richiesto nel computer di compilazione per risolvere i dubbi emersi nei forum MSDN.

Commenti e suggerimenti dei clienti.