Backup e restore de RPO em producao
Estrategia completa de backup do RPO Protheus: o que copiar, frequencia, restore rapido em caso de problema, automacao.
RPO e o "binario" do Protheus — sem ele, AppServer nao sobe. Perda do RPO = sistema parado. Backup confiavel e estrategia de restore rapida sao basicas em qualquer producao seria.
O que precisa de backup
| Componente | Frequencia | Onde |
|---|---|---|
| RPO principal (tttp.rpo) | Apos cada release TOTVS | /protheus_data/apo/ |
| RPO customizacao (cliente.rpo) | Diaria + apos cada deploy | /protheus_data/apo/ |
| RPO patches (patch_*.rpo) | A cada patch | /protheus_data/apo/ |
| appserver.ini | Antes de cada alteracao | /protheus_data/ |
| Pasta system/ (SX*) | Diaria | /protheus_data/system/ |
| Banco de dados | A cada hora (incremental) | Backup do SQL/Oracle/PG |
| Spool/anexos | Diaria | /protheus_data/spool/ |
Script de backup automatico (Linux)
#!/bin/bash
# /scripts/backup-protheus.sh
DATA=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/protheus"
PROTHEUS_DIR="/protheus_data"
mkdir -p "$BACKUP_DIR/$DATA"
# RPOs
cp -v $PROTHEUS_DIR/apo/*.rpo $BACKUP_DIR/$DATA/
# Config
cp -v $PROTHEUS_DIR/appserver.ini $BACKUP_DIR/$DATA/
# System (dicionarios SX*)
tar czf $BACKUP_DIR/$DATA/system.tar.gz $PROTHEUS_DIR/system/
# Spool (so apos comprimir, e seletivo)
find $PROTHEUS_DIR/spool/ -mtime -1 -type f | tar czf $BACKUP_DIR/$DATA/spool-recent.tar.gz -T -
# Banco (PostgreSQL exemplo)
pg_dump -U archtec -h localhost protheus_db | gzip > $BACKUP_DIR/$DATA/db.sql.gz
# Limpar > 30 dias
find $BACKUP_DIR -mtime +30 -type d -exec rm -rf {} +
echo "Backup completo em $BACKUP_DIR/$DATA"
Cron — automacao
# Backup completo diario as 2h
0 2 * * * /scripts/backup-protheus.sh
# Backup incremental do banco a cada hora
0 * * * * pg_basebackup -U archtec -D /backups/db_inc/$(date +%H)
Backup remoto (offsite)
# Sincronizar pra storage S3
aws s3 sync /backups/protheus s3://empresa-backups/protheus/ --storage-class GLACIER_IR --delete
Restore — cenarios
Cenario 1: RPO custom corrompeu
# 1. Parar AppServer
systemctl stop appserver
# 2. Restaurar RPO anterior
cp /backups/protheus/20260512_020000/cliente.rpo /protheus_data/apo/
# 3. Subir
systemctl start appserver
# 4. Validar via SmartClient
# Tempo total: 5-10 min
Cenario 2: Servidor inteiro perdido
# 1. Provisionar nova VM identica
# 2. Instalar Protheus base
# 3. Restaurar RPO + config + system
tar xzf /backups/protheus/20260513_020000/system.tar.gz -C /
# 4. Restaurar banco
gunzip -c /backups/protheus/20260513_020000/db.sql.gz | psql -U archtec protheus_db
# 5. Configurar appserver.ini
# 6. Subir e validar
# Tempo: 1-2 horas (RTO real)
Cenario 3: Restaurar registro especifico
Pra recuperar 1 cliente apagado por engano sem fazer restore completo:
# Restaurar SO a tabela SA1 em base separada
gunzip -c db.sql.gz | psql -U archtec protheus_temp
# Em SQL, copiar SA1 do temp pra prod
psql -U archtec protheus_db -c "
INSERT INTO sa1010
SELECT * FROM dblink('host=localhost dbname=protheus_temp', 'SELECT * FROM sa1010 WHERE a1_cod = ''000123''')
AS t(...)
"
Validar backup mensalmente
Backup nao testado nao e backup. Faca restore drill 1x por mes em ambiente isolado.
Pegadinhas
- Backup com AppServer rodando: arquivos podem ser inconsistentes. Idealmente parar 1 min ou usar snapshot LVM.
- Banco em backup separado: RPO + banco saem juntos pra consistencia.
- Encryption em transit: backup remoto deve ser cifrado (HTTPS, SSE-S3).
- Documentacao: documente o RTO/RPO. Aprender o procedimento durante crise eh tarde.
- Testar restore: muitos descobrem que backup nao funciona so na hora critica.
RTO/RPO recomendado
| Criticidade | RTO | RPO |
|---|---|---|
| Mission-critical | < 1h | < 15 min |
| Importante | < 4h | < 1h |
| Operacional | < 24h | < 24h |