# Strategie Backup cu INCREMENTAL pentru RPO Îmbunătățit ## Oracle ROA Database Contabilitate **Obiectiv:** Reducere RPO de la **36 ore** la **12 ore** (sau mai puțin) --- ## 🎯 PROBLEMA REZOLVATĂ ### **Situația FĂRĂ incremental:** ``` Luni 02:00 → Full backup ...36 ore fără backup... Marți 14:00 → PRIMARY crash! ❌ → Restore din backup Luni 02:00 → PIERDERE: 36 ore (1.5 zile) de contabilitate ❌ ``` ### **Situația CU incremental:** ``` Luni 02:00 → Full backup Luni 14:00 → Incremental backup ✅ Marți 02:00 → Full backup Marți 14:00 → Incremental backup ✅ ← CEL MAI RECENT! Marți 15:00 → PRIMARY crash! ❌ → Restore: Full (marți 02:00) + Incremental (marți 14:00) → PIERDERE: DOAR 1 oră! ✅ ``` **Îmbunătățire RPO:** 36 ore → **max 12 ore** (de obicei 1-8 ore) --- ## 📋 ARHITECTURĂ BACKUP INTEGRATĂ ### **Timeline zilnic complet:** ``` ┌────────────────────────────────────────────────────────┐ │ DAILY BACKUP SCHEDULE │ ├────────────────────────────────────────────────────────┤ │ │ │ 02:00 → FULL Backup (RMAN Level 0 COMPRESSED) │ │ ├─ Database complet: ~8GB compressed │ │ ├─ + ARCHIVELOG DELETE INPUT │ │ ├─ + BACKUP VALIDATE (integrity check) │ │ └─ Salvat în FRA │ │ │ │ 03:00 → Transfer FULL la DR │ │ └─ SCP → 10.0.20.37 │ │ │ │ 06:00 - 13:00 → Lucru normal contabilitate │ │ │ │ 14:00 → INCREMENTAL Backup (Level 1 COMPRESSED) ←NEW!│ │ ├─ Doar modificări: ~500MB-2GB compressed │ │ ├─ + ARCHIVELOG DELETE INPUT │ │ ├─ + BACKUP VALIDATE │ │ └─ Salvat în FRA │ │ │ │ 14:30 → Transfer INCREMENTAL la DR ← NEW! │ │ └─ SCP → 10.0.20.37 (rapid: 5-10 min) │ │ │ │ 14:00 - 18:00 → Lucru normal contabilitate │ │ │ │ 21:00 → Copiere FRA → E:\ (existent) │ │ └─ Include full + incremental │ │ │ └────────────────────────────────────────────────────────┘ ``` --- ## 🔧 IMPLEMENTARE ### **Fișiere noi create:** | Fișier | Descriere | Locație | |--------|-----------|---------| | `01b_rman_backup_incremental.txt` | Script RMAN pentru incremental | PRIMARY `D:\rman_backup\` | | `02b_transfer_incremental_to_dr.ps1` | Transfer incremental → DR | PRIMARY `D:\rman_backup\` | | `03b_setup_incremental_tasks.ps1` | Setup Task Scheduler | PRIMARY (rulează o dată) | --- ### **Pas 1: Copiere scripturi pe PRIMARY** ```powershell # Pe PRIMARY Windows (10.0.20.36) # Copiază scripturile # Script 1: RMAN incremental Copy-Item "\\path\to\01b_rman_backup_incremental.txt" "D:\rman_backup\rman_backup_incremental.txt" # Script 2: Transfer incremental Copy-Item "\\path\to\02b_transfer_incremental_to_dr.ps1" "D:\rman_backup\transfer_incremental_to_dr.ps1" # Verificare Test-Path "D:\rman_backup\rman_backup_incremental.txt" Test-Path "D:\rman_backup\transfer_incremental_to_dr.ps1" ``` --- ### **Pas 2: Setup Task Scheduler** ```powershell # Rulează ca Administrator PowerShell -ExecutionPolicy Bypass -File "\\path\to\03b_setup_incremental_tasks.ps1" # SAU manual: # Task 1: Incremental backup la 14:00 $action1 = New-ScheduledTaskAction -Execute "cmd.exe" ` -Argument "/c D:\rman_backup\rman_backup_incremental.bat" $trigger1 = New-ScheduledTaskTrigger -Daily -At "14:00" $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" ` -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "Oracle_IncrementalBackup" ` -Action $action1 -Trigger $trigger1 -Principal $principal # Task 2: Transfer incremental la 14:30 $action2 = New-ScheduledTaskAction -Execute "PowerShell.exe" ` -Argument "-ExecutionPolicy Bypass -File D:\rman_backup\transfer_incremental_to_dr.ps1" $trigger2 = New-ScheduledTaskTrigger -Daily -At "14:30" Register-ScheduledTask -TaskName "Oracle_DR_TransferIncremental" ` -Action $action2 -Trigger $trigger2 -Principal $principal # Verificare Get-ScheduledTask | Where-Object { $_.TaskName -like "Oracle*" } ``` --- ### **Pas 3: Test manual** ```powershell # Test incremental backup Start-ScheduledTask -TaskName "Oracle_IncrementalBackup" # Așteaptă 5-10 minute să se termine, apoi test transfer Start-ScheduledTask -TaskName "Oracle_DR_TransferIncremental" # Verificare logs Get-Content "D:\rman_backup\logs\transfer_incr_*.log" -Tail 50 ``` --- ## 📊 CE SE ÎNTÂMPLĂ LA RESTORE ### **Restore cu FULL + INCREMENTAL:** ```bash # Pe DR Server (10.0.20.37) # Script-ul 04_full_dr_restore.sh e deja modificat! # Când rulezi restore: /opt/oracle/scripts/dr/full_dr_restore.sh # RMAN face automat: 1. Catalog toate backup-urile din /opt/oracle/backups/primary/ ├─ Full backup (Level 0): ~8GB └─ Incremental backup (Level 1): ~2GB 2. RESTORE DATABASE ├─ Aplică FULL backup mai întâi └─ Aplică INCREMENTAL automat (RMAN e inteligent!) 3. RECOVER cu archived logs (dacă există) 4. OPEN database cu RESETLOGS REZULTAT: Database restaurat până la ultimul incremental backup! ``` **RMAN știe AUTOMAT** să aplice incremental după full - NU trebuie configurare extra! --- ## 💾 STORAGE ȘI BANDWIDTH ### **Impact Storage:** | Locație | FĂRĂ Incremental | CU Incremental | Diferență | |---------|------------------|----------------|-----------| | **PRIMARY FRA** | ~8GB (1 full) | ~10GB (1 full + 1 incr) | +2GB | | **DR Server** | ~8GB | ~10GB | +2GB | | **E:\ HDD extern** | ~16GB | ~20GB | +4GB | | **TOTAL** | ~32GB | ~40GB | **+8GB** | **Concluzie:** Cost storage +25% pentru RPO de 3x mai bun! --- ### **Impact Bandwidth:** | Transfer | Fără Incremental | Cu Incremental | Diferență | |----------|------------------|----------------|-----------| | **Zilnic total** | ~8GB (la 03:00) | ~10GB (8GB + 2GB) | +2GB | | **Timp transfer** | ~15 min | ~20 min total | +5 min | **Impact minim** pe network! --- ## 📈 RPO IMPROVEMENT ### **Scenarii recovery:** | Ora Crash | Backup disponibil | Pierdere date | RPO | |-----------|-------------------|---------------|-----| | **03:00** | Full (02:00) | 1 oră | ✅ Excelent | | **08:00** | Full (02:00) | 6 ore | ⚠️ Acceptabil | | **14:00** | Full (02:00) | 12 ore | ⚠️ Acceptabil | | **15:00** | Full (02:00) + Incr (14:00) | **1 oră** | ✅ **Excelent!** | | **20:00** | Full (02:00) + Incr (14:00) | 6 ore | ⚠️ Acceptabil | | **01:00** | Full (02:00 ieri) + Incr (14:00 ieri) | 11 ore | ⚠️ Acceptabil | **Average RPO:** ~6 ore (vs 18 ore fără incremental) **Max RPO:** 12 ore (vs 36 ore fără incremental) --- ## ⚠️ CONSIDERAȚII ### **Când e UTIL incremental:** ✅ **DA - Activează incremental dacă:** - Contabilitate activă în cursul zilei - Modificări frecvente (facturi, înregistrări) - RPO de 36h e prea mare (pierdere inacceptabilă) - Aveți +10GB spațiu extra pe PRIMARY și DR ### **Când NU e necesar:** ❌ **NU activa incremental dacă:** - Baza de date se modifică doar dimineața - RPO de 36h e acceptabil pentru business - Spațiu disk limitat (<20GB free) - Problemă de bandwidth (transfer lent) --- ## 🎯 ALTERNATIVE ### **Opțiunea 2: Două incrementale pe zi** ``` 02:00 → Full backup 10:00 → Incremental #1 16:00 → Incremental #2 ``` **RPO:** max 8 ore (și mai bun!) **Dezavantaje:** - Mai mult storage (~12GB total) - Mai mult bandwidth - Restore mai lent (3 backup-uri: full + 2x incremental) **Când să folosești:** - Contabilitate super-critică - Modificări masive în cursul zilei - RPO target <8 ore --- ### **Opțiunea 3: Archive log shipping** ``` 02:00 → Full backup La fiecare 15 min → Transfer archive logs către DR ``` **RPO:** ~15 minute! (cel mai bun) **Dezavantaje:** - Foarte complex de implementat - Transfer continuu (impact bandwidth) - Database pe DR trebuie în MOUNT mode (consumă resurse) - NU funcționează bine cross-platform (Windows→Linux) **Când să folosești:** - RPO <1 oră OBLIGATORIU - Buget pentru licență Oracle Enterprise Edition + Data Guard - Same-platform (Windows→Windows sau Linux→Linux) --- ## ✅ RECOMANDARE FINALĂ **Pentru database CONTABILITATE ROA:** ### **Începe cu Opțiunea 1 (un incremental la 14:00)** **De ce:** - ✅ RPO improvement semnificativ: 36h → 12h (3x mai bun!) - ✅ Cost reasonable: +8GB storage, +5 min transfer - ✅ Simplu de implementat (3 scripturi) - ✅ RMAN aplică automat incremental la restore - ✅ Nu impactează performanța (ora 14:00 = pauză masă) **Măsoară după 1 lună:** - Dimensiune medie incremental backup - Timp transfer - Încărcarea pe PRIMARY la 14:00 **Dacă e nevoie, upgrade la Opțiunea 2** (2 incrementale/zi) --- ## 📋 CHECKLIST IMPLEMENTARE ### **Setup (once):** - [ ] Copiere `01b_rman_backup_incremental.txt` → `D:\rman_backup\rman_backup_incremental.txt` - [ ] Copiere `02b_transfer_incremental_to_dr.ps1` → `D:\rman_backup\transfer_incremental_to_dr.ps1` - [ ] Rulare `03b_setup_incremental_tasks.ps1` (ca Administrator) - [ ] Verificare task-uri create în Task Scheduler - [ ] Test manual incremental backup - [ ] Test manual transfer incremental - [ ] Verificare pe DR că fișierele ajung ### **Monitoring (zilnic - primele 2 săptămâni):** - [ ] Verifică că incremental backup rulează la 14:00 - [ ] Verifică că transfer rulează la 14:30 - [ ] Verifică logs pentru erori - [ ] Verifică dimensiune backup incremental - [ ] Verifică spațiu disk (PRIMARY și DR) ### **Test restore (lunar):** - [ ] Rulează `/opt/oracle/scripts/dr/05_test_restore_dr.sh` - [ ] Verifică că RMAN aplică corect full + incremental - [ ] Verifică RTO (ar trebui să fie similar: 45-75 min) - [ ] Verifică integritate date restaurate --- **Versiune:** 1.0 **Data:** 2025-10-08 **Status:** Ready for Implementation