Mesclar vários bancos de dados em um único banco de dados com vários esquemas no SQL Server 2008

1

Eu tenho cinco pequenos bancos de dados em uma única instância do SQL Server 2008. Os bancos de dados estão relacionados (por entidade comercial, mas não por dados), portanto, gostaria de mesclá-los em um único banco de dados e fornecer a cada um seu próprio esquema dentro desse banco de dados.

Na verdade, gostaria que o banco de dados principal mantivesse o dbo schema. Inicialmente, comecei criando os esquemas no banco de dados principal, depois criei o script das tabelas no primeiro banco de dados que eu queria mover para criar a estrutura e, em seguida, executei as consultas insert / select para migrar os dados. Estou bem com isso, mas é demorado e eu nem cheguei aos procedimentos armazenados ainda. Além disso, um dos bancos de dados se baseia nos IDs dos registros e, simplesmente, fazer uma inserção / seleção os eliminará.

Certamente há uma maneira mais fácil de fazer isso.

Eu não sou um DBA, mas estou à vontade para trabalhar com consultas e semelhantes no SSMS. Eu estou trabalhando em um servidor dev e eu sou o único que atualiza os dados, para que eu possa sempre restaurar a partir do servidor de produção, se algo der errado. Qualquer ponteiro seria muito apreciado.

    
por Michael Itzoe 07.11.2009 / 16:09

5 respostas

1

Encontrei uma solução e vou postar aqui caso alguém mais esteja procurando por ela no futuro. Eu não posso dizer que é a melhor maneira de fazer isso, mas funcionou para mim e foi relativamente indolor. Também vou divulgar de antemão que criei os novos esquemas no banco de dados primário quando fiz essa pergunta pela primeira vez (uma semana ou duas atrás), portanto, sinceramente, não sei se essa etapa é necessária.

Eu repeti este procedimento para cada banco de dados.

  1. Criado um nome de esquema exclusivo para o banco de dados.

  2. Executou a seguinte consulta para cada tabela no banco de dados:

    ALTER SCHEMA [new_schema_name] TRANSFER [table_name];

  3. Usou o SSMS para gerar scripts CREATE para todas as visualizações, procedimentos armazenados, acionadores e funções. (Felizmente eu tive alguns destes, então isso foi rápido.) Eu tive que acrescentar o nome do esquema a todas as referências de tabela (por exemplo, [dbo].[table_name] mudou para [new_schema_name].[table_name] , mas uma pesquisa e uma substituição tornaram isso fácil e rápido.

  4. Usou o Assistente de Importação e Exportação do SQL Server para exportar tabelas do banco de dados para o banco de dados principal.

  5. Executou os scripts CREATE e excluiu o banco de dados antigo.

por 14.11.2009 / 07:07
0

Dê uma olhada em SQL's do RedGate Compare . Ele provavelmente pode lidar com o que você está procurando, ou pelo menos te aproximar muito. Não é grátis, mas você pode avaliá-lo para ver se funciona ou não. IMHO vale bem a pena o $$ (como são todas as suas ferramentas).

    
por 07.11.2009 / 16:17
0

No que diz respeito aos ids, há uma declaração para definir o id. Identidade de Reseed eu acredito. Eu segurei o pacote de comparação de comparação / dados do redgate - rochas.

Eu não entendo porque você faria isso. Isso fará com que você faça backup e restaure todos os objetos ao mesmo tempo. Você também terá que refatorar seu código de aplicativo também. Que benefícios você vê ao fazer isso?

    
por 07.11.2009 / 23:14
0

Recentemente tive que (escolhi) mesclar dois pequenos bancos de dados que não tinham nenhuma sobreposição significativa em um banco de dados. A tabela de destino no banco de dados de destino não existia antes da consulta.

Eu fiz algo parecido com o que foi descrito na resposta fornecida por OMG Ponies

SELECT * INTO [NEW_DATABASE].dbo.[TABLE]
FROM [OLD_DATABASE].dbo.[TABLE]
    
por 11.04.2017 / 15:49
0

Sendo que existe apenas uma instância do SQL Server e assumindo que não há sobreposição - você pode usar:

SELECT * 
  INTO [NEW_DATABASE].dbo.[TABLE]
  FROM [OLD_DATABASE].dbo.[TABLE]

A tabela no novo banco de dados não pode existir antes de você executar a instrução, mas ela trará os dados.

    
por 08.11.2009 / 02:26