# Backups

> Fotografias online da configuração, uma exportação que leva as senhas guardadas para outra máquina, uma restauração agendada para a próxima partida em vez de aplicada ao vivo, e a reconstrução do índice de histórico de execuções.

Backups é a única linha do grupo DADOS na página Configurações. O cartão tira uma cópia da configuração da estação enquanto tudo continua rodando, escreve o arquivo único que leva também as senhas guardadas para outra máquina, lista tudo o que ele guarda, agenda uma dessas cópias para substituir a configuração na próxima partida, e reconstrói o índice de execuções gravadas quando aquela lista parece errada. Ele abre com "Guarde um retrato da configuração do aplicativo (dispositivos, tags, lógica, dashboards, ajustes e as imagens, ícones e símbolos da sua biblioteca) para poder voltar atrás. As execuções gravadas e o histórico delas ficam em separado e nunca são afetados por um backup ou por uma restauração." A página exige a permissão **Alterar configurações**.

## O que um backup contém {#what-a-backup-contains}

Um backup é uma cópia online do banco de configuração, tirada com o mecanismo de backup do SQLite, então ele é coerente mesmo enquanto o aplicativo escreve (com o log de escrita antecipada incluído). Ele guarda tudo o que aquele banco guarda: os dispositivos e as tags dos drivers, o espaço de endereços da Logic (as variáveis com os valores retentivos delas, as ações, os gatilhos, os alarmes), os dashboards, os modelos, as unidades, os procedimentos, as receitas, as avaliações e os modelos de documento do Process, os usuários e os papéis locais, a configuração do servidor OPC UA, e as configurações desta página. Ao lado do arquivo do banco, a estação copia a pasta de recursos do usuário (as imagens, os ícones e os símbolos da sua biblioteca) para uma pasta irmã, para que uma restauração traga as figuras de volta também, e uma nota opcional vai para um arquivo lateral.

Os arquivos moram na pasta `backups` da raiz de dados da estação: `config-20260902-141500.db` (com um sufixo `-2` se aquele segundo já tiver um), `config-20260902-141500.assets` e `config-20260902-141500.db.note.json`. Uma exportação é um arquivo único ao lado deles, `config-export-20260902-141500.glabconfig`.

Um backup nunca contém as execuções gravadas e os arquivos delas, o índice de histórico de execuções, o diário durável de eventos, o marcador de falha, os arquivos de log, a posição e o zoom da janela, o armazenamento de token da conta, ou os repositórios de certificados do servidor OPC UA. As credenciais dentro do banco (segredos de dispositivo, a senha do servidor OPC UA) são guardadas como texto cifrado preso ao usuário e à máquina Windows que as digitou: um backup aberto em outro lugar restaura a configuração inteira mas lê cada uma delas como não configurada, a ser digitada de novo. A exportação logo abaixo é o arquivo único que as leva junto.

## Criar um backup {#creating-a-backup}

| Campo | O que é | Valores / padrão | Efeito |
| --- | --- | --- | --- |
| Nota | "Observação opcional guardada com o backup ou a exportação", o campo ao lado dos botões. | Até 200 caracteres; vazio por padrão e limpo depois de cada backup ou exportação. | Escrito no arquivo lateral de nota de um backup e no cabeçalho de uma exportação, e mostrado sob a linha daquele arquivo. |

| Comando | O que ele faz | Esmaecido quando (situação) | Não aparece quando (papel) |
| --- | --- | --- | --- |
| Abrir pasta | Abre a pasta de backups no Explorador, criando-a se preciso. Quem responde ao pedido é a janela da estação, e só para uma pasta existente desta instalação: qualquer outra coisa relata "Essa não é uma pasta que esta estação abre. Nada foi aberto.", com as mesmas palavras se a pasta está fora da instalação ou se simplesmente não está lá, então a resposta não conta a quem pediu nada que ele já não soubesse. Uma pasta que o Windows não abre relata "O sistema operacional não conseguiu abrir." | Num navegador em outro dispositivo: "Disponível apenas no aplicativo instalado na estação." | Nunca. |
| Criar backup | Tira a fotografia e depois relata "Backup 'config-….db' criado." na barra de status, ou "O backup falhou: …". | Enquanto outro comando de backup roda (o cartão fica esmaecido). | Nunca. |

Criar um backup é trabalho de engenharia somente leitura: ele roda enquanto uma unidade roda e nunca se sobrepõe a uma mudança de configuração. Enquanto o runtime está parado esta página não é desenhada (veja [Configurações](settings)), então nenhum comando de backup pode ser alcançado até o runtime voltar. Uma estação cujo banco de configuração ainda não existe é recusada com "O banco de configuração ainda não existe."

## Exportação para outra máquina {#export-for-another-machine}

Sob os botões de backup, um segundo bloco com título próprio, **Exportação para outra máquina**, abre com a razão de ele existir: "Um backup deixa as senhas guardadas para trás: as senhas de dispositivo e a senha do servidor OPC UA só abrem nesta conta do Windows, nesta máquina. Uma exportação é um arquivo único que leva as senhas junto, selado com uma senha que você escolhe aqui, para que uma máquina nova assuma a estação inteira. Guarde essa senha em lugar seguro: ela é a única coisa que abre o arquivo, e não há como recuperá-la por aqui."

| Campo | O que é | Valores / padrão | Efeito |
| --- | --- | --- | --- |
| Senha da exportação | A senha com que o arquivo é selado, e a única coisa que voltará a abri-lo. A caixa **Mostrar a senha** embaixo dele revela o que se digita aqui, e só aqui. | Pelo menos 8 caracteres; vazio por padrão e limpo depois de cada exportação. | Deriva a chave sob a qual cada credencial guardada é selada de novo. Ela não fica guardada em lugar nenhum: uma exportação cuja senha ninguém lembra não pode ser aberta por ninguém, nem por este aplicativo. |
| Repita a senha | A mesma senha de novo, para que um escorregão de digitação apareça antes de o arquivo ser escrito. Não tem caixa **Mostrar a senha** própria e fica sempre oculto. | Precisa ser igual à do campo ao lado. | Nada sozinha; o Exportar continua recusado enquanto as duas diferirem. |

O campo de nota lá de cima é o mesmo: ele viaja dentro da exportação também, e aparece sob a linha dela.

| Comando | O que ele faz | Esmaecido quando (situação) | Não aparece quando (papel) |
| --- | --- | --- | --- |
| Exportar | Escreve um `config-export-20260902-141500.glabconfig` na mesma pasta `backups` e relata "Exportação '…' criada com N credenciais guardadas." Uma credencial que esta conta do Windows não conseguiu ler é contada à parte, no tom de erro: "Exportação '…' criada com N credenciais guardadas. M credenciais guardadas não puderam ser lidas nesta conta do Windows e ficaram para trás: digite-as de novo na máquina nova." | Enquanto outro comando de backup roda ("Outro comando de backup ainda está em andamento."), enquanto a senha tiver menos de oito caracteres ("Escolha uma senha de pelo menos 8 caracteres para a exportação.") e enquanto os dois campos diferirem ("As duas senhas são diferentes."). | Nunca: escrever uma exportação exige a mesma permissão **Alterar configurações** que a página já exige, porque o arquivo que ela produz é cada credencial que a estação guarda, sob uma senha que quem exporta escolhe. |

A exportação é um arquivo compactado que carrega uma cópia coerente do banco de configuração, os recursos do usuário ao lado dele e um cabeçalho. Cada coluna que a configuração protege é lida pelo cofre desta máquina na saída e selada de novo sob a senha da exportação; o cabeçalho carrega o sal, o fator de trabalho e uma constante selada com a chave derivada, o que basta para distinguir uma senha certa de uma errada e nada mais. Quais colunas viajam é lido da própria configuração, então uma credencial acrescentada depois viaja sem ninguém precisar lembrar de uma lista. Escrever uma exportação é trabalho de engenharia somente leitura, igual a um backup, então ela roda enquanto uma unidade roda; e fica no diário, porque uma cópia de cada credencial que a estação guarda acabou de sair do cofre.

Uma exportação é restaurada pela lista abaixo, com o **Restaurar** da linha dela. Isso pergunta "Restaurar a partir de uma exportação": "'…' carrega a configuração da máquina em que foi escrito e as senhas guardadas com ela. Digite a senha com que ele foi escrito: as senhas vão para o cofre desta máquina, e a configuração substitui a atual quando você reiniciar o aplicativo. A configuração atual é salva automaticamente antes, e as execuções gravadas não são afetadas.", com um campo **Senha da exportação** e sua caixa **Mostrar a senha**; o Restaurar continua recusado enquanto ele estiver vazio ("Digite a senha com que esta exportação foi escrita."). Uma senha errada não escreve nada e deixa o diálogo aberto, com a razão dita na barra de status, para que a próxima tentativa esteja ali mesmo: "Essa senha não abre esta exportação. É a senha escolhida na máquina onde a exportação foi escrita, e não há como recuperá-la aqui." Uma senha certa abre a exportação num backup comum desta máquina, põe as credenciais que ela carregava no cofre desta máquina, agenda esse backup para a próxima partida e relata "'…' foi aberto e as senhas dele foram guardadas nesta máquina. A configuração é restaurada no próximo reinício."; daí em diante é a restauração comum descrita abaixo, e o backup que fica na lista é o registro do que chegou, então a mesma restauração pode ser repetida depois sem a exportação nem a senha dela. O arquivo da exportação nunca é modificado, então ele ainda abre numa terceira máquina.

Nenhuma das duas metades é do agente: não existe ferramenta de exportação, nem jeito de restaurar uma exportação pela página [Agente](agent), porque a senha é do operador e uma que um agente inventasse ou recebesse ficaria numa transcrição. O `backup_list` marca uma exportação (`portableExport`), e o `backup_restore` a recusa nomeando esta página: "'…' é uma exportação de configuração para outra máquina. Ela leva as senhas guardadas seladas com a senha escolhida quando foi escrita, então é restaurada em Configurações, Backups, onde essa senha pode ser digitada."

## A lista {#the-list}

Os backups e as exportações dividem uma lista só, do mais recente para o mais antigo, porque a pergunta que eles respondem é a mesma: qual destes eu restauro. Cada linha mostra quando o arquivo foi criado, no formato de data e hora da estação, depois o que ele é (**Backup** ou **Exportação para outra máquina**), o nome dele e o tamanho dele, e a nota quando há uma. O tamanho é tudo o que aquele arquivo ocupa, que é tudo o que excluí-lo libera: num backup, a cópia do banco, a nota dela e a fotografia de recursos dela, cujas imagens são a metade maior numa estação que as usa; numa exportação, o arquivo compactado único. A lista é lida quando a página abre e depois acompanha o que a própria estação faz: um backup ou uma exportação feitos aqui ou em outra janela, ou um backup feito por um agente pela página [Agente](agent), aparece na lista na hora. Um arquivo posto na pasta `backups` por fora do aplicativo, copiado à mão por exemplo, não é percebido: ele aparece quando a página é aberta de novo.

| Comando | O que ele faz | Esmaecido quando (situação) | Não aparece quando (papel) |
| --- | --- | --- | --- |
| Restaurar | Num backup, pergunta "Restaurar a configuração": "Agendar '…' para substituir a configuração atual quando o aplicativo reiniciar? A configuração atual será salva automaticamente antes. As execuções gravadas não são afetadas.", com Sim e Não. O Sim agenda a restauração e relata "'…' será restaurado no próximo reinício." Numa exportação é a mesma decisão e pede a senha no lugar, no diálogo descrito acima. | Enquanto uma unidade está em execução ("A configuração está travada enquanto uma Unidade está em execução."). | Nunca. |
| Excluir | Pergunta "Excluir o backup": "Excluir para sempre o backup '…'? Isso não pode ser desfeito." O Sim remove a cópia do banco, a nota dela e a fotografia de recursos dela, e relata "Backup '…' excluído." Uma exportação é nomeada pelo que ela é e pelo que vai junto, "Excluir a exportação": "Excluir para sempre a exportação '…'? As senhas que ela carrega vão junto. Isso não pode ser desfeito.", e depois "Exportação '…' excluída." | No backup que está agendado para ser restaurado ("'…' está agendado para ser restaurado. Cancele a restauração pendente primeiro."). | Nunca. |

Restaurar é recusado, com a razão na barra de status, quando uma gravação está ativa ("Há uma gravação ativa. Pare-a antes de agendar uma restauração de configuração."), quando o arquivo não é um backup de configuração ("'…' não é um backup de configuração do Ganter Lab e não pode ser restaurado."), e quando ele foi escrito por um banco que esta versão não conhece, como o de uma versão mais nova ("'…' não é um backup de configuração que esta versão do Ganter Lab consiga restaurar. Ele pode pertencer a outro banco, ou a uma versão mais nova do aplicativo."). O Excluir recusa o backup que está agendado: "'…' está agendado para ser restaurado. Cancele a restauração pendente primeiro." A retenção é sua: nada aqui exclui backups por conta própria, e um agente pode criar e listar backups mas nunca excluir um.

## Restauração agendada {#restore-scheduled}

Agendar escreve um marcador na raiz de dados, e o cartão mostra o aviso de atenção **Restauração agendada**: "'…' será restaurado quando você reiniciar o aplicativo. A configuração atual é salva automaticamente antes.", com um botão **Cancelar** que remove o marcador e relata "Restauração pendente cancelada.". Nada muda até o aplicativo iniciar de novo. Uma restauração agendada em outra janela, ou por um agente pela página [Agente](agent), faz este aviso aparecer numa página que já está aberta, e uma cancelada em outro lugar o tira.

Na partida seguinte, antes de qualquer coisa abrir a configuração, o aplicativo valida o arquivo de novo, fotografa a configuração que está sendo substituída como `config-pre-restore-<timestamp>.db` com a nota "Fotografia automática tirada antes de restaurar '…'." e a cópia de recursos dela (então uma restauração é ela mesma reversível), troca o arquivo do banco, restaura a fotografia de recursos quando o backup carregava uma, e limpa o marcador. Quando a estação termina de subir, uma notificação diz como foi:

| Resultado | Notificação | Mensagem |
| --- | --- | --- |
| Aplicada | **Configuração restaurada** | "O backup '…' foi aplicado na inicialização. A configuração anterior foi salva como '…'." |
| Aplicada, mas as imagens do backup não puderam ser copiadas de volta | **Configuração restaurada com um aviso**, depois da anterior | "A configuração foi restaurada, mas os arquivos de imagem dela não puderam ser restaurados junto. As imagens anteriores foram salvas ao lado de '…'." |
| Uma execução do Process precisa ser retomada com a configuração atual: a restauração continua agendada e é aplicada numa partida posterior | **Restauração da configuração adiada** | "Termine todas as execuções de Process retomadas e reinicie para aplicar a restauração agendada." |
| O arquivo de backup sumiu | **Falha ao restaurar a configuração** | "O backup '…' não foi aplicado: …", com a razão "Não existe backup com o nome '…'." |
| O arquivo falha na validação | **Falha ao restaurar a configuração** | "O backup '…' não foi aplicado: …", com a razão que Restaurar dá para esse arquivo (acima). |
| Os arquivos não puderam ser copiados nem substituídos | **Falha ao restaurar a configuração** | "O backup '…' não foi aplicado: …", com a razão "Não foi possível copiar ou substituir os arquivos da configuração, e o diário guarda a causa. Agende a restauração de novo em Configurações, Backups." |

Uma restauração que falhou limpa o marcador, para que as partidas seguintes não fiquem presas. Uma vez trocado o banco, a restauração conta como aplicada mesmo que um passo posterior falhe. Quando o próprio marcador não pode ser removido, a mensagem termina com "O Ganter Lab não conseguiu limpar a restauração agendada, então ela pode rodar de novo no próximo início." O diário guarda a causa de cada um desses casos em inglês, para o suporte.

## Configuração restaurada: é preciso revisar {#configuration-restored-review-required}

Depois de uma restauração aplicada, o cartão mostra um segundo aviso de atenção, **Configuração restaurada: é preciso revisar**: "Revise os ajustes restaurados, os Modelos, as Unidades, os Procedimentos, os códigos, os contadores e as filas de impressora de etiqueta; confira os Históricos; reconstrua o índice do histórico de execuções só se a lista de históricos estiver faltando ou inconsistente." Ele fica até você pressionar **Dispensar**. Uma restauração não faz reconciliação nenhuma por conta própria: os nomes de fila voltam como configuração, mas as impressoras do Windows não são descobertas nem corrigidas, e os contadores são o que o backup guardava.

## Reconstruir o índice do histórico de execuções {#rebuild-run-history-index}

| Comando | O que ele faz | Esmaecido quando (situação) | Não aparece quando (papel) |
| --- | --- | --- | --- |
| Reconstruir | "Reconstrói a lista de execuções gravadas varrendo os arquivos de execução. Use isto se a lista de históricos parecer incompleta depois de uma restauração ou de uma mudança de arquivos de lugar. Os próprios arquivos de execução são a fonte da verdade." Relata "Índice do histórico reconstruído: N recuperadas, N removidas (N arquivos de execução).", ou "Índice do histórico reconstruído: N recuperadas, N removidas (1 arquivo de execução)." quando há um só arquivo de execução. A contagem de ilegíveis só aparece quando algum arquivo não pôde ser lido: "Índice do histórico reconstruído: N recuperadas, N removidas, N ilegíveis (N arquivos de execução)." | Enquanto outro comando de backup roda. | Nunca. |

A revarredura devolve a entrada de índice a um arquivo de execução que estava sem ela (a partir da fotografia congelada da própria execução, ou como uma execução com falha se o aplicativo morreu no meio dela), descarta entradas cujo arquivo sumiu, reconstrói as projeções de produtividade a partir de todo arquivo legível, e pula um `.db` estranho ou corrompido depois de identificá-lo em modo somente leitura, contando-o como ilegível sem modificá-lo. Ela então atualiza as fotografias de produtividade que a página do Process mostra. Ela nunca toca nas evidências gravadas de um arquivo de execução.

A revarredura também lê de novo os valores dos metadados com que cada execução legível foi iniciada (um número de série, um lote), para que a busca da lista de [Históricos](histories-list) encontre a execução por eles. É também o caminho de volta para uma execução gravada antes de o índice guardar esses valores cujo arquivo a passagem única em segundo plano depois da atualização não conseguiu ler: essa execução é encontrada só pelo nome até que uma revarredura a leia.

## O que esta seção não faz {#what-this-section-does-not-do}

Não há backup automático nem agendado, não há política de retenção, não há backup para outro lugar (copie os arquivos da pasta), não há restauração parcial, e não há restauração de histórico de execuções: as execuções gravadas são arquivos próprios sob a raiz de dados, e o índice é reconstruído a partir delas. A exportação também não é um backup para outro lugar: ela é escrita na mesma pasta, e levá-la até a máquina que precisa dela continua sendo com você. Importar e exportar execuções se faz na página [Históricos](histories).
