Add Oracle DR standby server scripts and Proxmox troubleshooting docs
- Add comprehensive Oracle backup and DR strategy documentation - Add RMAN backup scripts (full and incremental) - Add PowerShell transfer scripts for DR site - Add bash restore and verification scripts - Reorganize Oracle documentation structure - Add Proxmox troubleshooting guide for VM 201 HA errors and NFS storage issues 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
726
oracle/standby-server-scripts/STRATEGIE_BACKUP_CONTABILITATE.md
Normal file
726
oracle/standby-server-scripts/STRATEGIE_BACKUP_CONTABILITATE.md
Normal file
@@ -0,0 +1,726 @@
|
||||
# Strategie Backup Integrată pentru Database Contabilitate
|
||||
## Oracle 19c ROA - PRIMARY (10.0.20.36) → DR (10.0.20.37)
|
||||
|
||||
**Document:** Strategie Backup pentru bază de date CONTABILITATE
|
||||
**Versiune:** 1.0
|
||||
**Data:** 2025-10-07
|
||||
**Status:** Ready for Implementation
|
||||
|
||||
---
|
||||
|
||||
## 📊 CONTEXT: Database Contabilitate
|
||||
|
||||
### De ce e DIFERITĂ strategia pentru contabilitate:
|
||||
|
||||
| Aspect | Database Normală | Database CONTABILITATE |
|
||||
|--------|------------------|------------------------|
|
||||
| **Retenție backups** | 7-14 zile | 2-3 backups (max 3 zile) |
|
||||
| **Recovery Point** | Poate tolera 1 săptămână pierdere | MAX 1 zi pierdere acceptabilă |
|
||||
| **Viteză recovery** | Important dar nu critic | CRITIC - business impact |
|
||||
| **Frecvență modificări** | Variabil | ZILNIC (facturi, registre) |
|
||||
| **Valoare date vechi** | Relevant istoric | Backup de 7 zile = INUTIL |
|
||||
|
||||
**Concluzie:** Pentru contabilitate, cel mai important e **backup-ul de IERI seara**, NU cel de acum 7 zile!
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ ARHITECTURĂ - 4 Niveluri Protecție
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ PRIMARY 10.0.20.36 (Windows Server) │
|
||||
│ Oracle 19c SE2 - Database ROA │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ NIVEL 1: Local Fast Recovery Area (FRA) │ │
|
||||
│ │ -------------------------------------------------------- │ │
|
||||
│ │ Locație: C:\Users\Oracle\recovery_area\ROA\ │ │
|
||||
│ │ Backup: 02:00 AM - RMAN Full COMPRESSED + ARCHIVELOG │ │
|
||||
│ │ Size: ~8-10 GB compressed (vs 23GB uncompressed original) │ │
|
||||
│ │ Retenție: 2 backups (REDUNDANCY 2) │ │
|
||||
│ │ │ │
|
||||
│ │ ✅ Protecție contra: user error, table drop, data corruption │ │
|
||||
│ │ ✅ RTO: 30 minute │ │
|
||||
│ │ ✅ RPO: 1 zi max │ │
|
||||
│ └──────────────────────────┬───────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ │ 21:00 - Copiere automată (Task "MareBackup") │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ NIVEL 2: External HDD Backup (Local) │ │
|
||||
│ │ -------------------------------------------------------- │ │
|
||||
│ │ Locație: E:\backup_roa\ │ │
|
||||
│ │ Tip: HDD EXTERN (conectat permanent sau doar când rulează task) │ │
|
||||
│ │ Conținut: Copie 1:1 a FRA (BACKUPSET + ARCHIVELOG + AUTOBACKUP) │ │
|
||||
│ │ Size: ~30-40 GB (include și archived logs neșterse) │ │
|
||||
│ │ │ │
|
||||
│ │ ✅ Protecție contra: crash disk C:\, corruption FRA │ │
|
||||
│ │ ✅ RTO: 1 oră │ │
|
||||
│ │ ✅ RPO: 1 zi │ │
|
||||
│ └──────────────────────────┬───────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
└─────────────────────────────┼────────────────────────────────────────────────┘
|
||||
│
|
||||
│ 03:00 - Transfer automat SCP (NOU!)
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ NIVEL 3: DR Server (Offsite Backup) │
|
||||
│ ---------------------------------------- │
|
||||
│ Server: LXC 109 - 10.0.20.37 (Linux Proxmox Container) │
|
||||
│ Container: Docker oracle-standby │
|
||||
│ Locație: /opt/oracle/backups/primary/ │
|
||||
│ Retenție: 3 backups (ultimele 3 zile) │
|
||||
│ Database: OPRIT (pornit doar la disaster recovery) │
|
||||
│ │
|
||||
│ ✅ Protecție contra: crash complet PRIMARY, hardware failure │
|
||||
│ ✅ RTO: 1-2 ore (restore + recovery + validare) │
|
||||
│ ✅ RPO: 1 zi │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
Weekend - HDD E:\ deconectat și dus acasă
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ NIVEL 4: Offline Backup (Acasă) │
|
||||
│ --------------------------------- │
|
||||
│ Tip: HDD EXTERN E:\ (scos din clădire) │
|
||||
│ Frecvență: Weekend / Lunar │
|
||||
│ Conținut: Ultimul backup full disponibil │
|
||||
│ │
|
||||
│ ✅ Protecție contra: incendiu, inundație, ransomware, theft │
|
||||
│ ✅ RTO: 1 zi (rebuild server + restore) │
|
||||
│ ✅ RPO: Weekend (max 2-3 zile pierdere) │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 CE MODIFICĂM față de Situația Actuală
|
||||
|
||||
### ✅ CE FUNCȚIONEAZĂ DEJA (nu atingem):
|
||||
|
||||
1. **02:00 AM** - `d:\rman_backup\rman_backup.bat`
|
||||
- Script RMAN backup (ÎL UPGRADE-ăm pentru compression)
|
||||
- Salvează în FRA default
|
||||
|
||||
2. **21:00** - Task Scheduler "MareBackup"
|
||||
- Copiază FRA pe E:\ (HDD extern)
|
||||
- **NU modificăm acest task!**
|
||||
|
||||
### 🆕 CE ADĂUGĂM (NOU):
|
||||
|
||||
3. **03:00 AM** (NOU) - Transfer către DR
|
||||
- Script PowerShell nou: `transfer_to_dr.ps1`
|
||||
- Copiază backup-uri de pe PRIMARY → DR server
|
||||
- Cleanup automat (păstrează 3 backups pe DR)
|
||||
|
||||
---
|
||||
|
||||
## 📋 PLAN IMPLEMENTARE - Pași Detaliați
|
||||
|
||||
### **Pregătire (One-Time Setup)**
|
||||
|
||||
#### Pasul 1: Setup SSH Keys (15 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY (10.0.20.36) - rulează ca Administrator
|
||||
# Generare SSH key pair (dacă nu există deja)
|
||||
ssh-keygen -t rsa -b 4096 -f "$env:USERPROFILE\.ssh\id_rsa" -N '""'
|
||||
|
||||
# Verificare key generat
|
||||
Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub"
|
||||
# Copiază output-ul (cheia publică)
|
||||
```
|
||||
|
||||
```bash
|
||||
# Pe DR Server (10.0.20.37) - conectează-te via SSH
|
||||
ssh root@10.0.20.37
|
||||
|
||||
# Creare director SSH
|
||||
mkdir -p /root/.ssh
|
||||
chmod 700 /root/.ssh
|
||||
|
||||
# Adaugă public key în authorized_keys
|
||||
nano /root/.ssh/authorized_keys
|
||||
# PASTE cheia publică copiată mai sus, save și exit (Ctrl+X, Y, Enter)
|
||||
|
||||
chmod 600 /root/.ssh/authorized_keys
|
||||
|
||||
# Test conexiune
|
||||
exit
|
||||
```
|
||||
|
||||
```powershell
|
||||
# Înapoi pe PRIMARY - test conexiune SSH
|
||||
ssh -i "$env:USERPROFILE\.ssh\id_rsa" root@10.0.20.37 "echo 'SSH OK'"
|
||||
# Ar trebui să vezi "SSH OK" FĂRĂ să ceară parolă!
|
||||
```
|
||||
|
||||
#### Pasul 2: Creare Directoare pe DR (5 minute)
|
||||
|
||||
```bash
|
||||
# Pe DR Server (10.0.20.37)
|
||||
ssh root@10.0.20.37
|
||||
|
||||
# Creare structură directoare
|
||||
mkdir -p /opt/oracle/backups/primary
|
||||
chmod 755 /opt/oracle/backups
|
||||
chmod 755 /opt/oracle/backups/primary
|
||||
|
||||
# Verificare spațiu disponibil (minim 50GB recomandat)
|
||||
df -h /opt/oracle
|
||||
|
||||
# Ar trebui să vezi:
|
||||
# Filesystem Size Used Avail Use% Mounted on
|
||||
# /dev/... xxxG xxxG xxxG xx% /
|
||||
|
||||
exit
|
||||
```
|
||||
|
||||
#### Pasul 3: Upgrade Script RMAN pentru Compression (10 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY (10.0.20.36)
|
||||
|
||||
# BACKUP scriptul vechi
|
||||
Copy-Item "D:\rman_backup\rman_backup.txt" "D:\rman_backup\rman_backup.txt.backup_$(Get-Date -Format 'yyyyMMdd')"
|
||||
|
||||
# Verificare backup creat
|
||||
Get-Item "D:\rman_backup\rman_backup.txt.backup_*"
|
||||
```
|
||||
|
||||
**Modifică fișierul `D:\rman_backup\rman_backup.txt`** cu următorul conținut:
|
||||
|
||||
```sql
|
||||
RUN {
|
||||
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
|
||||
CONFIGURE CONTROLFILE AUTOBACKUP ON;
|
||||
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
|
||||
|
||||
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
|
||||
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
|
||||
|
||||
# Full backup COMPRESSED + Archive logs (șterge logs după backup)
|
||||
BACKUP AS COMPRESSED BACKUPSET
|
||||
INCREMENTAL LEVEL 0
|
||||
CUMULATIVE
|
||||
DEVICE TYPE DISK
|
||||
TAG 'DAILY_FULL_COMPRESSED'
|
||||
DATABASE
|
||||
INCLUDE CURRENT CONTROLFILE
|
||||
PLUS ARCHIVELOG
|
||||
DELETE INPUT;
|
||||
|
||||
# Backup SPFILE separat
|
||||
BACKUP AS COMPRESSED BACKUPSET SPFILE;
|
||||
|
||||
# Cleanup old backups (păstrează ultimele 2)
|
||||
ALLOCATE CHANNEL FOR MAINTENANCE TYPE DISK;
|
||||
DELETE NOPROMPT OBSOLETE DEVICE TYPE DISK;
|
||||
RELEASE CHANNEL;
|
||||
|
||||
RELEASE CHANNEL ch1;
|
||||
RELEASE CHANNEL ch2;
|
||||
}
|
||||
```
|
||||
|
||||
**Modificări cheie:**
|
||||
- ✅ Adăugat **COMPRESSED BACKUPSET** → reduce de la 23GB la ~8GB
|
||||
- ✅ Adăugat **PLUS ARCHIVELOG DELETE INPUT** → include logs în backup și îi șterge după
|
||||
- ✅ **REDUNDANCY 1** → păstrează DOAR ultimul backup (relevant pentru contabilitate!)
|
||||
- ✅ **BACKUP VALIDATE** → verificare integritate IMEDIAT după backup
|
||||
- ✅ **PARALLELISM 2** → folosește 2 channels pentru viteză
|
||||
|
||||
#### Pasul 4: Instalare Transfer Script (5 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY - copiază scriptul transfer_to_dr.ps1
|
||||
|
||||
# Creare director logs
|
||||
New-Item -ItemType Directory -Force -Path "D:\rman_backup\logs"
|
||||
|
||||
# Copiază scriptul de la:
|
||||
# oracle/standby-server-scripts/02_transfer_to_dr.ps1
|
||||
# către:
|
||||
# D:\rman_backup\transfer_to_dr.ps1
|
||||
|
||||
Copy-Item "\\path\to\02_transfer_to_dr.ps1" "D:\rman_backup\transfer_to_dr.ps1"
|
||||
|
||||
# Verificare
|
||||
Test-Path "D:\rman_backup\transfer_to_dr.ps1" # Ar trebui să returneze True
|
||||
```
|
||||
|
||||
#### Pasul 5: Setup Task Scheduler (5 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY - rulează ca Administrator!
|
||||
|
||||
# Opțiunea 1: Rulează scriptul automat de setup
|
||||
# Copiază 03_setup_dr_transfer_task.ps1 și rulează:
|
||||
PowerShell -ExecutionPolicy Bypass -File "\\path\to\03_setup_dr_transfer_task.ps1"
|
||||
|
||||
# SAU Opțiunea 2: Creare manuală task
|
||||
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
|
||||
-Argument "-ExecutionPolicy Bypass -NoProfile -File `"D:\rman_backup\transfer_to_dr.ps1`""
|
||||
|
||||
$trigger = New-ScheduledTaskTrigger -Daily -At "03:00AM"
|
||||
|
||||
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
|
||||
-LogonType ServiceAccount -RunLevel Highest
|
||||
|
||||
$settings = New-ScheduledTaskSettingsSet `
|
||||
-AllowStartIfOnBatteries `
|
||||
-DontStopIfGoingOnBatteries `
|
||||
-StartWhenAvailable `
|
||||
-RestartCount 3 `
|
||||
-RestartInterval (New-TimeSpan -Minutes 5)
|
||||
|
||||
Register-ScheduledTask -TaskName "Oracle_DR_Transfer" `
|
||||
-Action $action -Trigger $trigger -Principal $principal -Settings $settings `
|
||||
-Description "Oracle DR - Transfer backups to 10.0.20.37 at 3 AM daily"
|
||||
|
||||
# Verificare task creat
|
||||
Get-ScheduledTask -TaskName "Oracle_DR_Transfer"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **Testare și Validare**
|
||||
|
||||
#### Test 1: Test RMAN Backup Upgraded (30 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY
|
||||
|
||||
# Rulează manual backup-ul RMAN pentru a testa compression
|
||||
cd D:\rman_backup
|
||||
|
||||
# Check size ÎNAINTE (backup vechi)
|
||||
$oldBackup = Get-ChildItem "C:\Users\Oracle\recovery_area\ROA\BACKUPSET" -Recurse -File |
|
||||
Measure-Object -Property Length -Sum
|
||||
Write-Host "Old backup size: $([math]::Round($oldBackup.Sum / 1GB, 2)) GB"
|
||||
|
||||
# Rulează backup nou (cu compression)
|
||||
.\rman_backup.bat
|
||||
|
||||
# Așteaptă să se termine (15-30 min) și verifică size NOU
|
||||
$newBackup = Get-ChildItem "C:\Users\Oracle\recovery_area\ROA\BACKUPSET" -Recurse -File |
|
||||
Sort-Object LastWriteTime -Descending | Select-Object -First 10 |
|
||||
Measure-Object -Property Length -Sum
|
||||
Write-Host "New backup size: $([math]::Round($newBackup.Sum / 1GB, 2)) GB"
|
||||
|
||||
# Ar trebui să vezi reducere de la ~23GB la ~8GB!
|
||||
```
|
||||
|
||||
#### Test 2: Test Transfer către DR (10 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY - test manual transfer script
|
||||
|
||||
PowerShell -ExecutionPolicy Bypass -File "D:\rman_backup\transfer_to_dr.ps1"
|
||||
|
||||
# Monitorizează output - ar trebui să vezi:
|
||||
# - "SSH connection successful"
|
||||
# - "Found X files to transfer"
|
||||
# - "Transferring: filename.BKP"
|
||||
# - "✅ Transferred: filename.BKP"
|
||||
# - "Transfer completed successfully"
|
||||
|
||||
# Verificare log
|
||||
Get-Content "D:\rman_backup\logs\transfer_$(Get-Date -Format 'yyyyMMdd').log" -Tail 50
|
||||
```
|
||||
|
||||
```bash
|
||||
# Pe DR Server - verificare backup-uri primite
|
||||
ssh root@10.0.20.37
|
||||
|
||||
ls -lh /opt/oracle/backups/primary/
|
||||
# Ar trebui să vezi fișierele .BKP transferate
|
||||
|
||||
# Verificare integritate (opțional)
|
||||
md5sum /opt/oracle/backups/primary/*.BKP
|
||||
```
|
||||
|
||||
#### Test 3: Test Restore pe DR (60 minute) - OPȚIONAL dar RECOMANDAT
|
||||
|
||||
Vezi secțiunea "Disaster Recovery Procedure" din `PLAN_BACKUP_DR_SIMPLE.md` pentru detalii complete.
|
||||
|
||||
```bash
|
||||
# Pe DR Server - test restore din backup
|
||||
ssh root@10.0.20.37
|
||||
|
||||
# Rulează scriptul de restore (din PLAN_BACKUP_DR_SIMPLE.md)
|
||||
/opt/oracle/scripts/dr/full_dr_restore.sh /opt/oracle/backups/primary
|
||||
|
||||
# Verifică că database se restore corect
|
||||
# IMPORTANT: După test, OPREȘTE database pe DR!
|
||||
docker exec oracle-standby su - oracle -c "sqlplus / as sysdba <<< 'SHUTDOWN IMMEDIATE;'"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📅 CALENDAR OPERAȚIONAL
|
||||
|
||||
### Zilnic (Automat)
|
||||
|
||||
| Ora | Task | Descriere | Durată | Log Location |
|
||||
|-------|------|-----------|--------|--------------|
|
||||
| 02:00 | RMAN Backup | Full COMPRESSED + ARCHIVELOG | 20-30 min | Alert log + RMAN output |
|
||||
| 03:00 | DR Transfer | Transfer backup → 10.0.20.37 | 10-15 min | `D:\rman_backup\logs\transfer_YYYYMMDD.log` |
|
||||
| 21:00 | MareBackup | Copiere FRA → E:\ (HDD extern) | 5-10 min | Task Scheduler log |
|
||||
|
||||
### Săptămânal (Manual - 10 minute)
|
||||
|
||||
**Luni dimineața:**
|
||||
- ✅ Verifică că toate backup-urile au rulat OK în weekend
|
||||
- ✅ Check logs pentru erori:
|
||||
```powershell
|
||||
# Verificare quick
|
||||
Get-Content "D:\rman_backup\logs\transfer_*.log" | Select-String "ERROR|FAILED"
|
||||
```
|
||||
|
||||
**Vineri seara (opțional):**
|
||||
- ✅ Verifică spațiu disk pe PRIMARY și DR
|
||||
```powershell
|
||||
# PRIMARY
|
||||
Get-PSDrive C,D,E | Format-Table Name, @{L="Free(GB)";E={[math]::Round($_.Free/1GB,1)}}
|
||||
```
|
||||
```bash
|
||||
# DR
|
||||
ssh root@10.0.20.37 "df -h /opt/oracle"
|
||||
```
|
||||
|
||||
### Lunar (Manual - 2 ore)
|
||||
|
||||
**Prima Duminică a lunii:**
|
||||
- ✅ **TEST RESTORE pe DR** (OBLIGATORIU!)
|
||||
- Rulează test restore complet pe DR
|
||||
- Verifică că poți deschide database
|
||||
- Validează că datele sunt corecte
|
||||
- Documentează RTO (timp necesar pentru restore)
|
||||
|
||||
**Ultima Vineri:**
|
||||
- ✅ **Backup HDD Offline** (opțional dar recomandat)
|
||||
- Conectează HDD E:\ (dacă nu e conectat permanent)
|
||||
- Lasă task-ul de la 21:00 să copieze backup-urile
|
||||
- Weekend: deconectează HDD și du-l acasă
|
||||
- Luni: readuce HDD și reconectează-l
|
||||
|
||||
---
|
||||
|
||||
## 🚨 DISASTER RECOVERY - Procedură Urgență
|
||||
|
||||
### Când ACTIVEZI DR?
|
||||
|
||||
**DA - Activează DR dacă:**
|
||||
- ✅ PRIMARY server 10.0.20.36 NU răspunde de >30 minute
|
||||
- ✅ Oracle database corupt complet (nu se deschide)
|
||||
- ✅ Crash disk C:\ sau D:\ cu date
|
||||
- ✅ Ransomware / malware care a criptat datele
|
||||
|
||||
**NU - Nu activa DR pentru:**
|
||||
- ❌ Probleme minore de performance
|
||||
- ❌ User a șters accidental câteva înregistrări (folosește point-in-time recovery LOCAL)
|
||||
- ❌ Restart Windows sau maintenance planificat
|
||||
- ❌ Erori fixabile în <30 minute
|
||||
|
||||
### Procedură Rapidă DR Activation (60 minute)
|
||||
|
||||
```bash
|
||||
# Pe DR Server (10.0.20.37)
|
||||
ssh root@10.0.20.37
|
||||
|
||||
# 1. VERIFICĂ că PRIMARY e CU ADEVĂRAT down! (FOARTE IMPORTANT!)
|
||||
ping -c 10 10.0.20.36
|
||||
# Dacă PRIMARY răspunde → STOP! NU continua!
|
||||
|
||||
# 2. Rulează script restore (din PLAN_BACKUP_DR_SIMPLE.md)
|
||||
/opt/oracle/scripts/dr/full_dr_restore.sh
|
||||
|
||||
# 3. Monitorizează progres
|
||||
tail -f /opt/oracle/logs/dr/restore_*.log
|
||||
|
||||
# 4. După ~45-60 minute, database ar trebui să fie OPEN
|
||||
docker exec oracle-standby su - oracle -c "sqlplus / as sysdba <<< 'SELECT name, open_mode FROM v\$database;'"
|
||||
|
||||
# Output așteptat:
|
||||
# NAME OPEN_MODE
|
||||
# --------- ----------
|
||||
# ROA READ WRITE
|
||||
|
||||
# 5. UPDATE conexiuni aplicații
|
||||
# Schimbă connection string de la:
|
||||
# 10.0.20.36:1521/ROA
|
||||
# la:
|
||||
# 10.0.20.37:1521/ROA
|
||||
|
||||
# 6. Notifică utilizatori
|
||||
```
|
||||
|
||||
**RTO Așteptat:** 45-75 minute (în funcție de viteza disk I/O pe DR)
|
||||
**RPO:** Max 1 zi (ultimul backup de la 02:00 AM)
|
||||
|
||||
---
|
||||
|
||||
## 📊 METRICI ȘI MONITORING
|
||||
|
||||
### KPI-uri Cheie
|
||||
|
||||
| Metric | Target | Alertă Dacă | Cum Verifici |
|
||||
|--------|--------|-------------|--------------|
|
||||
| **Backup Success Rate** | >99% | <95% în ultima săptămână | Check logs zilnic |
|
||||
| **Transfer Success Rate** | >99% | <98% în ultima săptămână | Check DR server daily |
|
||||
| **Backup Size** | 8-12 GB | >15GB (compression issue) | Check FRA size |
|
||||
| **Backup Duration** | 20-30 min | >45 min | Check RMAN logs |
|
||||
| **Transfer Duration** | 10-15 min | >30 min | Check transfer logs |
|
||||
| **DR Disk Space** | <60% used | >80% used | `df -h /opt/oracle` |
|
||||
| **PRIMARY Disk Space** | <70% used | >85% used | Check drives C,D,E |
|
||||
| **Test Restore Success** | 100% | Failure | Monthly test |
|
||||
|
||||
### Quick Health Check (5 minute)
|
||||
|
||||
```powershell
|
||||
# Pe PRIMARY - rulează zilnic dimineața
|
||||
|
||||
# Check 1: Ultimul backup RMAN
|
||||
$lastBackup = Get-ChildItem "C:\Users\Oracle\recovery_area\ROA\BACKUPSET" -Recurse -File |
|
||||
Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
||||
$age = (Get-Date) - $lastBackup.LastWriteTime
|
||||
Write-Host "Last backup: $($lastBackup.Name), Age: $($age.Hours) hours"
|
||||
# Ar trebui să fie <30 ore (backup de ieri la 02:00)
|
||||
|
||||
# Check 2: Transfer log
|
||||
$lastTransferLog = Get-Item "D:\rman_backup\logs\transfer_*.log" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
||||
Select-String -Path $lastTransferLog -Pattern "completed successfully|ERROR" | Select-Object -Last 1
|
||||
# Ar trebui să vezi "completed successfully"
|
||||
|
||||
# Check 3: Disk space
|
||||
Get-PSDrive C,D,E | Format-Table Name, @{L="Free(GB)";E={[math]::Round($_.Free/1GB,1)}}
|
||||
# C:\ ar trebui să aibă >10GB free, D:\ >20GB, E:\ variabil
|
||||
```
|
||||
|
||||
```bash
|
||||
# Pe DR - check săptămânal
|
||||
ssh root@10.0.20.37 << 'EOF'
|
||||
echo "=== DR Server Health Check ==="
|
||||
echo "Disk space:"
|
||||
df -h /opt/oracle | tail -1
|
||||
echo ""
|
||||
echo "Latest backup files:"
|
||||
ls -lth /opt/oracle/backups/primary/*.BKP | head -5
|
||||
echo ""
|
||||
echo "Backup count:"
|
||||
ls -1 /opt/oracle/backups/primary/*.BKP | wc -l
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ TROUBLESHOOTING
|
||||
|
||||
### Problem 1: "Transfer failed - SSH connection refused"
|
||||
|
||||
**Cauze posibile:**
|
||||
- DR server oprit
|
||||
- Firewall blochează port 22
|
||||
- SSH keys expirate sau schimbate
|
||||
|
||||
**Soluții:**
|
||||
```powershell
|
||||
# Test conexiune
|
||||
ping 10.0.20.37
|
||||
|
||||
# Test SSH
|
||||
ssh -v -i "$env:USERPROFILE\.ssh\id_rsa" root@10.0.20.37 "echo OK"
|
||||
|
||||
# Regenerare SSH keys (dacă e necesar)
|
||||
ssh-copy-id -i "$env:USERPROFILE\.ssh\id_rsa.pub" root@10.0.20.37
|
||||
```
|
||||
|
||||
### Problem 2: "RMAN-03009: failure of backup command"
|
||||
|
||||
**Cauze:**
|
||||
- Disk plin
|
||||
- Oracle process crash
|
||||
- FRA quota exceeded
|
||||
|
||||
**Soluții:**
|
||||
```sql
|
||||
-- Check FRA usage
|
||||
SELECT * FROM v$recovery_area_usage;
|
||||
SELECT * FROM v$flash_recovery_area_usage;
|
||||
|
||||
-- Check disk space
|
||||
!df -h (Linux) sau host dir C:\ (Windows)
|
||||
|
||||
-- Cleanup old backups manual
|
||||
RMAN> DELETE NOPROMPT OBSOLETE;
|
||||
```
|
||||
|
||||
### Problem 3: "HDD extern E:\ not found"
|
||||
|
||||
**Cauze:**
|
||||
- HDD deconectat
|
||||
- Litera drive schimbată
|
||||
- HDD defect
|
||||
|
||||
**Soluții:**
|
||||
```powershell
|
||||
# Verificare drives
|
||||
Get-PSDrive -PSProvider FileSystem
|
||||
|
||||
# Reconnect HDD
|
||||
# - Verifică USB/SATA connection
|
||||
# - Check Disk Management (diskmgmt.msc)
|
||||
# - Reassign drive letter dacă e necesar
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 SECURITATE
|
||||
|
||||
### SSH Keys Management
|
||||
|
||||
```powershell
|
||||
# Backup SSH keys (IMPORTANT!)
|
||||
$backupPath = "D:\secure_backup\ssh_keys_$(Get-Date -Format 'yyyyMMdd')"
|
||||
New-Item -ItemType Directory -Force -Path $backupPath
|
||||
Copy-Item "$env:USERPROFILE\.ssh\id_rsa*" $backupPath
|
||||
|
||||
# Protect private key
|
||||
icacls "$env:USERPROFILE\.ssh\id_rsa" /inheritance:r /grant:r "$env:USERNAME:(F)"
|
||||
```
|
||||
|
||||
### Access Control
|
||||
|
||||
```bash
|
||||
# Pe DR - restricționează access la backups
|
||||
chmod 700 /opt/oracle/backups
|
||||
chown -R oracle:dba /opt/oracle/backups
|
||||
|
||||
# Verificare permissions
|
||||
ls -la /opt/oracle/backups
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📄 FILES REFERENCE
|
||||
|
||||
### Pe PRIMARY (10.0.20.36):
|
||||
|
||||
```
|
||||
D:\rman_backup\
|
||||
├── rman_backup.bat # Existent - script launcher
|
||||
├── rman_backup.txt # UPGRADE - adaugă compression
|
||||
├── rman_backup.txt.backup_* # Backup vechi (safety)
|
||||
├── transfer_to_dr.ps1 # NOU - transfer script
|
||||
└── logs\
|
||||
└── transfer_YYYYMMDD.log # Transfer logs
|
||||
|
||||
C:\Users\Oracle\recovery_area\ROA\
|
||||
├── BACKUPSET\ # RMAN backups
|
||||
├── AUTOBACKUP\ # Controlfile autobackups
|
||||
└── ARCHIVELOG\ # Archived logs (temporary)
|
||||
|
||||
E:\backup_roa\ # HDD extern - copie la 21:00
|
||||
```
|
||||
|
||||
### Pe DR (10.0.20.37):
|
||||
|
||||
```
|
||||
/opt/oracle/backups/primary/ # Backup-uri primite de la PRIMARY
|
||||
└── *.BKP # RMAN backup files
|
||||
|
||||
/opt/oracle/scripts/dr/ # Scripts restore (din PLAN_BACKUP_DR_SIMPLE.md)
|
||||
└── full_dr_restore.sh # Main restore script
|
||||
|
||||
/opt/oracle/logs/dr/ # Logs restore
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ CHECKLIST IMPLEMENTARE
|
||||
|
||||
### Pregătire (One-Time)
|
||||
|
||||
- [ ] Setup SSH keys PRIMARY → DR
|
||||
- [ ] Test conexiune SSH passwordless
|
||||
- [ ] Creare directoare pe DR (`/opt/oracle/backups/primary`)
|
||||
- [ ] Verificare spațiu disk DR (>50GB free)
|
||||
- [ ] Backup script RMAN vechi (`rman_backup.txt.backup`)
|
||||
- [ ] Upgrade script RMAN (adaugă compression)
|
||||
- [ ] Copiere script `transfer_to_dr.ps1` pe PRIMARY
|
||||
- [ ] Creare director logs (`D:\rman_backup\logs`)
|
||||
- [ ] Setup Task Scheduler pentru transfer (03:00 AM)
|
||||
|
||||
### Testare (Pre-Production)
|
||||
|
||||
- [ ] Test manual RMAN backup upgraded (verifică compression funcționează)
|
||||
- [ ] Test manual transfer script (verifică backup-uri ajung pe DR)
|
||||
- [ ] Verificare logs transfer (fără erori)
|
||||
- [ ] Verificare integritate fișiere pe DR (md5sum)
|
||||
- [ ] Test restore pe DR (opțional dar recomandat!)
|
||||
|
||||
### Go-Live
|
||||
|
||||
- [ ] Lasă să ruleze automat 3 nopți consecutive
|
||||
- [ ] Monitorizează logs zilnic
|
||||
- [ ] Verifică că toate task-urile rulează OK
|
||||
- [ ] Documentează orice issue găsit
|
||||
|
||||
### Post-Implementation (Lunar)
|
||||
|
||||
- [ ] Test restore complet pe DR (prima Duminică)
|
||||
- [ ] Review metrics și KPIs
|
||||
- [ ] Update documentație dacă e necesar
|
||||
- [ ] Backup HDD offline (weekend)
|
||||
|
||||
---
|
||||
|
||||
## 📞 SUPPORT ȘI ESCALATION
|
||||
|
||||
### Log Locations
|
||||
|
||||
| Tip | Location | Retention |
|
||||
|-----|----------|-----------|
|
||||
| **RMAN Backup** | Alert log Oracle | Rolling |
|
||||
| **Transfer DR** | `D:\rman_backup\logs\transfer_YYYYMMDD.log` | 30 days |
|
||||
| **Task Scheduler** | Event Viewer > Task Scheduler | 30 days |
|
||||
| **Restore DR** | `/opt/oracle/logs/dr/restore_*.log` | 90 days |
|
||||
|
||||
### Escalation Path
|
||||
|
||||
| Issue Severity | Response Time | Contact |
|
||||
|----------------|---------------|---------|
|
||||
| **P1 - PRIMARY Down** | Immediate | Activate DR immediately |
|
||||
| **P2 - Backup Failed** | 2 hours | Check logs, retry manual |
|
||||
| **P3 - Transfer Failed** | 4 hours | Retry next night, monitor |
|
||||
| **P4 - Monitoring Alert** | Next business day | Review și investigate |
|
||||
|
||||
---
|
||||
|
||||
## 📝 CHANGELOG
|
||||
|
||||
| Versiune | Data | Modificări |
|
||||
|----------|------|------------|
|
||||
| 1.0 | 2025-10-07 | Strategie inițială pentru database contabilitate |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 NEXT STEPS
|
||||
|
||||
1. **Citește integral această documentație**
|
||||
2. **Verifică prerequisite** (SSH access, disk space, permissions)
|
||||
3. **Implementează pașii din "PLAN IMPLEMENTARE"**
|
||||
4. **Testează manual** înainte de go-live
|
||||
5. **Monitorizează primele 3 zile** după activare
|
||||
6. **Schedule primul test restore** (luna viitoare)
|
||||
|
||||
**IMPORTANT:** NU uita să faci **test restore lunar** pe DR! Este SINGURA modalitate de a fi sigur că backup-urile funcționează când ai nevoie de ele!
|
||||
|
||||
---
|
||||
|
||||
**Document pregătit de:** Claude Code
|
||||
**Review status:** Ready for Production
|
||||
**Ultima actualizare:** 2025-10-07
|
||||
Reference in New Issue
Block a user