UNDO-Tabellen halten eine Historie von Änderungen (wenn die
Änderungsprotokoll Funktion aktiviert ist).
Für jede Änderung, die an der Datenbank von PANTHEON vorgenommen wird, wird ein
Eintrag in die UNDO-Tabellen gesetzt, zusammen mit dem Namen desjenigen, der die
Änderung vorgenommen hat, und wann.
UNDO-Tabellen wachsen sehr schnell und nehmen daher viel Platz ein,
was die Leistung des Datenbankservers verringern und die
Größe der Sicherung erhöhen kann.
Das Verschieben von UNDO-Tabellen an einen anderen Ort kann:
- die Leistung verbessern,
- die Serverlast verringern,
- die Größe der Sicherungsdatei verringern.
Verschieben von UNDO-Tabellen zu einem sekundären Server
Das Verschieben von UNDO-Tabellen zu einem sekundären Server verringert die
Belastung Ihres primären Servers und hält die Daten aus den UNDO-Tabellen archiviert.
Eine empfohlene Konfiguration ist wie folgt:
 |
Alle UNDO-Einträge über ein bestimmtes Alter werden vom
primären auf den sekundären Server verschoben.
Die verschobenen Daten sind online nicht verfügbar, können jedoch
bei Bedarf wiederhergestellt werden.
|
Erstellen Sie zunächst eine Datenbank auf dem sekundären Server.
 |
Im folgenden Beispiel heißt die Live-Datenbank auf dem
primären Server PRI_SERVER.PANTHEON und das Archiv auf dem
sekundären Server SEC_SERVER.ARHIV_UNDO.
Der primäre und der sekundäre Server sind verbundene Server. |
Erstellen Sie auf dem primären Server einen SQL Server-Job, der alte
Einträge (älter als 3 Monate im Beispiel) auf den sekundären Server verschiebt.
Der Job hat zwei Schritte:
Struktur aktualisieren
Die Struktur der PANTHEON-Datenbank wird häufig aktualisiert, weshalb die
Struktur der Archivdatenbank mit der Live-Datenbank synchronisiert werden muss,
bevor Daten verschoben werden.
Daten verschieben
Das folgende Skript verschiebt Einträge von den am häufigsten verwendeten
Tabellen in die Archivdatenbank. Sie können Tabellen nach Bedarf hinzufügen oder
entfernen.
insert into SEC_SERVER.ARHIV_UNDO.dbo.BUDGET_UNDO
select * from PRI_SERVER.PANTHEON.dbo.BUDGET_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.BUDGET_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.BUDGETPOZ_UNDO
select * from PRI_SERVER.PANTHEON.dbo.BUDGETPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.BUDGETPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.CHSTATPROM_UNDO
select * from PRI_SERVER.PANTHEON.dbo.CHSTATPROM_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.CHSTATPROM_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.CONTACTS_UNDO
select * from PRI_SERVER.PANTHEON.dbo.CONTACTS_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.CONTACTS_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.CONTADDRESS_UNDO
select * from PRI_SERVER.PANTHEON.dbo.CONTADDRESS_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.CONTADDRESS_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.PROMET_UNDO
select * from PRI_SERVER.PANTHEON.dbo.PROMET_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.PROMET_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.PROMETPOZ_UNDO
select * from PRI_SERVER.PANTHEON.dbo.PROMETPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.PROMETPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.SERIALNOP_UNDO
select * from PRI_SERVER.PANTHEON.dbo.SERIALNOP_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.SERIALNOP_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.SUBJEKT_UNDO
select * from PRI_SERVER.PANTHEON.dbo.SUBJEKT_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.SUBJEKT_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.TEME_UNDO
select * from PRI_SERVER.PANTHEON.dbo.TEME_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.TEME_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
insert into SEC_SERVER.ARHIV_UNDO.dbo.TEMEPOZ_UNDO
select * from PRI_SERVER.PANTHEON.dbo.TEMEPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
delete from PRI_SERVER.PANTHEON.dbo.TEMEPOZ_UNDO
where _dl_LastCh < DateAdd(mm,-3,GetDate())
Verschieben von UNDO-Tabellen innerhalb desselben Servers
Das Verschieben von UNDO-Tabellen von einer Datenbank zu einer anderen auf demselben Server
löst das Problem nur teilweise. Die Größe der Live-Datenbank wird verringert,
aber die Serverlast wird nicht signifikant reduziert, da weiterhin
einige Ressourcen (Cache, Speicher) für die Archivdatenbank verwendet werden.