Confrontare e sincronizzare gli schemi di database
Le informazioni contenute in questo argomento sono valide per:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
È possibile utilizzare Visual Studio Premium o Visual Studio Ultimate per confrontare uno schema di destinazione con uno schema di origine. Per ogni differenza riscontrata, è possibile specificare se aggiornare il database di destinazione affinché corrisponda al database di origine. È quindi possibile scrivere tali aggiornamenti direttamente nella destinazione oppure esportare lo script di aggiornamento nell'editor Transact-SQL o in un file. È possibile inoltre salvare i confronti come parte del progetto di database o come file autonomo. Il salvataggio dei confronti consente di ripeterli più facilmente o di eseguire nuovamente la sincronizzazione tra la stessa origine e la stessa destinazione.
Tipi di confronti tra schemi
È possibile confrontare le entità seguenti in cui sono contenute definizioni dello schema di database:
Database SQL Server: database in esecuzione su un'istanza di SQL Server 2008 o di SQL Server 2005
Progetto di database: progetto contenente definizioni per un database di SQL Server 2008 o SQL Server 2005, tramite la cui compilazione viene generato un file con estensione dbschema
Progetto server: progetto contenente definizioni per oggetti server e oggetti nel database 'master' in un server di SQL Server 2008 o SQL Server 2005, tramite la cui compilazione viene generato un file con estensione dbschema
Progetto Componente applicazione del livello dati (DAC, Data-tier Application Component): progetto tramite la cui compilazione viene generato un file con estensione dacpac
File con estensione dbschema: output della compilazione di un progetto di database o server
File con estensione dacpac : output della compilazione di un progetto Componente applicazione del livello dati (DAC)
Nella tabella seguente vengono mostrati i tipi di schemi che è possibile confrontare e viene indicato se è possibile scrivere gli aggiornamenti nel database di destinazione:
Origine (sotto), Destinazione (affianco) |
Database SQL Server |
Progetto di database |
File con estensione dbschema |
Progetto server |
Progetto DAC |
File con estensione dacpac |
---|---|---|---|---|---|---|
Database SQL Server |
Confronto + aggiornamento |
Confronto + aggiornamento |
Confronto |
Confronto + aggiornamento |
Confronto |
Confronto |
Progetto di database |
Confronto + aggiornamento |
Confronto + aggiornamento |
Confronto |
Nessuno |
Nessuno |
Nessuno |
File con estensione dbschema |
Confronto + aggiornamento |
Confronto + aggiornamento |
Confronto |
Confronto + aggiornamento |
Nessuno |
Nessuno |
Progetto server |
Confronto + aggiornamento |
Nessuno |
Confronto |
Confronto + aggiornamento |
Nessuno |
Nessuno |
Progetto DAC |
Confronto |
Nessuno |
Nessuno |
Nessuno |
Confronto + aggiornamento |
Confronto |
File con estensione dacpac |
Confronto |
Nessuno |
Nessuno |
Nessuno |
Confronto + aggiornamento |
Confronto |
Per leggere questa tabella, trovare la riga per lo schema di origine nella colonna all'estrema sinistra. Quindi, trovare la colonna per lo schema di destinazione nella riga superiore. Nell'intersezione tra questa colonna e questa riga è indicato se è solo possibile confrontare l'origine e la destinazione oppure se è possibile eseguire il confronto e quindi facoltativamente aggiornare lo schema di destinazione.
Non è possibile eseguire il confronto di uno schema di server in base a uno schema di database o viceversa. Sono inclusi gli schemi in formato di file con estensione dbschema. È possibile, ad esempio, confrontare un progetto server con un file con estensione dbschema creato da un progetto server.
È possibile confrontare due progetti di database solo se sono contenuti all'interno della stessa soluzione in Visual Studio.
Attenzione |
---|
Sebbene sia possibile confrontare un database di origine con un progetto di database di destinazione (con estensione dbproj), è necessario modificare il progetto di database e distribuire le modifiche nel database. Quando un utente modifica il progetto (con estensione dbproj) e lo distribuisce, riduce il rischio che le modifiche entrino in conflitto con le modifiche apportate da un altro membro del team perché il progetto è sottoposto al controllo delle versioni. |
Protezione dalla perdita di dati in caso di aggiornamento degli schemi di database
Quando si utilizza Confronto schema per aggiornare gli schemi di database, è possibile che si verifichi una perdita di dati. Per evitare questo problema, è necessario prestare particolare attenzione ai nomi degli oggetti presenti nell'origine e nella destinazione, soprattutto prima di aggiornare lo schema nella destinazione.
Si potrebbe, ad esempio, rinominare una tabella da Order_Details a OrderDetails nel database di origine, ma non nel database di destinazione e confrontare quindi i due database. Prima della sincronizzazione, i dati di entrambe le tabelle sono identici. Tuttavia, quando si aggiorna la destinazione, la tabella Order_Details viene eliminata e viene creata una tabella Order Details. È possibile che tutti i dati presenti nella tabella Order_Details vengano persi.
Per evitare la perdita di dati, scegliere Opzioni dal menu Strumenti e selezionare la casella di controllo Blocca aggiornamenti dello schema se si verifica una perdita di dati. È inoltre opportuno eseguire sempre il backup del database prima di scrivervi gli aggiornamenti. È possibile specificare anche le opzioni per un confronto quando si confrontano gli schemi. Per ulteriori informazioni, vedere Procedura: impostare le opzioni per il confronto di schemi di database.
Importante |
---|
Se si utilizza il refactoring per rinominare gli oggetti nel progetto di database, il log di refactoring consente di evitare la perdita dei dati durante la compilazione e la distribuzione del database. Questo log mantiene inalterato lo scopo delle modifiche. Ad esempio, è possibile rinominare le tabelle sul posto. |
Differenze tra confronto schema e distribuzione incrementale
Durante la distribuzione degli aggiornamenti in un database esistente si verifica un processo molto simile al Confronto schema utilizzato per sincronizzare due schemi di database. Il Confronto schema presenta tuttavia una differenza fondamentale, dal momento che, per impostazione predefinita, vengono ignorate le proprietà estese.
È possibile modificare le opzioni di Confronto schema relativamente a tutte le sessioni o solo alla sessione corrente, se non si desidera ignorare le proprietà estese e le autorizzazioni. Per ulteriori informazioni, vedere Procedura: impostare le opzioni per il confronto di schemi di database.
Attività comuni
Nella tabella seguente sono incluse le descrizioni di attività comuni che supportano questo scenario e vengono forniti i collegamenti a ulteriori informazioni su come completare tali attività.
Attività comuni |
Contenuto di supporto |
---|---|
Fare pratica: è possibile eseguire la procedura dettagliata introduttiva per acquisire familiarità con il confronto di due database o di un database e un progetto (con estensione dbproj). |
Procedura dettagliata: confronto degli schemi di due database Procedura dettagliata: confronto degli schemi di un database e di un progetto di database |
Impostare opzioni per controllare il confronto degli schemi: è possibile configurare dettagli che consentono di controllare la modalità di confronto degli schemi. È possibile ignorare tipi specifici di differenze, ad esempio gli spazi vuoti, i gruppi di file e i commenti. È possibile inoltre ignorare determinate categorie di oggetti, ad esempio gli utenti o gli accessi. L'utente può specificare le opzioni che consentono di controllare lo script di aggiornamento generato. |
Procedura: impostare le opzioni per il confronto di schemi di database |
Confrontare database o oggetti server e aggiornare facoltativamente la destinazione in base all'origine: si specificano uno schema di origine e uno di destinazione da confrontare e i risultati vengono visualizzati nella finestra Confronto schema. È possibile visualizzare i dettagli delle differenze e lo script di aggiornamento da utilizzare per la sincronizzazione del database. Ogni confronto di schemi può essere salvato nel progetto o in un file autonomo con estensione scmp. Dopo aver specificato azioni per ogni differenza tra gli schemi di origine e di destinazione, è possibile scrivere gli aggiornamenti nella destinazione. È possibile inoltre esportare lo script di aggiornamento nell'editor Transact-SQL o in un file in modo da poterlo rivedere prima di applicare le modifiche alla destinazione. |
Procedura: confrontare gli schemi di database Informazioni sui risultati di Confronto schema |
Risolvere i problemi: è possibile acquisire ulteriori informazioni sulla risoluzione dei problemi comuni che possono verificarsi quando si confrontano e sincronizzano gli schemi di database. |
Informazioni sui risultati di Confronto schema
Nella finestra Confronto schema sono visualizzate quattro colonne per ogni oggetto sottoposto al confronto. Nella tabella riportata di seguito viene fornita una descrizione del contenuto di ciascuna colonna.
Colonna |
Valori |
---|---|
Stato |
Ad esempio, è possibile modificare una definizione della tabella nello schema di origine, ma non nello schema di destinazione e quindi confrontarli. Le tabelle saranno contrassegnate come Definizione diversa e lo schema contenente tali tabelle come Dipendenze diverse. |
NomeOrigine (Origine {progetto, database o file di progetto (estensione dbschema)}) |
Nome del progetto, del database o del file di progetto di origine sottoposto al confronto. |
Azione di aggiornamento |
Nota
L'azione predefinita è determinata dallo stato.Per gli oggetti impostati su Uguale, l'azione predefinita è Ignora e non è possibile modificarla.Per gli oggetti impostati su Nuovo, l'azione predefinita è Crea, ma è possibile specificare Ignora.Per gli oggetti impostati su Mancante, l'azione predefinita è Elimina, ma è possibile specificare Ignora.Per Definizione diversa l'azione predefinita è Aggiorna, ma è possibile specificare Ignora.Per gli oggetti diversi, l'azione predefinita è Ignora e non è possibile modificarla (in questo caso, l'oggetto è uguale, ma vi sono inclusi oggetti nuovi, mancanti o modificati).
|
NomeDestinazione (Destinazione {progetto, database o file di progetto (estensione dbschema)}) |
Nome del progetto, del database o del file di progetto di destinazione sottoposto al confronto. |
Scenari correlati
Confrontare e sincronizzare i dati in una o più tabelle e i dati di un database di riferimento
È possibile utilizzare Confronto dati per sincronizzare i dati delle tabelle nei database di origine e di destinazione.Ridenominazione di tutti i riferimenti a un oggetto di database
È possibile utilizzare il refactoring per rinominare tutti i riferimenti a un oggetto di database. Durante la compilazione e la distribuzione, viene utilizzato il log di refactoring per mantenere lo scopo delle modifiche e ridurre il rischio di perdita dei dati.Compilazione e distribuzione di database in un ambiente di sviluppo isolato
È possibile aggiornare il database di destinazione tramite Confronto schema, ma i team dovranno poi modificare il progetto di database e quindi compilare e distribuire le modifiche nel database di destinazione. Seguendo questa procedura, si mantiene lo scopo di tutte le operazioni di refactoring eseguite sul progetto di database. Si riduce inoltre il rischio che le modifiche vengano sovrascritte da un altro membro del team che utilizza Confronto schema per aggiornare il database.
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Giugno 2010 |
Sono state aggiunte informazioni su come leggere la prima tabella nell'argomento per soddisfare i commenti e suggerimenti dei clienti. |
Commenti e suggerimenti dei clienti. |
Agosto 2010 |
È stato chiarito che i processi possono essere confrontati solo se sono contenuti nella stessa soluzione. |
Commenti e suggerimenti dei clienti. |