Aggiornamento di applicazioni livello dati

Il processo di aggiornamento di un'applicazione livello dati distribuita con una nuova versione risulta più semplice rispetto all'utilizzo di script per distribuire database o modifiche dei database. Lo sviluppatore del database deve semplicemente compilare un pacchetto di applicazione livello dati in cui vengono descritti lo schema e le proprietà della nuova versione. Il processo di aggiornamento dell'applicazione livello dati consente di confrontare il nuovo schema con lo schema distribuito esistente, quindi di eseguire dinamicamente le azioni necessarie per passare al nuovo schema.

Processo di aggiornamento

Il processo di aggiornamento dell'applicazione livello dati (DAC) di SQL Server consente di convertire un'applicazione livello dati distribuita in una versione diversa della stessa applicazione. Ad esempio, per eseguire l'aggiornamento dalla versione Finanza 1.0 alla versione Finanza 2.0. Nei passaggi seguenti viene illustrato un processo di distribuzione semplice:

  • Uno sviluppatore di database completa lo sviluppo della versione 1.0 di un'applicazione livello dati denominata Finanza, quindi compila un pacchetto di applicazione livello dati denominato FinanzaVersione1.dacpac.

  • Un amministratore del database distribuisce l'applicazione livello dati Finanza 1.0. L'istanza di produzione del motore di database dispone ora di un'applicazione livello dati implementata denominata Finanza, la cui versione è la 1.0 e con un database associato denominato Finanza.

  • Lo sviluppatore del database inizia quindi a lavorare sulla versione successiva e, al termine delle operazioni di sviluppo, compila il pacchetto FinanzaVersione2.dacpac.

  • L'amministratore del database pianifica il processo di aggiornamento dell'applicazione livello dati. Esegue il backup del database e controlla il contenuto del pacchetto di applicazione livello dati nonché un report delle azioni che verranno eseguite dall'aggiornamento per assicurarsi che non provochino problemi nel database di produzione.

  • L'amministratore del database esegue quindi un aggiornamento dell'applicazione livello dati specificando sia l'applicazione livello dati con la versione corrente distribuita 1.0 sia il pacchetto di applicazione livello dati con la versione 2.0. Sono disponibili due opzioni per l'esecuzione dell'aggiornamento:

    • Eseguire un aggiornamento sul posto utilizzando uno script di Windows PowerShell tramite cui viene chiamato il metodo IncrementalUpgrade() dell'applicazione livello dati. L'aggiornamento sul posto consente di modificare lo schema del database esistente affinché corrisponda allo schema definito nella nuova versione dell'applicazione livello dati.

    • Eseguire un aggiornamento affiancato utilizzando il metodo Upgrade() dell'applicazione livello dati o la procedura guidata Aggiornamento di un'applicazione livello dati. L'aggiornamento affiancato consente di creare un nuovo database con il nuovo schema e di trasferire i dati dal database originale a quello nuovo.

  • Dopo il completamento dell'aggiornamento, il nome dell'applicazione livello dati aggiornata è ancora Finanza, ma la versione dell'applicazione livello dati è ora 2.0.

Modifica dei database dopo la distribuzione

Si dice che un database è sfasato rispetto all'applicazione livello dati associata se vengono apportate modifiche al database tramite un meccanismo diverso dall'aggiornamento dell'applicazione livello dati. Ad esempio, è possibile utilizzare un'istruzione CREATE TRIGGER per aggiungere un nuovo trigger o un'istruzione ALTER TABLE per modificare la struttura di una tabella. Alcuni tipi di modifiche possono impedire il completamento del processo di aggiornamento dell'applicazione livello dati, a seconda delle opzioni di aggiornamento specificate. Le modifiche non saranno inoltre presenti nel database aggiornato.

L'operazione di aggiornamento dell'applicazione livello dati consente di controllare le differenze tra lo schema del database corrente e la definizione dell'applicazione livello dati archiviata nel database di sistema msdb. Se vengono rilevate differenze, viene visualizzata una finestra di dialogo di avviso in cui tali differenze vengono elencate. È possibile procedere con l'aggiornamento solo dopo aver analizzato le differenze segnalate e aver implementato processi o script per trasferire eventuali oggetti o dati che non possono essere trasferiti tramite l'aggiornamento ma che sono necessari nel nuovo sistema.

Dopo aver completato l'aggiornamento, nel database saranno contenuti tutti gli oggetti definiti nella nuova versione dell'applicazione livello dati e nel formato specificato nella nuova applicazione livello dati. Nella maggior parte dei casi, questo sarà il formato richiesto dalla versione delle applicazioni associate alla nuova versione dell'applicazione livello dati e al nuovo database. Analizzare il report delle modifiche dell'aggiornamento con attenzione e trasferire solo gli oggetti necessari nel nuovo sistema. È ad esempio possibile che non sia un errore se diversi oggetti presenti nell'applicazione livello dati e nel database correnti non sono presenti nel nuovo pacchetto di applicazione livello dati. Possono essere associati a caratteristiche obsolete o riprogettate nelle nuove versioni delle applicazioni in cui viene utilizzata l'applicazione livello dati.

Per un aggiornamento sul posto, gli oggetti modificati non vengono mantenuti. È necessario salvare le definizioni oggetto e i dati prima di avviare l'aggiornamento. Per un aggiornamento affiancato, gli oggetti e i dati vengono mantenuti nel database originale rinominato. Tutti gli oggetti modificati devono essere trasferiti manualmente nel nuovo database.

Per ulteriori informazioni su come creare uno script per trasferire gli oggetti nel nuovo database, vedere Procedura: Generazione di uno script (SQL Server Management Studio).

Nei progetti di applicazione livello dati è possibile specificare script di pre-distribuzione e di post-distribuzione. Si tratta di script Transact-SQL tramite cui è possibile eseguire qualsiasi azione, inclusa la creazione di oggetti non supportati in un'applicazione livello dati. Se nell'applicazione livello dati originale è contenuto uno script di post-distribuzione tramite cui sono stati creati oggetti non supportati in un'applicazione livello dati, tali oggetti devono essere aggiornati separatamente utilizzando un meccanismo che consenta di rilasciarli durante un aggiornamento sul posto o di lasciarli nel database originale tramite un aggiornamento affiancato.

Aggiornamento sul posto

Un aggiornamento sul posto consente di eseguire le azioni seguenti:

  • Consente di verificare che l'applicazione livello dati distribuita e il pacchetto di applicazione livello dati dispongano entrambi dello stesso nome dell'applicazione (ad esempio entrambi i nomi sono impostati su Finanza). Inoltre consente di valutare se l'istanza del motore di database soddisfa i requisiti specificati nei criteri di selezione server (se definiti) nella nuova versione dell'applicazione livello dati e se nel database esistente sono contenuti oggetti non supportati in un'applicazione livello dati.

  • Consente di eseguire tutte le modifiche, ad esempio le istruzioni CREATE, ALTER e DROP, necessarie per la corrispondenza dello schema del database con quello definito nella nuova versione dell'applicazione livello dati.

Se l'opzione Ignora perdita dati è impostata su True, tramite l'aggiornamento dell'applicazione livello dati è possibile eseguire azioni che consentono la rimozione dei dati. Ad esempio, se una tabella è presente nel database corrente ma non nello schema della nuova applicazione livello dati, viene rilasciata dall'aggiornamento. Prima di eseguire l'operazione, l'amministratore del database deve archiviare tutti i dati che possono essere necessari dopo l'aggiornamento.

Gli aggiornamenti sul posto sono supportati sia in SQL Azure sia in istanze del Motore di database. Per gli aggiornamenti sul posto è richiesto Framework 1.1 applicazione livello dati e una nuova procedura guidata per l'aggiornamento dell'applicazione livello dati, entrambi inclusi in SQL Server 2008 R2 Service Pack 1 (SP1).

Aggiornamento affiancato

Gli aggiornamenti affiancati non sono supportati in SQL Azure né saranno supportati nella prossima versione di SQL Server. Il meccanismo di aggiornamento consigliato è l'aggiornamento sul posto incluso in SQL Server 2008 R2 SP1.

Un aggiornamento affiancato consente di eseguire le azioni seguenti:

  • Consente di verificare che l'applicazione livello dati distribuita e il pacchetto di applicazione livello dati dispongano entrambi dello stesso nome dell'applicazione (ad esempio entrambi i nomi sono impostati su Finanza). Inoltre, consente di valutare se l'istanza del motore di database soddisfa i requisiti specificati nei criteri di selezione server (se definiti) nella nuova versione dell'applicazione livello dati e se nel database esistente sono contenuti oggetti non supportati in un'applicazione livello dati.

  • Consente di distribuire la nuova versione dell'applicazione livello dati dal pacchetto di applicazione livello dati. In questo modo viene creato un nuovo database con un nome temporaneo.

  • Imposta il database originale come di sola lettura, se non lo è già, e copia i dati nel nuovo database.

  • Se il database originale è in modalità di sola lettura, il nuovo database viene impostato come di sola lettura.

  • Il database originale viene rinominato aggiungendo una stringa alla fine del nome del database.

  • Al nuovo database viene assegnato il nome del database originale.

  • Dopo che l'amministratore del database ha verificato che il nuovo database funziona correttamente, è possibile archiviare il database originale.

Le modifiche del database possono interessare il trasferimento dei dati di una tabella al nuovo database. Le tabelle possono avere uno degli stati seguenti relativamente alle modifiche del database:

  • La struttura della tabella è la stessa in tutti e tre i percorsi: la definizione dell'applicazione livello dati corrente in msdb, il database corrente e la nuova applicazione livello dati. La tabella sarà presente nel nuovo database e tramite l'operazione di aggiornamento i dati verranno trasferiti nel nuovo database. Il trasferimento viene eseguito utilizzando un'istruzione INSERT basata su un'istruzione SELECT della tabella precedente.

  • La tabella non è presente nella definizione dell'applicazione livello dati o nel database corrente, ma è definita nella nuova applicazione livello dati. La tabella sarà presente nel nuovo database, ma non conterrà dati perché non esistono dati da trasferire.

  • La tabella non è presente nella definizione dell'applicazione livello dati corrente, ma è presente nel database corrente e nella nuova applicazione livello dati. La tabella sarà presente nel nuovo database ma tramite l'operazione di aggiornamento non verranno trasferiti i dati. Sarà necessario trasferire i dati manualmente al termine dell'aggiornamento.

  • La tabella è presente nella definizione DAC e nel database correnti, ma è non presente nel nuovo pacchetto di applicazione livello dati. La tabella non sarà presente nel nuovo database. Se la tabella è necessaria nel nuovo sistema, crearla manualmente e trasferire i dati al termine dell'aggiornamento.

  • La tabella è presente in tutte e tre le posizioni, ma la sua struttura nella definizione DAC corrente e nel database è diversa da quella nel nuovo pacchetto di applicazione livello dati. La tabella sarà presente nel nuovo database con la struttura definita nella nuova applicazione livello dati.

    • Se i nomi della tabella e delle colonne non corrispondono, tramite l'operazione di aggiornamento verrà segnalato che i dati non sono stati trasferiti. Sarà necessario trasferire i dati manualmente al termine dell'aggiornamento.

    • Se i nomi della tabella e delle colonne sono gli stessi, tramite l'operazione di aggiornamento si tenterà di trasferire i dati. Se il tipo di dati di una o più colonne viene modificato e non è compatibile, l'istruzione INSERT non verrà eseguita correttamente e provocherà il rollback del processo di aggiornamento.

È possibile utilizzare qualsiasi meccanismo per trasferire i dati alla nuova versione della tabella. È possibile utilizzare un'istruzione INSERT che seleziona dati dalla versione precedente della tabella. È inoltre possibile utilizzare una delle tecniche di inserimento bulk descritte nella sezione Importazione ed esportazione di dati dati per operazioni bulk.

Cronologia modifiche

Contenuto aggiornato

Descrizione dell'aggiornamento sul posto introdotto da Framework 1.1 applicazione livello dati. Rimozione del contenuto duplicato in altri argomenti.

SQL Server 2008 R2 SP1 dispone di supporto completo per aggiornamenti sul posto, inclusi Framework 1.1 applicazione livello dati e una nuova procedura guidata per l'aggiornamento dell'applicazione livello dati.