Demonstra Passo a passo: Comparando os esquemas de dois bancos de dados
Este tópico se aplica a:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual StudioExpress |
---|---|---|---|
Esta explicação passo a passo, você irá comparar o esquemas de dois bancos de dados usando o Visual Studio. A ação de comparação de esquema também gera uma Linguagem de definição de dados (DDL) script a partir das diferenças. Você usar esse arquivo para sincronizar o esquema da destino com que o fonte. Para obter mais informações, consulte Comparar e sincronizar esquemas de banco de dados.
Você seguirá esses procedimentos, esta explicação passo a passo:
Criar um banco de dados simple. Se você tiver concluído Demonstra Passo a passo: Comparando os esquemas de um projeto de banco de dados e o banco de dados, você pode usar o banco de dados resultante e pode ignorar esta parte da explicação passo a passo.
Criar um banco de dados vazio. O banco de dados de CompareProjectDB serve como fonte e criar um banco de dados vazio para servir como o destino.
Comparar os esquemas de dois bancos de dados. Comparando os esquemas, localizar as diferenças estruturais entre os bancos de dados, exibir as diferenças em uma tabela e gerar um script DDL que expressa as diferenças.
Examine o script de sincronização. Verifique o script DDL e você pode editá-lo antes de executá-lo.
Atualizar o banco de dados de destino. Execute o script DDL para alterar o esquema de destino.
Pré-requisitos
Você deve ter os seguintes produtos instalados:
SQL Server 2008
Permissões para criar e atualizar os bancos de dados no servidor de banco de dados de destino
Visual Studio PremiumouVisual Studio Ultimate
Criar um banco de dados Simple
Você criará um banco de dados simple, realizando as seguintes tarefas:
Criar um script que contém um esquema de banco de dados
Crie um projeto de banco de dados e importar o esquema
Implantar o projeto de banco de dados para um ambiente de desenvolvimento isolado
Criar um Script que contém um esquema de banco de dados
Para criar um script a partir do qual você pode importar um esquema
Sobre o arquivo , aponte para novae, em seguida, clique em arquivo.
O Novo arquivo caixa de diálogo aparece.
No categorias , clique em Geral se já não estiver realçado.
No modelos de lista, clique em Arquivo Sqle, em seguida, clique em Abrir.
O Transact-SQL editor será aberta.
Copie o seguinte Transact-SQL code e colá-lo para o Transact-SQL editor.
PRINT N'Creating Sales...'; GO CREATE SCHEMA [Sales] AUTHORIZATION [dbo]; GO PRINT N'Creating Sales.Customer...'; GO CREATE TABLE [Sales].[Customer] ( [CustomerID] INT IDENTITY (1, 1) NOT NULL, [CustomerName] NVARCHAR (40) NOT NULL, [YTDOrders] INT NOT NULL, [YTDSales] INT NOT NULL ); GO PRINT N'Creating Sales.Orders...'; GO CREATE TABLE [Sales].[Orders] ( [CustomerID] INT NOT NULL, [OrderID] INT IDENTITY (1, 1) NOT NULL, [OrderDate] DATETIME NOT NULL, [FilledDate] DATETIME NULL, [Status] CHAR (1) NOT NULL, [Amount] INT NOT NULL ); GO PRINT N'Creating Sales.Def_Customer_YTDOrders...'; GO ALTER TABLE [Sales].[Customer] ADD CONSTRAINT [Def_Customer_YTDOrders] DEFAULT 0 FOR [YTDOrders]; GO PRINT N'Creating Sales.Def_Customer_YTDSales...'; GO ALTER TABLE [Sales].[Customer] ADD CONSTRAINT [Def_Customer_YTDSales] DEFAULT 0 FOR [YTDSales]; GO PRINT N'Creating Sales.Def_Orders_OrderDate...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [Def_Orders_OrderDate] DEFAULT GetDate() FOR [OrderDate]; GO PRINT N'Creating Sales.Def_Orders_Status...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [Def_Orders_Status] DEFAULT 'O' FOR [Status]; GO PRINT N'Creating Sales.PK_Customer_CustID...'; GO ALTER TABLE [Sales].[Customer] ADD CONSTRAINT [PK_Customer_CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating Sales.PK_Orders_OrderID...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [PK_Orders_OrderID] PRIMARY KEY CLUSTERED ([OrderID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF); GO PRINT N'Creating Sales.FK_Orders_Customer_CustID...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [FK_Orders_Customer_CustID] FOREIGN KEY ([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) ON DELETE NO ACTION ON UPDATE NO ACTION; GO PRINT N'Creating Sales.CK_Orders_FilledDate...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [CK_Orders_FilledDate] CHECK ((FilledDate >= OrderDate) AND (FilledDate < '01/01/2010')); GO PRINT N'Creating Sales.CK_Orders_OrderDate...'; GO ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [CK_Orders_OrderDate] CHECK ((OrderDate > '01/01/2005') and (OrderDate < '01/01/2020')); GO PRINT N'Creating Sales.uspCancelOrder...'; GO CREATE PROCEDURE [Sales].[uspCancelOrder] @OrderID INT AS BEGIN DECLARE @Delta INT, @CustomerID INT BEGIN TRANSACTION SELECT @Delta = [Amount], @CustomerID = [CustomerID] FROM [Sales].[Orders] WHERE [OrderID] = @OrderID; UPDATE [Sales].[Orders] SET [Status] = 'X' WHERE [OrderID] = @OrderID; UPDATE [Sales].[Customer] SET YTDOrders = YTDOrders - @Delta WHERE [CustomerID] = @CustomerID COMMIT TRANSACTION END GO PRINT N'Creating Sales.uspFillOrder...'; GO CREATE PROCEDURE [Sales].[uspFillOrder] @OrderID INT, @FilledDate DATETIME AS BEGIN DECLARE @Delta INT, @CustomerID INT BEGIN TRANSACTION SELECT @Delta = [Amount], @CustomerID = [CustomerID] FROM [Sales].[Orders] WHERE [OrderID] = @OrderID; UPDATE [Sales].[Orders] SET [Status] = 'F', [FilledDate] = @FilledDate WHERE [OrderID] = @OrderID; UPDATE [Sales].[Customer] SET YTDSales = YTDSales - @Delta WHERE [CustomerID] = @CustomerID COMMIT TRANSACTION END GO PRINT N'Creating Sales.uspNewCustomer...'; GO CREATE PROCEDURE [Sales].[uspNewCustomer] @CustomerName NVARCHAR (40) AS BEGIN INSERT INTO [Sales].[Customer] (CustomerName) VALUES (@CustomerName); SELECT SCOPE_IDENTITY() END GO PRINT N'Creating Sales.uspPlaceNewOrder...'; GO CREATE PROCEDURE [Sales].[uspPlaceNewOrder] @CustomerID INT, @Amount INT, @OrderDate DATETIME, @Status CHAR (1)='O' AS BEGIN DECLARE @RC INT BEGIN TRANSACTION INSERT INTO [Sales].[Orders] (CustomerID, OrderDate, FilledDate, Status, Amount) VALUES (@CustomerID, @OrderDate, NULL, @Status, @Amount) SELECT @RC = SCOPE_IDENTITY(); UPDATE [Sales].[Customer] SET YTDOrders = YTDOrders + @Amount WHERE [CustomerID] = @CustomerID COMMIT TRANSACTION RETURN @RC END GO
Sobre o arquivo menu, clique em Salvar SqlQuery_1.sql como.
O Salvar arquivo como caixa de diálogo aparece.
Em nome do objeto, tipo SampleImportScript.sql.
Você pode salvar o arquivo em qualquer local no computador. Anote a localização porque você deve usar esse script no próximo procedimento.
Clique em Save.
No menu File, clique em Close Solution.
Em seguida, você cria um projeto de banco de dados e importar o esquema do script que você criou.
Crie um projeto de banco de dados e importar um esquema.
Para criar um projeto de banco de dados
Sobre o arquivo , aponte para novae clique em projeto.
A caixa de diálogo New Project será exibida.
Em Modelos instalados, expanda o banco de dados nó e depois clique em SQL Server.
Na lista de modelos, clique em Projeto de banco de dados de 2008 do SQL Server.
Em nome, digite CompareProjectDB.
No solução , clique em Criar solução se já não estiver realçado.
Selecione o Create directory for solution caixa de seleção se não estiver selecionada.
Limpar o Add to Source Control caixa de seleção se ele já não estiver desmarcada e clique em OK.
O projeto de banco de dados é criado e aparece na Solution Explorer. Em seguida, você deve importar o esquema de banco de dados de um script.
Para importar um esquema de banco de dados de um script
Sobre o projeto menu, clique em Importar Script.
Clique em próximo depois de ler a página de boas-vindas.
Clique em Procurare indicar o caminho onde você salvou o arquivo SampleImportScript.sql.
Clique duas vezes no arquivo SampleImportScript.sql e, em seguida, clique em Concluir.
O script é importado, e os objetos que são definidos no script são adicionados ao seu projeto de banco de dados.
Revise o resumo e, em seguida, clique em Concluir para concluir a operação.
Observação O procedimento Sales.uspFillOrder contém um erro intencional de codificação que descobrir e corrigir na unidade de teste de explicação passo a passo.
Para examinar o projeto resultante
Em Solution Explorer, expanda o Os objetos de esquema nó filho.
Explore os subnós sob o Os objetos de esquema o nó na hierarquia.
Solution Explorer contém os arquivos que definem os objetos de banco de dados.
Sobre o Exibir menu, clique em Visualização do esquema de banco de dados.
Em Visualização Esquema, expanda o nó de CompareProjectDB.
Explore os subnós sob o nó de CompareProjectDB na hierarquia.
Modo de exibição do esquema contém os objetos que são definidos nos arquivos que aparecem no Solution Explorer.
Implantando em um ambiente de desenvolvimento isolado
Em seguida, você pode implantar o projeto para criar um banco de dados que tem o esquema importado, mas nenhum dado. Criar o banco de dados em um o ambiente de desenvolvimento isolado, ou o modo seguro. Portanto, você pode desenvolver e testar o banco de dados sem interferência de outros esforços.
Para configurar e construir o projeto de banco de dados
Em Solution Explorer, clique no projeto de banco de dados CompareProjectDB.
Sobre o projeto menu, clique em Propriedades de CompareProjectDB.
Aparece a caixa de diálogo Propriedades do projeto.
Clique o Deploy guia.
No definir configurações de implantação para , clique em Meu ambiente de desenvolvimento isolado. Definindo configurações de seu ambiente de desenvolvimento isolado, você pode usar as configurações de implantação diferentes daqueles que serão usados em outros ambientes, como, por exemplo, o servidor de teste ou produção.
No A ação implantar , clique em criar um script de implantação (. SQL) e implantar banco de dados.
Em Configurações de banco de dados de destino, clique em Editar.
O Propriedades de conexão caixa de diálogo aparece.
Defina as propriedades de conexão do banco de dados que você deseja criar e clique em OK.
No Conexão de destino caixa, a seqüência de caracteres de conexão correta é exibida.
Aviso
Você deve criar o banco de dados em um servidor de teste, um servidor de desenvolvimento ou no computador local. Você não deve especificar o servidor de produção.
Em nome do banco de dados de destino, digite CompareProjectDB.
Ao lado de arquivo de configuração de implantação, clique em Editar.
Limpar o implantação incremental do bloco se poderá ocorrer perda de dados caixa de seleção.
Observação Para esta explicação, você testará os procedimentos armazenados em um banco de dados vazio, o que você implantar como parte do teste de unidade de banco de dados. Não é necessário que preservar os dados existentes, pois você irá testar os procedimentos armazenados no seu ambiente de desenvolvimento isolado.
No menu File, clique em Save All.
Sobre o Build menu, clique em Build Solution.
As propriedades que você acabou de definir determinam como o script de implantação é criado. O status da compilação aparece no saída janela, e Build: 1 com êxito ou atualizada deve aparecer como a última linha.
Para implantar o projeto de banco de dados
Em Solution Explorer, clique no projeto de banco de dados CompareProjectDB.
Sobre o Build menu, clique em Implantar CompareProjectDB.
Aviso
Você deve executar essa implantação contra um servidor de teste, um servidor de desenvolvimento ou computador local. Você não deve especificar o servidor de produção.
O projeto de banco de dados é implantado para um novo banco de dados. O status da implantação aparece no saída janela, e implantação bem-sucedida deve aparecer como a última linha. Em seguida, crie um banco de dados vazio, você pode comparar a esse banco de dados distribuído.
Criar um banco de dados vazio
Para criar um banco de dados vazio
No menu File, aponte para New, e em seguida, clique em Project.
A caixa de diálogo New Project será exibida.
Na lista de Modelos instalados, expanda o banco de dados nó e clique em SQL Server.
Clique em Assistente de 2008 do SQL Server.
Em nome, tipo EmptyDB.
Aceite os padrões para os campos restantes e clique em OK.
No Assistente de novo projeto de banco de dados, clique em Build/Deploy configurar.
No ação implantar , clique em criar um script de implantação (. SQL) e implantar o banco de dados.
Em conexão de destino, clique na Procurar botão.
Especificar a conexão com o servidor de banco de dados onde você deseja criar o banco de dados vazio e, em seguida, clique em Concluir.
Um projeto de banco de dados chamado EmptyDB é criado e aparece na Solution Explorer.
Em Solution Explorer, clique no projeto de banco de dados EmptyDB.
Sobre o Build menu, clique em Implantar EmptyDB.
O projeto de banco de dados é construído e implantado no servidor especificado.
Comparar os esquemas de dois bancos de dados
Para comparar os esquemas de dois bancos de dados
Sobre o dados , aponte para Esquema comparare em seguida, clique em Comparação do novo esquema.
O Novo esquema comparação caixa de diálogo será exibida para que você possa especificar a origem e destino. Nessa caixa de diálogo, você pode identificar os servidores em que a origem e destino residem, o nome de cada banco de dados e o tipo de autenticação a ser usado quando você se conectar a cada banco de dados.
Além disso, a janela de esquema comparar abre em segundo plano, e Visual Studio atribui automaticamente um nome como SchemaCompare1.
Em O esquema de origem, clique em banco de dadose em seguida, clique na conexão que corresponde ao banco de dados CompareProjectDB.
Se não há tal conexão aparece na lista, clique em Nova conexão. No Propriedades de conexão caixa de diálogo caixa, identificar o servidor no qual reside o banco de dados de CompareProjectDB, o tipo de autenticação para usar quando você se conectar a ele e o próprio banco de dados. Quando você tiver terminado, clique em OK.
Observação Depois de estabelecer uma conexão, ele aparece na Server Explorer em Conexões de dados.
Em O esquema de destino, clique em banco de dadose em seguida, clique na conexão que corresponde ao banco de dados EmptyDB.
Se não há tal conexão aparece na lista, clique em Nova conexão. No Propriedades de conexão caixa de diálogo caixa, identificar o servidor no qual reside o banco de dados de EmptyDB, o tipo de autenticação para usar quando você se conectar a ele e o próprio banco de dados. Quando você tiver terminado, clique em OK.
Clique em Opções para especificar quais objetos são comparados, quais tipos de diferenças são ignorados e o que irá conter o script de atualização gerados.
Observação Quando você compara os bancos de dados, você não especificar variáveis SQLCMD.
Sobre o Geral guia, expanda o Opções de comparação nó.
Selecione Ignorar nomes de arquivo e caminhos de arquivos e arquivos de log.
Clique em OK.
Clique em OK.
A comparação de esquema é iniciado.
Observação Você pode interromper uma comparação que está em andamento, abrindo o dados menu, apontando para esquema Comparee clicando em Parar comparar do esquema.
Você pode configurar as opções que determinam o que é considerado uma diferença e que alterar como o script de atualização é criado. Para obter mais informações, consulte Como: Definir opções para comparar os esquemas de banco de dados.
Quando a comparação é concluída, as diferenças estruturais entre dois bancos de dados aparecem na tabela na janela comparar do esquema. A tabela exibe uma linha para cada o objeto de banco de dados que existe um banco de dados. Objetos de banco de dados são organizados por tipo: tabelas, modos de exibição, procedimentos armazenados, funções e assim por diante.
Atualizar o banco de dados de destino
Para atualizar o esquema do destino, você tem duas opções. Você pode atualizar o esquema diretamente na janela de comparação entre esquemas ou usando o Transact-SQL editor. Esta seção descreve as duas opções.
Depois de executar a comparação de esquema, as diferenças estruturais aparecem na tabela na janela comparar do esquema. Para cada objeto a CompareProjectDB (banco de dados de origem) coluna, a tabela exibe uma ação no A ação de atualização coluna que seria necessária para sincronizar esse objeto em dois bancos de dados. Nesse caso, porque o destino estiver vazio, exceto para objetos padrão, o Status coluna contém principalmente novos status e o A ação de atualização coluna contém principalmente de criar ações.
Gravar atualizações destino
Você pode atualizar o esquema de destino usando as ações de atualização listadas na janela comparar do esquema. Para executar essa tarefa, siga as etapas na Atualizações de gravação para o banco de dados de destino.
Exibir o Script e então escreva atualizações para o destino
Exportar um script de atualização, examiná-lo, possivelmente alterá-lo e usá-lo a sincronizar o banco de dados de destino. Para executar essas tarefas, siga as etapas na Examine e Execute o Script de sincronização.
Gravar atualizações de banco de dados de destino
Observação |
---|
Antes de escrever as atualizações em um servidor de desenvolvimento ou de produção, você deve considerar o backup de seu banco de dados de destino. Porque algumas alterações de esquema não podem ser executadas em uma única transação, você poderá perder dados se você iniciar e, em seguida, cancelar uma operação de atualização. Por exemplo, uma tabela do banco de dados de destino pode ter sido abandonada em preparação para sua recriação. Se você cancelar a atualização nesse momento, você poderá perder a tabela. Esta explicação passo a passo, você está atualizando um banco de dados de desenvolvimento vazio. Portanto, você não faça backup do banco de dados de destino. |
Para gravar atualizações no banco de dados de destino
Na lista de resultados de comparação, vá para a SQL arquivos nó.
O arquivo CompareProjectDB e o arquivo CompareProjectDB_Log, altere a ação de atualização de criar para ignorar.
Observação Se você comparar os dois bancos de dados no mesmo servidor de banco de dados, a sincronização falhará porque os arquivos de dados e log de destino já existem e estão sendo usados pelo banco de dados de origem. Para esta explicação, basta ignorar as atualizações para os arquivos e sincronizar o conteúdo do banco de dados.
Para o arquivo de EmptyDB e arquivo de emptydb_log, altere a ação de atualização de soltar para ignorar.
Observação Porque você não está criando os arquivos do banco de dados de origem, você não deve excluir os arquivos do banco de dados de destino. Para esta explicação, basta ignorar as atualizações para os arquivos e sincronizar o conteúdo do banco de dados.
Sobre o Esquema comparar barra de ferramentas, clique em Gravar atualizações.
As ações de atualização foram listadas na janela comparar de esquema são executadas. Essa sincronização altera o esquema de destino para coincidir com a fonte.
Observação Enquanto ocorre a ação de atualização, você pode cancelar a operação, abrindo o dados menu, apontando para Esquema comparare em seguida, clicando em Parar a gravação destino.
Se você deseja executar a comparação novamente para verificar se as atualizações selecionadas foram aplicadas, você pode clicar em Atualizar sobre o Esquema comparar barra de ferramentas.
Examine e Execute o Script de sincronização
Para examinar o script de sincronização
Sobre o dados , aponte para Esquema comparar, aponte para Exportar parae, em seguida, clique em Editor.
Como alternativa, você também pode clicar em Exportar para o Editor sobre o Esquema comparar barra de ferramentas.
O Transact-SQL editor abre no modo desconectado e exibe o Transact-SQL sincronização script. Esta janela possui um nome como, por exemplo, Server.CompareProjectDB - SchemaUpdate_EmptyDB_1.sql. e exibe o Transact-SQL script. Como você tem acesso de leitura e de gravação nesta janela, você pode alterar o script. Se você alterá-lo, abra o arquivo menu e clique Salvar. Quando você salva o arquivo, você pode especificar o caminho e o nome.
No Editor do Transact-SQL barra de ferramentas, clique em Modo SQLCMD.
Se você não habilitar o modo SQLCMD, erros será exibido quando você tenta executar o script.
Para sincronizar os esquemas de dois bancos de dados, execute este script, clicando em SQL executar na sql Transact Editor barra de ferramentas ou pressionando F5.
O Connect to Database caixa de diálogo aparece.
Clique na conexão que corresponde ao banco de dados de EmptyDB e, em seguida, clique em OK.
Aviso
Se você tentar executar o script de atualização um banco de dados diferente, poderá causar resultados que não pretendia.
A comparação não é atualizada automaticamente. Se você deseja executar a comparação novamente para verificar se as atualizações selecionadas foram aplicadas, você deve clicar em Atualizar sobre o Esquema comparar barra de ferramentas.
Próximas etapas
Agora, você pode comparar os dados de dois bancos de dados. Para obter mais informações, consulte Como: Comparar e sincronizar os dados de dois bancos de dados.
Consulte também
Tarefas
Como: Comparar e sincronizar os dados de dois bancos de dados
Como: Comparar os esquemas de banco de dados
Demonstra Passo a passo: Comparando os dados de dois bancos de dados
Demonstra Passo a passo: Comparando os esquemas de um projeto de banco de dados e o banco de dados
Conceitos
Comparar e sincronizar os dados em um ou mais tabelas com dados em um banco de dados de referência
Criação e gerenciamento de bancos de dados e aplicativos de camada de dados em Visual Studio