Pri dlhých časoch medzi sa zas zvyšuje možnosť straty dát, hrozí dlhé recovery pri každom páde, resp reštarte DB.
Podľa viacerých zdrojov je ideálny čas prepínania redo zhruba 20-30min. Ako ich veľkosť doladiť u bežiacej databázy?
Skriptom vieme zistiť ako často sa redo prepína a upraviť tak jeho veľkosť. Môžeme použiť skript z minulého článku ukazujúci počet prepnutí za hodinu, alebo tento ukazujúci čas medzi prepnutiami:
-- AKO CASTO PREPINA (MINUTY), IDEALNE 20-30min
select b.recid, to_char(b.first_time, 'dd.mm.yyyy hh:mi:ss') start_time,
to_char(a.first_time, 'hh:mi:ss') end_time,
round(((a.first_time-b.first_time)*25)*60,2) minutes
from v$log_history a, v$log_history b
where a.recid = b.recid + 1
order by a.first_time desc;
--------------
48294 11.09.2018 06:20:06 06:20:16 0,17
48293 11.09.2018 06:16:45 06:20:06 3,49
48292 11.09.2018 06:14:30 06:16:45 2,34
48291 11.09.2018 06:11:27 06:14:30 3,18
48290 11.09.2018 06:10:00 06:11:27 1,51
Pozriem si pôvodnú veľkosť, počet skupín, súborov, ich umiestnenie na diskoch a ktorý z nich je aktuálne použitý:
select l.group#, lf.member, l.bytes/1024/1024 mb, l.status, l.archived
from v$logfile lf, v$log l
where l.group# = lf.group#
order by 1, 2;
-------
1 /r01/oracle/DB1/redo/redo_001.rlg 100 ACTIVE YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 CURRENT NO
3 /r01/oracle/DB1/redo/redo_003.rlg 100 INACTIVE YES
Tu vidím, že mám 3 skupiny po 100MB súboroch. V tomto prípade je potrebné držať skupinu 1 (active) a 2 (current) zapnutú. Active zlúčim do current príkazom "Alter system checkpoint;", uvoľním tak pre úpravy aj skupinu č.1.
V tomto prípade (po checkpoint) budem môcť zrušiť a prerobiť na cieľové veľkosti postupne skupinu 1 a 3 (oracle požaduje minimálne dve skupiny funkčné). Následne môžem prepnúť redo zo skupiny 2 na 3 a prerobiť aj pôvodnú 2. Ak mám záujem, môžem okrem zmeny veľkosti meniť aj meno a cestu k súborom (sťahovanie).
-- PREPNEM ACTIVE DO CURRENT, UVOLNIM AJ GRUPU 1
alter system checkpoint;
-- ZRUSIM A VYTVORIM GRUPU 1 S VELKOSTOU 1GB
alter database drop logfile group 1;
alter database add logfile group 1 '/r01/oracle/DB1/redo/redo_001.rlg'
size 1000M reuse;
-- TO ISTE S GRUPOU 3
alter database drop logfile group 3;
alter database add logfile group 3 '/r01/oracle/DB1/redo/redo_003.rlg'
size 1000M reuse;
-- PREPNEM CURRENT GRUPU Z 2 NA 3
alter system switch logfile;
1 /r01/oracle/DB1/redo/redo_001.rlg 1000 INACTIVE YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 ACTIVE YES
3 /r01/oracle/DB1/redo/redo_003.rlg 1000 CURRENT NO
-- ODZALOHUJE A PRESKOCI NA DRUHY
alter system checkpoint;
1 /r01/oracle/DB1/redo/redo_001.rlg 1000 INACTIVE YES
2 /r01/oracle/DB1/redo/redo_002.rlg 100 INACTIVE YES
3 /r01/oracle/DB1/redo/redo_003.rlg 1000 CURRENT NO
-- ZVACSIM POSLEDNY V GRUPE 2
alter database drop logfile group 2;
alter database add logfile group 2 '/r01/oracle/DB1/redo/redo_002.rlg'
size 1000M reuse;
Týmto postupom som prerobil bez odstávky logy na potrebnú veľkosť a neskôr môžem skontrolovať, ako sa upravili počty prepnutí redo.
V prípade ak sú počty presne napr. 1 za hodinu, je možné že tieto logy prepína iba RMAN backup archlogov z cronu. V takom prípade (aj keby to nebolo iba zálohami) je samozrejme naopak vhodné redo zmenšiť (z 500MB na 100MB), ale iba po rozumnú hranicu.
Žiadne komentáre:
Zverejnenie komentára