-- Sicherungsart je Auftrag. -- -- Bisher entschied der Executor allein: Liegt ein Elternbackup vor, wird -- inkrementell gesichert. Das ist der richtige Standard — der Gewinn ist -- Lesezeit, und die ist nach dem ersten Lauf der begrenzende Faktor. -- -- Es gibt aber zwei Gruende, davon abzuweichen, und beide sind betrieblich: -- -- 1. **Immer voll.** Wer sein Backup ausser Haus gibt oder auf einen -- Datentraeger schreibt, der einzeln weggetragen wird, will nicht, dass -- ein Wiederherstellungspunkt an einem frueheren haengt. -- 2. **Wöchentlich voll.** Der uebliche Kompromiss: unter der Woche schnell, -- am Wochenende einmal vollstaendig. -- -- Hinweis zur Einordnung: Syncova-Manifeste sind **vollstaendig** (Phase 6). -- Eine Zusatzsicherung traegt die Blockverweise des Elternbackups mit, ein -- Restore liest genau ein Manifest, und das Loeschen eines alten Backups kann -- ein neueres nicht beschaedigen. Der Unterschied liegt also in der Laufzeit, -- nicht in der Wiederherstellbarkeit. ALTER TABLE backup_jobs -- 'incremental' = nach dem ersten Lauf inkrementell (Standard, bisheriges -- Verhalten). 'always_full' = jeder Lauf liest die Quelle vollstaendig. ADD COLUMN backup_mode TEXT NOT NULL DEFAULT 'incremental', -- Wochentag, an dem zusaetzlich eine Vollsicherung erzwungen wird. -- 0 = Sonntag … 6 = Samstag, NULL = keiner. Gerechnet in der Zeitzone des -- Zeitplans; ohne Angabe in UTC — sonst liefe derselbe Auftrag auf zwei -- Servern an verschiedenen Tagen voll. ADD COLUMN full_backup_weekday SMALLINT; ALTER TABLE backup_jobs ADD CONSTRAINT backup_jobs_backup_mode_valid CHECK (backup_mode IN ('incremental', 'always_full')), ADD CONSTRAINT backup_jobs_full_backup_weekday_valid CHECK (full_backup_weekday IS NULL OR full_backup_weekday BETWEEN 0 AND 6), -- Ein Wochentag bei 'always_full' ist widersprüchlich: Dann ist ohnehin -- jeder Lauf voll. Die Regel steht in der Datenbank, weil im Code jede -- Stelle sie einhalten muesste — und eine vergisst es. ADD CONSTRAINT backup_jobs_full_weekday_only_incremental CHECK (backup_mode = 'incremental' OR full_backup_weekday IS NULL); COMMENT ON COLUMN backup_jobs.backup_mode IS 'incremental = nach dem ersten Lauf inkrementell; always_full = jeder Lauf vollstaendig'; COMMENT ON COLUMN backup_jobs.full_backup_weekday IS 'Wochentag einer erzwungenen Vollsicherung (0=Sonntag), NULL = keiner';