como comparar / validar sql esquema
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?
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.