Non toccate SGA_TARGET!

martedì 2 ottobre 2007 alle 02:33 | Pubblicato su Diario, Installation and Configuration | 5 commenti

Ebbene, oggi mi è successa una cosa incresciosa.

Da alcuni giorni il backup di un database 10.2.0.2 Standard Edition su Windows2003 R2 Standard Edition SP1 si arrestava bruscamente con il seguente errore:

 "istruzione sql: alter system archive log current
 canale rilasciato: d1
 RMAN-00571: ===========================================================
 RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
 RMAN-00571: ===========================================================
 RMAN-03009: errore del comando sql sul canale default in 10/02/2007 01:22:13
 RMAN-11003: errore durante l'analisi/esecuzione dell'istruzione SQL: alter system archive log current
 ORA-16038: impossibile archiviare il log 3, n. sequenza 5100
 ORA-04030: memoria di processo esaurita nel tentativo di allocare  byte (,)
 ORA-00312: log in linea 3 thread 1: 'D:\ORACLE\ORADATA\MyDB\REDO03.LOG'

Contemporaneamente sull’alert.log compare:

ORA-04030: memoria di processo esaurita nel tentativo di allocare 1049100 byte (KSFQ heap,KSFQ Buffers)
Mon Oct 01 01:21:08 2007
ARCH: All Archive destinations made inactive due to error 4030
ARCH: Failed to archive thread 1 sequence 5093 (4030)
Mon Oct 01 01:21:08 2007
Errors in file c:\oracle\product\10.2.0\admin\MyDB\udump\MyDB_ora_102832.trc:
ORA-16038: impossibile archiviare il log 2, n. sequenza 5093
ORA-04030: memoria di processo esaurita nel tentativo di allocare byte (,)
ORA-00312: log in linea 2 thread 1: ‘D:\ORACLE\ORADATA\MyDB\REDO02.LOG’

Mon Oct 01 01:21:23 2007
ARC0: Archiving not possible: No primary destinations
ARC0: Failed to archive thread 1 sequence 5093 (4)
ARCH: Archival stopped, error occurred. Will continue retrying
Mon Oct 01 01:21:23 2007
Errors in file c:\oracle\product\10.2.0\admin\MyDB\bdump\MyDB_arc0_3744.trc:
ORA-16014: il log 2, n. sequenza 5093 non è stato archiviato; non vi sono destinazioni disponibili
ORA-00312: log in linea 2 thread 1: ‘D:\ORACLE\ORADATA\MyDB\REDO02.LOG’

Mon Oct 01 01:22:08 2007
ARC1: Archiving not possible: No primary destinations
ARC1: Failed to archive thread 1 sequence 5093 (4)
Mon Oct 01 01:22:23 2007
ARC1: Archiving not possible: No primary destinations
ARC1: Failed to archive thread 1 sequence 5093 (4)
Mon Oct 01 01:23:23 2007
ARC0: Archiving not possible: No primary destinations
ARC0: Failed to archive thread 1 sequence 5093 (4)
Mon Oct 01 01:24:23 2007
ARC1: Archiving not possible: No primary destinations
ARC1: Failed to archive thread 1 sequence 5093 (4)
Mon Oct 01 01:25:23 2007
ARC0: Archiving not possible: No primary destinations
ARC0: Failed to archive thread 1 sequence 5093 (4)
Mon Oct 01 01:26:23 2007
Archiver process freed from errors. No longer stopped
Mon Oct 01 12:53:19 2007


Riporto anche il contenuto del trace visto che è relativamente breve:

Dump file c:\oracle\product\10.2.0\admin\MyDB\udump\MyDB_ora_102832.trc
Mon Oct 01 01:21:08 2007
ORACLE V10.2.0.2.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Release 10.2.0.2.0 - Production
Windows NT Version V5.2 Service Pack 1
CPU                 : 4 - type 586, 2 Physical Cores
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:1346M/3583M, Ph+PgF:3320M/5475M, VA:25M/2047M
Instance name: MyDB

Redo thread mounted by this instance: 1

Oracle process number: 21

Windows thread id: 102832, image: ORACLE.EXE (SHAD)

*** 2007-10-01 01:21:08.673
*** ACTION NAME:(0000003 FINISHED114) 2007-10-01 01:21:08.626
*** SERVICE NAME:(SYS$USERS) 2007-10-01 01:21:08.626
*** SESSION ID:(102.29484) 2007-10-01 01:21:08.626
ORA-04030: memoria di processo esaurita nel tentativo di allocare 1049100 byte (KSFQ heap,KSFQ Buffers)
*** 2007-10-01 01:21:08.673 60639 kcrr.c
ARCH: All Archive destinations made inactive due to error 4030
*** 2007-10-01 01:21:08.673 58901 kcrr.c
kcrrfail: dest:10 err:4030 force:0 blast:1
ORA-16038: impossibile archiviare il log 2, n. sequenza 5093
ORA-04030: memoria di processo esaurita nel tentativo di allocare  byte (,)
ORA-00312: log in linea 2 thread 1: 'D:\ORACLE\ORADATA\MyDB\REDO02.LOG'

Ora, problemi di memoria Oracle su Windoz sulle mie prime installazioni ne ho avute. Non provo neppure ad aprire una SR sul metalink perchè ho più speranza di ottenere informazioni utili pubblicando il problema qui. Inizialmente avevo settato la SGA_MAX_SIZE=1600M ben presto però hanno cominciato ad apparire errori simili a quelli sopra riportati. Ho a suo tempo anche aperto una SR con Oracle, ma l’unico suggerimento che ho ricevuto è stato quello si abbassare la memoria ORacle, ovvero settare un valore per SGA_MAX_SIZE più basso.

Alla fine mi sono arreso all’impotenza ed ho settato SGA_MAX_SIZE=1300M, analogamente SGA_TARGET=1300m;

Voglio precisare che la cosa che veramente nessuno mi ha spiegato è il perchè: da TASK MANAGER di Windoz risultava che il processo Oracle usasse 1500000 KB circa di memoria fisica e 1700000 KB di memoria virtuale, quindi ben al di sotto dei 2GB di limitazione imposti da Windoz 32 bit per ogni processo.

Oggi ho avuto l’insana idea di indagare e un po’ ingenuamente, senza pensarci troppo ho pensato di provare ad abbassare SGA_TARGET facendo:

SQL>alter system set SGA_TARGET=1250M;

ecco, non è il caso di farlo su un database in produzione.

Osservando il task manager ho visto che dopo un po’ la memoria occupata da oracle.exe ha cominciato a calare, troppo, il risultato è stato:

SQL> alter system set sga_target=1200M;
alter system set sga_target=1200M
*
ERRORE alla riga 1:
ORA-03113: end-of-file sul canale di comunicazione

Sull’alert.log ho trovato:

ORA-07445: trovata eccezione: dump della memoria [ACCESS_VIOLATION] [_kghlkaftf+135] [PC:0x603B1BA3] [ADDR:0x1C800010] [UNABLE_TO_READ] []

Inutile dire che l’istanza è andata giu. Per fortuna è bastato riavviarla.

Le mie ricerche sull’errore non mi hanno condotto a nulla, secondo me è un baco di cui Oracle probabilmente non si cura (come di altri documentati e non risolti).

Quindi il suggerimento del giorno che è anche un promemoria per me è:

NON CERCARE DI CAMBIARE IL PARAMETRO SGA_TARGET AL VOLO.

5 commenti »

RSS feed for comments on this post. TrackBack URI

  1. sembra molto simile al Bug 4438061 “A dump can occur in kghlkaftf when VLM is enabled
    (32bit Oracle releases).”, ed esiste anche una interim patch ma per la 10.2.0.1 di 27 Kb, sembrava fosse stato risolto proprio con la 10.2.0.2

    Alessandro

  2. pero è anche possibile che magari il bug sia stato risolto solo per la enterprise edition (Oracle la identifica come full release) con la 10.2.0.2

    Alessandro

  3. Francamente sono perplesso. Rigurado al bug 4438061 io accedo solo alla nota 4438061.8 e non alla descrizione completa. Inoltre fra le patch ho trovato solo quella per linux x86 e non per windows. In effetti secondo me si tratta di un’altra cosa, in quanto la descrizione parla di VLM attivato e nel mio caso ciò non è essendo su piattaforma Windoz.

  4. VLM è implementabile in windoz, sarebbe l’ AWE sostanzialmente

    sonoinvece propenso a considerare il fatto che il bug sia stato risolto, ma solo per la full release (la enterprise edition), andrebbe segnalato al supporto in maniera che si accorgano che esiste anche per altre piattaforme e versioni

    Alessandro

  5. […] di memoria da assegnare alla relativa componente. SGA_TARGET è un parametro dinamico, sebbene io non consiglierei la sua modifica al volo. Rimango dinamici anche i parametri relativi alle singole […]


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: