Pergunta

Eu estou procurando uma maneira de validar o esquema SQL em um DB produção depois de atualizar uma versão do aplicativo. Se o aplicativo não coincide com a versão do esquema DB, deve haver uma maneira de avisar o usuário e lista as mudanças necessárias.

Existe uma ferramenta ou um quadro (para usar programaticamente) com recursos internos de fazer isso? Ou há algum algoritmo simples para executar essa comparação?

Update: listas portão vermelho "de $ 395". Qualquer coisa livre? Ou mais infalível do que apenas manter o número da versão?

Foi útil?

Solução

Tente este SQL.
- Run-la contra cada banco de dados
. - salvar a saída em arquivos de texto
. - Diff os arquivos de texto.

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

Outras dicas

Espero que eu possa ajudar - este é o artigo sugiro a leitura:

comparar esquemas de banco de dados SQL Server automaticamente

Ele descreve como você pode automatizar a comparação esquema do SQL Server e processo de sincronização usando T-SQL, SSMS ou uma ferramenta de terceiros.

Você pode fazê-lo através de programação por olhar no dicionário de dados (sys.objects, sys.columns etc.) de ambos os bancos de dados e compará-los. No entanto, também existem ferramentas como Redgate SQL Compare Pro que fazer isso para vocês. I tenha especificado isso como uma parte do ferramental para QA em sistemas de armazenamento de dados em algumas ocasiões agora, incluindo o que eu estou trabalhando atualmente. No meu show atual foi problema em tudo, como a DBA está aqui já estavam a usá-lo.

A metodologia básica para o uso dessas ferramentas é manter um script de referência que constrói a base de dados e manter isso em controle de versão. Executar o script em um banco de dados do zero e compará-lo com o seu alvo para ver as diferenças. Ele também irá gerar scripts de patch se você se sente tão inclinado.

Tanto quanto eu sei não há nada livre que faz isso a menos que você sentir vontade de escrever o seu próprio. Redgate é suficiente barato que ele poderia muito bem ser livre. Mesmo como uma ferramenta de controle de qualidade para provar que a produção DB não está na configuração que era para ser você vai economizar seu preço de compra após um incidente.

Você pode agora usar a minha SQL Administrador estúdio gratuitamente para executar um Comparar esquema , Data Compare e sincronizar as alterações. Não requer um download de chave de licença a partir daqui http://www.simego.com/Products/ SQL-administrador-Studio

Também trabalha contra SQL Azure.

[UPDATE: Sim, eu sou o autor do programa acima, como é agora Livre Eu só queria compartilhar com a comunidade]

Se você está procurando uma ferramenta que pode comparar dois bancos de dados e mostrar-lhe a diferença Red Gate faz SQL Compare

Você não mencionou que RDMBS você estiver usando: se os pontos de vista informações de esquema estão disponíveis em seus RDBMS, e se você pode fazer referência a ambos os esquemas do mesmo host, você pode consultar os pontos de vista informações de esquema para identificar diferenças em: -tables -columns tipos -column -constraints (por exemplo, restrições de chaves primárias originais, chaves estrangeiras, etc.)

Eu escrevi um conjunto de consultas exatamente para este fim no SQL Server para um trabalho passado - funcionou bem para identificar diferenças. Muitas das consultas estavam usando LEFT junta com IS NULL para verificar a ausência de itens esperados, outras foram comparando coisas como tipos de colunas ou nomes de restrição.

É um pouco tedioso, mas é possível.

Eu encontrei esta ferramenta pequena e livre que se encaixa a maioria das minhas necessidades. http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

É muito básico, mas mostra as diferenças de esquema de duas bases de dados. Ele não tem qualquer coisas extravagantes como auto gerado scripts para fazer a diferença para ir embora e não se compara todos os dados.

É apenas um pequeno utilitário, gratuito que mostra diferenças de esquema:)

Faça uma tabela e armazenar o número da versão lá. Apenas certifique-se atualizá-lo conforme necessário.

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

Você pode então verificar o número da versão armazenada no banco de dados corresponde ao código de aplicativo durante a instalação do seu aplicativo ou para onde for conveniente.

Qual RDBMS é isso, e quão complexo são os potenciais alterações?

Talvez esta é apenas uma questão de comparar contagens de linha e conta de índice para cada tabela - se você tem gatilho e armazenados versões procedimento que se preocupar também, então você precisa de algo mais industrial

Tente dbForge Data Compare para SQL Server . Ele pode comparar e sincronizar qualquer banco de dados, mesmo os muito grandes. Rápido, fácil, sempre proporciona um resultado correto. Experimente-o em seu banco de dados e comentários sobre o produto.

Podemos recomendar-lhe uma ferramenta de comparação de SQL de confiança que oferecem comparação 3 de tempo mais rápido e sincronização de dados da tabela em seus bancos de dados SQL Server. É de Dados dbForge Compare para SQL Server.

Principais vantagens:

  • comparação e sincronização de grandes bases de dados mais rápida
  • Suporte de backups nativas do SQL Server
  • mapeamento personalizado de tabelas, colunas e esquemas
  • várias opções para afinar a sua comparação e sincronização
  • Geração de comparação e sincronização relatórios

Além disso teste gratuito de 30 dias e de compra livre de risco com 30 dias de garantia dinheiro de volta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top