UNDO tabele se generišu uvek kada u PANTHEON™-u pratimo istoriju promena (Pogledaj Administratorska konzola | Postavljanje loga promena). U te UNDO tabele se za svaku promenu u zapisu baze podataka kreira novi zapis, u kojem se pored prethodnih podataka nalaze i podaci o tome, koji korisnik i kada je promenio podatak.
 |
Ako Vam se drastično poveća veličina baze podataka ili ako želite smanjiti veličinu sigurnosnih kopija (backupa), odnosno ubrzati rad baze podataka, onda migrirajte stare podatke! |
UNDO tabele se brzo pune i zauzimaju dosta prostora u glavnoj bazi podataka. Zbog toga se drastično poveća količina podataka, koje SQL server mora držati u memoriji i snimati kod kreiranja sigurnosne kopije.
Migracija UNDO tabela na pomoćni SQL server
Najefikasniji način smanjenja UNDO tabela, koje još uvek sadrže podatke je migracija UNDO tabela na pomoćni SQL server. Pogledajmo šemu preporučene postavke:
 |
Iz primarnog SQL servera prenosimo unose UNDO tabela, starije od određenog datuma na sekundarni SQL server.
Podaci, inače više nisu on-line dostupni, a postoje kao arhiv i možemo ih po potrebi upotrebiti (sa SQL alatima prenesemo nazad u primarnu bazu).
|
Na sekundarnom SQL serveru kreiramo bazu podataka.
 |
U donjim slučajevima je transakcijska baza na primarnom serveru označena kao PRI_SERVER.PANTHEON, a arhivska baza kao SEC_SERVER.ARHIV_UNDO. Primarni i sekundarni server su međusobno povezani (linked servers). |
Na primarnom SQL serveru napravimo SQL Server Agent Job, koji dnevno prenosi unose, starije od određenog datuma (u donjem primeru, starije od 3 meseca) na sekundarni server. Job će biti sastavljen iz dva koraka:
Popravi strukture
Strukture transakcijske baze nam se menjaju sa nadogradnjama. Zbog toga moramo pre upisa podataka baze popraviti (sinhronizovati strukturu podataka arhivskih tabela sa strukturom tabela u transakcijskoj bazi).
Prenesi podatke
U ovom koraku prenesemo podatke iz primarnog na sekundardni server. U ovom primeru prenosimo najčešće tabele. Ako vaša instalacija popunjava sa velikom količinom podataka i druge tabele, dodajte ih!
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())
Migracija UNDO tabela na isti SQL server
Migracijom UNDO tabela na isti SQL server samo delimično postižemo željene rezultate. Transakcijska baza nam se smanji (manji backupovi), ali SQL server još uvek rezerviše određeni deo resursa (cache tabela, memorija) bazi, koja drži stare UNDO unose.