This commit is contained in:
2026-05-16 07:58:18 +02:00
parent a18ad914c3
commit 92e2585433
2 changed files with 309 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
# DBrestore Medicus DB restore na Reporteru
## Co skript dělá
`restore.py` automaticky obnovuje Firebird databázi Medicus na počítači REPORTER ze zálohy uložené na NAS.
### Postup krok za krokem
1. **Kontrola hostitele** skript lze spustit pouze na počítači REPORTER
2. **Najde nejnovější ZIP** v `\\tower\ordinacesynology\MedicusBackup\` (vzor: `MEDICUS_YYMMDD_HHMM.zip`)
3. **Kontrola duplicity** porovná název ZIPu s `last_restored.txt`; pokud už byl obnoven, skončí bez akce
4. **Kontrola přenosu (rsync)** změří velikost ZIPu, počká 60 sekund, změří znovu; pokud se liší, přenos ještě běží → skončí bez akce
5. **Rozbalí ZIP** → extrahuje `.fbk` do `C:\Medicus\restore\`
6. **Odpojí aktivní klienty** z Firebird DB (přes `MON$ATTACHMENTS`)
7. **Smaže starou DB** `C:\Medicus\medicus.fdb` a spustí `gbak` restore s live výpisem
8. **Po úspěšném restore:**
- uloží název ZIPu do `last_restored.txt`
- smaže ZIP ze záložního adresáře
- smaže rozbalený `.fbk`
- otestuje DB (počet registrovaných pacientů)
9. **Odešle email** na `vladimir.buzalka@buzalka.cz` s výsledkem a logem jako přílohou
10. **Smaže log**
## Konfigurace
| Proměnná | Hodnota |
|---|---|
| `BACKUP_DIR` | `\\tower\ordinacesynology\MedicusBackup` |
| `EXTRACT_DIR` | `C:\Medicus\restore` |
| `TARGET_DB` | `C:\Medicus\medicus.fdb` |
| `GBAK` | `C:\Program Files\Firebird\Firebird_2_5_CGM\bin\gbak.exe` |
| `LOG_FILE` | `C:\Medicus\restore\restore.log` |
| `LAST_RESTORED` | `C:\Medicus\restore\last_restored.txt` |
| `EMAIL_TO` | `vladimir.buzalka@buzalka.cz` |
## Firebird připojení
```python
import fdb
conn = fdb.connect(
dsn=r'localhost:c:\medicus\medicus.fdb', # lokálně na REPORTERu
user='SYSDBA', password='masterkey', charset='win1250'
)
# Z jiných počítačů v síti:
conn = fdb.connect(
dsn=r'reporter:c:\medicus\medicus.fdb',
user='SYSDBA', password='masterkey', charset='win1250'
)
```
## Scheduled Task
- **Spouštěcí program:** `C:\Reporting\Python\python.exe`
- **Argumenty:** `C:\Reporting\RestoreNaReporter\restore.py`
- **Interval:** každou hodinu
- **Uživatel:** vlado (s nejvyššími právy)
- **DŮLEŽITÉ:** musí být `python.exe`, ne `pythonw.exe` (jinak stdout/stderr nejdou zachytit)
## Závislosti
- `fdb` Firebird Python driver
- `msal`, `requests` pro odesílání emailu přes Microsoft Graph
- `EmailMessagingGraph.py` knihovna v `C:\Reporting\knihovny\`
Všechny závislosti jsou v `C:\Reporting\Python\`.
## Produkční umístění
| Soubor | Cesta |
|---|---|
| Skript | `C:\Reporting\RestoreNaReporter\restore.py` |
| Python | `C:\Reporting\Python\python.exe` |
| Email knihovna | `C:\Reporting\knihovny\EmailMessagingGraph.py` |
## Firewall
Port **3050 TCP** otevřen pro příchozí spojení (Firebird) pravidlo "Firebird 3050".
## Časová osa nočního procesu
| Čas | Co se děje |
|---|---|
| 02:00 | Zálohovací skript v ordinaci vytvoří `.zip` |
| ~02:30 | Záloha dokončena, rsync začne přenos na NAS |
| ~03:xx | rsync dokončen |
| každou hodinu | Scheduled task zkontroluje nový ZIP + velikost |
| po stabilizaci | Spustí restore (~10 min), odešle email |