Migração de esquema: Ferramentas de Dados do SQL Server vs Liquibase e Flyway

11

Isso pode parecer uma pergunta estúpida, mas eu estive procurando soluções de código aberto para migração de esquema, como Liquibase e Flyway.

No entanto, meu chefe me disse que o SQL Server Data Tools (SSDT) ​​realiza o mesmo trabalho. Não tenho certeza se concordo, mas posso encontrar muito pouco na Internet que o compare diretamente ao Liquibase e / ou Flyway.

Minha opinião é que o SSDT é uma ferramenta de desenvolvimento, modelagem e design de dados para o SQL Server e também oferece suporte à comparação de esquemas (e geração de scripts dos mesmos) e controle de origem. Ele lida com um problema diferente, embora possa haver alguma sobreposição com o Liquibase / Flyway em alguns aspectos da migração de esquema. Porém, como uma ferramenta geral de migração de esquema, o Liquibase e o Flyway são ferramentas totalmente dedicadas, enquanto o SSDT é mais para o design e desenvolvimento de um banco de dados.

Qualquer opinião seria muito apreciada, mesmo que seja apenas para dizer que não há comparação e o SSDT não é uma ferramenta de migração de esquema em si.

Neo
fonte

Respostas:

17

O SSDT é comparável ao Liquibase / Flyway, pois ele faz o que faz, mas adotando uma abordagem diferente. Com o SSDT, você tem o ambiente de desenvolvimento para obter coisas como definição, encontrar referências e inteligência, bem como a capacidade de compilar um projeto em um dacpac e, em seguida, implantar esse dacpac em um banco de dados.

A maneira SSDT (e a maneira de comparação do redgate sql) de fazer um incômodo é declarar o que você deseja, se quiser alterar uma tabela com a seguinte aparência:

create table a(id int)

para uma tabela que se parece com:

create table a(id int, another_column varchar(12))

com o SSDT, você apenas altera sua definição de tabela para a segunda e deixa o SSDT se preocupar com como atualizá-la (pode fazer uma alteração na tabela, adicionar uma coluna ou alterar a ordem da coluna para que você precise reconstruir a tabela etc).

Com o Liquibase (DbUp, ReadyRoll, métodos manuais, etc), o que você faz é, nesse caso, escrever a tabela de alteração e certificar-se de executar os scripts na ordem correta, considere este cenário:

  1. Release 1 - crie um olá para a coluna na tabela
  2. Release 2 - renomeie a coluna hello para joe_blogs
  3. Release 3 - renomeie a coluna joe_blogs para hello
  4. Release 4 - criar coluna joe_blogs

Se algum dos lançamentos estiver ausente, nenhum dos próximos poderá continuar.

Benefícios dos scripts de atualização (Liquibase, DbUp, etc):

  • Você tem controle completo sobre os scripts
  • DBAs / Desenvolvedores estão acostumados a isso

Benefícios da comparação / mesclagem (SSDT, Redgate SQL Compare):

  • Não precisa escrever scripts de atualização
  • É fácil chegar a qualquer versão específica, basta comparar e mesclar essa versão

Desvantagens dos scripts de atualização:

  • Deve ser executado em ordem
  • Confie nos humanos sem cometer erros
  • Pode ser lento, especialmente se você tiver muitas alterações
  • A menos que sua equipe tenha bancos de dados muito disciplinados em ambientes diferentes (dev, test, staging, prod etc.), muitas vezes ficam fora de sincronia, invalidando qualquer teste
  • Fazer o downgrade de uma liberação significa escrever o reverso de todos os scripts que você já escreveu

Desvantagens do uso de comparação / mesclagem:

  • As ferramentas não são 100% confiáveis, talvez injustamente
  • O SSDT requer um projeto funcional, muitos bancos de dados possuem código que não é compilado ou executado (pense em tabelas eliminadas, mas não em procedimentos etc.), eu já vi isso em cerca de 8/10 bancos de dados que herdei :)
  • Muitos DBAs / desenvolvedores hesitam em desistir do desenvolvimento no SSMS / bloco de notas

Pessoalmente, eu realmente acho que o SSDT é um ambiente de desenvolvimento profissional e isso significa que posso me concentrar em escrever códigos e testes úteis, em vez de escrever scripts de atualização que, por si só, são apenas um meio para atingir um fim.

Você pediu opiniões, então lá vai você :)

ed

Ed Elliott
fonte
11
O SSDT funciona com outra coisa que não seja o SQL Server? por exemplo, Postgres?
a_horse_with_no_name
3
Não há "dados do servidor ferramentas SQL" :)
Ed Elliott
11
Por que não? Pacote SSIS pode transferir principalmente todos fontes ODBC
a_vlad
A menos que eu entenda errado, acho que estamos falando sobre o gerenciamento do esquema do banco de dados, em vez de criar pacotes ssis? Feliz por ser corrigida :)
Ed Elliott
11
O SSIS pretende mover dados e, como tal, suporta conexões com uma grande variedade de sistemas. O SSDT destina-se ao desenvolvimento e manutenção de projetos de banco de dados do SQL Server. Ele possui um processo de compilação que verifica a versão do SQL Server de destino para compatibilidade de scripts e verifica todas as referências, procs etc. quanto à sintaxe do T-SQL.
Dave
2

Acabei de completar a resposta de previsão.

A maior diferença descrita no site da Flyway no local central:

Resolve apenas um problema e resolve-o bem. O Flyway migra seu banco de dados, para que você não precise mais se preocupar com isso.

Visual Studio + SSDT + SSIS = Ferramenta ETL de potência total, com apenas uma desvantagem real - ele funciona apenas no Windows Ele precisa do Windows + SQL Server para executar pacotes, mas trabalha principalmente com todas as fontes.

Para transferir / migrar dados - muitos produtos no mercado. Comercial, Código Aberto, Comunidade / Express e etc

Para migrar código - nem tudo é tão bom. Mesmo que o software prometa "converter gatilhos, procedimentos e funções sem problemas", na verdade - apenas simples, a maioria das migrações de código - manual.

a_vlad
fonte
2

Eu trabalhei com ferramentas de dados do servidor Sql e via. Usando o SSDT, eu tenho as seguintes vantagens:

  1. Eu posso compilar o projeto de banco de dados .. ou seja, não há medo de soltar uma coluna que está sendo referenciada por uma exibição, função ou procs armazenados. Esse é um ótimo recurso, porque, no passado, descobrimos essas falhas somente após o lançamento
  2. Após a construção bem-sucedida, o SSDT gera o que é conhecido como "DACPAC". Pense nisso um msi com uma versão.

  3. Um dado dacpac, com a versão 5, por exemplo, pode ser aplicado a um banco de dados que esteja no Dacpac versão 1,2,3,4 ou 6,7,8 etc. Se aplicado a 1-4, o banco de dados será atualizado. Se aplicado a 6,7 ​​etc., o banco de dados será rebaixado / revertido. Haverá avisos, se houver perda de dados, que pode ser suprimida. Portanto, obtemos um ótimo recurso de reversão, que não está disponível em outras ferramentas, como flyway etc. Com o flyway, é necessário fornecer um novo conjunto de scripts para reversão.

  4. O DACPAC aplica todas as alterações em uma transação; ou seja, se houver 5 alterações na tabela na atualização e uma delas falhar, a transação inteira será revertida. O Flyway também suporta isso, mas para todos os arquivos.

No entanto, SSDT e DACPACs são específicos do Microsoft SQL Server; O flyway pode ser usado para uma variedade de bancos de dados.

Portanto, se você estiver usando apenas o SQL Server, deve ser uma decisão bastante fácil de seguir com SSDT e DACPACs.

VenVig
fonte