Oficina · Nota técnica #03 · projeto pessoal

IdempotentBase

O script de banco que pode rodar duas vezes

Uma ferramenta desktop que compara schemas DEV × PROD, classifica cada diferença por risco e gera um script SQL idempotente. O que é destrutivo fica bloqueado por padrão, e nada é dropado em silêncio.

Esquema ilustrativo: cilindros “DEV, fonte da verdade” e “PROD” alimentam uma caixa “Reconcile”, que gera quatro etiquetas de risco (SAFE_AUTO, REVIEW_REQUIRED, DESTRUCTIVE_BLOCKED, INFO_ONLY) e um documento de script com linhas IF NOT EXISTS; abaixo, k6, JMeter e Gatling.
Esquema ilustrativo feito para este post. Não é uma captura de tela.

O script que pode rodar duas vezes

“O script rodou duas vezes. Agora a tabela não existe mais.” Subir alteração de banco para produção é o momento mais arriscado do deploy. Script feito à mão dropa a coluna errada, quebra quando roda de novo ou trava a base no horário de pico.

O IdempotentBase é uma ferramenta desktop para DBAs e DevOps que compara os ambientes, classifica cada diferença por risco e gera um script que pode rodar quantas vezes for preciso, sempre com o mesmo resultado.

Reconcile: DEV × PROD

O módulo central compara o schema de DEV com o de PROD. DEV é a fonte da verdade. Cada diferença encontrada recebe uma de quatro classificações:

  • SAFE_AUTOseguro para aplicar
  • REVIEW_REQUIREDprecisa de revisão
  • DESTRUCTIVE_BLOCKEDdestrutivo, bloqueado
  • INFO_ONLYsó informativo

A partir daí, a ferramenta gera um script SQL idempotente. Aplicar em produção exige confirmação obrigatória.

Modelo de segurança

O modelo de segurança é explícito. Ele cabe em três linhas:

  • Sem drops silenciosos
  • Sem shrink automático
  • Destrutivo é bloqueado por padrão

Backup, Migrate e Load Test

Backup

Usa o BACKUP DATABASE nativo do SQL Server.

Migrate

Leva schema e dados entre MySQL, PostgreSQL e SQL Server, com DDL e INSERT em lotes.

Load Test

Carga em sandbox: bulk insert, usuários concorrentes no banco e API HTTP. Exporta para k6, JMeter e Gatling.

O export do Load Test é a parte de que eu mais gosto: o teste sai da ferramenta e entra no seu pipeline, em vez de ficar preso num formato próprio.

Bancos suportados

  • SQL Server
  • PostgreSQL
  • MySQL
  • MariaDB
  • Oracle

O Oracle aparece em vários fluxos. SQLite e MongoDB têm suporte parcial.

Código aberto e binário pronto

O projeto existe em duas formas:

Código-fonte

No GitHub, sob licença MIT, com testes por snapshot em memória e README em inglês e português.

Distribuição binária

O pacote pronto para baixar e rodar, sem compilar: o executável, as DLLs de produto e arquivos de exemplo de conexão para cada provider.

As DLLs da distribuição são separadas por responsabilidade: Core, Migration, Reporting e uma por banco (SqlServer, PostgreSQL, MySql, Oracle, Sqlite e MongoDB). Para rodar, basta Windows 10 ou superior com o .NET Framework 4.8.

Ficha técnica

  • .NET Framework 4.8
  • WPF
  • Dapper
  • Npgsql
  • MySqlConnector
  • Oracle.ManagedDataAccess
  • Microsoft.Data.Sqlite
  • Serilog
Versão
v1.1.0: workflow de Load Test, MariaDB e export para k6, JMeter e Gatling
Licença
MIT
Requisitos
Windows 10+ e .NET Framework 4.8
Público
DBAs, DevOps e squads com deploy frequente de schema

Trabalha com deploy de banco e quer trocar ideia sobre scripts idempotentes? Me escreva.

Me escreva