Ostatnie wpisy

CRS, AIX i problem z VLAN-em

Jeśli instalujecie CRS na AIX-a 5.3 i występuje problem ze startem VIP z podobnego powodu:

> IsIfAlive: /usr/bin/entstat -d en7 failed. Return = 1 (host=rs04a13)
> checkIf: end for if=en7
> Invalid parameters, or  failed to bring up VIP (host=rs04a13)

oznacza to iż prawdopodobnie korzystacie z VLAN-u, z którym skrypt racgvip nie może sobie poradzić.

Rozwiązaniem jest podmiana jednej linijki w $CRS_HOME/bin/racgvip:

z:

$ENTSTAT -d $_IF | $GREP -iEq  '.*lan.*state.*:.*operational.*|
.*link.*status.*:.*up.*|.*port.*operational.*state.*:.*up.*'
na
$ENTSTAT  -d $_IF | $GREP -iEq  '.*lan.*state.*:.*operational.*|
.*link.*status.*:.*up.*|.*port.*operational.*state.*:.*up.*|Driver Flags: Up'

Należy pamiętać by wprowadzać tą zmianę po każdym patchowaniu CRS-a gdyż plik racgvip jest wówczas nadpisywany.

Ukryte parametry ( _* )

Czasem przy tuningu lub troubleshooting-u trzeba zainteresować się wartościami ukrytych parametrów. Niestety Oracle (celowo) nam tego nie ułatwia. Poprzez “show parameter X” znajdziemy jedynie te, których wartość ustawiliśmy na inną niż domyślna (więc w większości przypadków i tak znamy ich ustawienia). Poniższy skrypt może okazać się pomocny w poszukiwaniu tych “zaginionych”. Linię z “like” można dostosować pod kątem poszukiwań określonych parametrów.

col parameter for a48
col value_session for a24
col value_instance for a24
select a.ksppinm parameter, b.ksppstvl value_session,
       c.ksppstvl value_instance
  from x$ksppi a, x$ksppcv b, x$ksppsv c
 where a.indx = b.indx and a.indx = c.indx
   and substr(ksppinm,1,1)='_'
   and ksppinm like '%%'
order by a.ksppinm;

Liczba przełączeń redo w przedziale godzin i dni

Skrypt do przedstawienia historii przełączeń redologów w kolejnych godzinach i dniach. Przydatna rzecz choćby do planowania strategii backupów lub jako przegląd aktywności bazy.

set cmds on
col date for a15; col total for 99999; col h00 for 999; col h01 for 999
col h02 for 999; col h03 for 999; col h04 for 999; col h05 for 999
col h06 for 999; col h07 for 999; col h08 for 999; col h09 for 999
col h10 for 999; col h11 for 999; col h12 for 999; col h13 for 999
col h14 for 999; col h15 for 999; col h16 for 999; col h17 for 999
col h18 for 999; col h19 for 999; col h20 for 999; col h21 for 999
col h22 for 999; col h23 for 999; col h24 for 999; col mb for 999,999

select  to_char(first_time, 'yyyy-mm-dd Dy') "date",
        sum(blocks*block_size)/1024/1024 "MB",
        count(1) "total",
        sum(decode(to_char(first_time, 'hh24'),'00',1,0)) "h00",
        sum(decode(to_char(first_time, 'hh24'),'01',1,0)) "h01",
        sum(decode(to_char(first_time, 'hh24'),'02',1,0)) "h02",
        sum(decode(to_char(first_time, 'hh24'),'03',1,0)) "h03",
        sum(decode(to_char(first_time, 'hh24'),'04',1,0)) "h04",
        sum(decode(to_char(first_time, 'hh24'),'05',1,0)) "h05",
        sum(decode(to_char(first_time, 'hh24'),'06',1,0)) "h06",
        sum(decode(to_char(first_time, 'hh24'),'07',1,0)) "h07",
        sum(decode(to_char(first_time, 'hh24'),'08',1,0)) "h08",
        sum(decode(to_char(first_time, 'hh24'),'09',1,0)) "h09",
        sum(decode(to_char(first_time, 'hh24'),'10',1,0)) "h10",
        sum(decode(to_char(first_time, 'hh24'),'11',1,0)) "h11",
        sum(decode(to_char(first_time, 'hh24'),'12',1,0)) "h12",
        sum(decode(to_char(first_time, 'hh24'),'13',1,0)) "h13",
        sum(decode(to_char(first_time, 'hh24'),'14',1,0)) "h14",
        sum(decode(to_char(first_time, 'hh24'),'15',1,0)) "h15",
        sum(decode(to_char(first_time, 'hh24'),'16',1,0)) "h16",
        sum(decode(to_char(first_time, 'hh24'),'17',1,0)) "h17",
        sum(decode(to_char(first_time, 'hh24'),'18',1,0)) "h18",
        sum(decode(to_char(first_time, 'hh24'),'19',1,0)) "h19",
        sum(decode(to_char(first_time, 'hh24'),'20',1,0)) "h20",
        sum(decode(to_char(first_time, 'hh24'),'21',1,0)) "h21",
        sum(decode(to_char(first_time, 'hh24'),'22',1,0)) "h22",
        sum(decode(to_char(first_time, 'hh24'),'23',1,0)) "h23"
from    v$archived_log
group by to_char(first_time, 'yyyy-mm-dd Dy')
order by 1;

Migracja bazy do ASM

1. Przeniesienie control file do ASM. W tym celu zmieniamy parametr w init.ora tak, by wskazywał na nową lokalizację w ASM:

control_files='+DG_DATA/control01.ctl'

…gdzie DG_DATA jest nazwą diskgroup-y

2. Uruchomienie instancji w trybie nomount:

SQL> startup nomount

3. Następnie z konsoli RMAN-a należy skopiować control file ze starej lokalizacji do ASM:

RMAN> connect target
RMAN> restore controlfile from  '/ora_u10/oradata/ctl/control01.ctl';

…gdzie “/ora_u10…” jest poprzednią lokalizacją cf.

4. Zamontowanie bazy

RMAN> alter database mount;

5. Teraz można skopiować pliki danych a następnie przełączyć bazę na kopie:

RMAN> backup as copy database format '+DG_DATA';
RMAN> switch database to copy;

6. Przeniesienie tempfile-a:

RMAN> run {
set newname for tempfile 1 to '+DG_DATA';
switch tempfile all;
}

7. Otwarcie bazy danych

RMAN> alter database open

8. Ostatnim krokiem jest utworzenie nowych redologów w ASM

SQL> alter database add logfile member '+DG_DATA' to group 1;
SQL> alter database add logfile member '+DG_DATA' to group 2;
SQL> alter database add logfile member '+DG_DATA' to group 3;

Należy zdropować “stare” redologi (przy którymś logu konieczne będzie przełączenie, gdyż dropowane logi muszą mieć stan <> “CURRENT”:

SQL> alter database drop logfile member '/ora_u10/oradata/redo_12.dbf';
SQL> alter system switch logfile;
SQL> alter database drop logfile member '/ora_u10/oradata/redo_22.dbf';
SQL> alter system switch logfile;

.