# 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 |