Rollback de versão do Signer
Este artigo descreve como voltar uma instância on-premises do Signer para uma versão anterior, incluindo a reversão das alterações de banco de dados (migrações) aplicadas pela atualização.
Este é um procedimento sensível e de alto risco. O rollback pode causar perda severa de dados, de forma irreversível. Faça-o apenas em casos de extrema necessidade.
Sempre que possível, reporte o bug ou problema ao time da Lacuna Software em vez de fazer o rollback.
A decisão de realizar ou não o rollback, e as consequências dela, são de responsabilidade exclusiva do time que administra a instância.
Antes de começar
Você vai precisar de:
- acesso aos servidores da aplicação;
- acesso ao banco de dados (SQL Server);
- o .NET instalado no ambiente em que o comando será executado;
- a connection string do banco de dados.
Recomendamos fortemente:
- fazer um backup do banco de dados antes de começar;
- testar o procedimento em um ambiente de homologação.
O rollback das migrações não pode ser desfeito automaticamente e, dependendo das migrações removidas, pode causar perda de dados. Se você tiver qualquer dúvida sobre quais migrações devem ser removidas, não prossiga e entre em contato com o time da Lacuna Software.
Passo a passo
1. Pare a aplicação e volte a versão dos binários
- Pare todos os servidores da aplicação Signer.
- Volte os binários para a versão anterior, a que você deseja restaurar. Para isso, siga as instruções de atualização da sua plataforma (por exemplo, Linux) usando o pacote da versão anterior.
2. Verifique se a atualização alterou o banco de dados
Consulte o changelog do Signer e verifique se a versão que está em uso contém alterações no modelo de banco de dados. Essas alterações aparecem no changelog como Atualiza modelo de banco de dados e são aplicadas por migrações. Confira também se as migrações foram de fato aplicadas ao seu banco (passo 5).
- Se nenhuma migração foi aplicada, basta voltar a versão dos binários (passo 1) e iniciar a aplicação (passo 8). Você não precisa executar os passos 3 a 7.
- Se migrações foram aplicadas, é preciso removê-las. Siga os próximos passos.
3. Obtenha os binários da versão que foi aplicada
Use os binários da versão que está em uso (a que você quer reverter), e não os da versão anterior. São eles que contêm as migrações a serem removidas.
Baixe o pacote da versão aplicada e extraia os arquivos em um diretório de trabalho:
- Windows: pacote
.zip - Linux: pacote
.tar.gz
Os links de download de cada versão estão no changelog do Signer.
4. Configure a conexão com o banco de dados
No arquivo appsettings.json do diretório de trabalho, adicione a connection string:
"ConnectionStrings": {
"DefaultConnection": "<connection string>"
}
5. Identifique as migrações aplicadas
Conecte-se ao banco de dados e execute:
select * from __EFMigrationsHistory order by MigrationId
Essa tabela lista todas as migrações aplicadas. O campo MigrationId segue o formato YYYYMMDDHHMMSS_NomeDaMigração.
Então:
- Compare a lista com o changelog, que indica os nomes das migrações de cada versão.
- Identifique quais migrações pertencem à versão que você quer reverter.
- Determine qual é a última migração que deve ser mantida. Ela é a migração alvo (target migration).
6. Reverta as migrações
Para remover todas as migrações posteriores à migração alvo, execute no diretório de trabalho:
dotnet Lacuna.Signer.Site.dll -- update-db <nome da migração alvo> --timeout 6000
Exemplo:
dotnet Lacuna.Signer.Site.dll -- update-db 20250101120000_AlgumaMigracao --timeout 6000
7. Valide o rollback
Execute novamente a consulta do passo 5:
select * from __EFMigrationsHistory order by MigrationId
Verifique que:
- a última migração da lista é a migração alvo;
- as migrações posteriores foram removidas.
8. Inicie a aplicação
Inicie novamente os servidores da aplicação Signer.
Resumo
- Pare os servidores e volte os binários para a versão anterior.
- Consulte o changelog e confirme se houve migrações.
- Baixe os binários da versão que foi aplicada.
- Configure a connection string no
appsettings.json. - Identifique a migração alvo em
__EFMigrationsHistory. - Execute
update-db <migração alvo>. - Valide a tabela
__EFMigrationsHistory. - Inicie a aplicação.