ARCHIVELOG mode

Archivelog = Archived Redo log

Ogni volta che un redolog file è pieno il processo ARCn - Archiver  process - lo copia in una altra location come un archivio di quel file che può essere mantenuto per un tempo definito dal periodo di retention.
I redolog file sono scritti in maniera circolare e quindi per evitare che si sovrascrivi una transazione non ancora scritta da DBW sui datafile, si abilita la modalità ARCHIVELOG che assicura la sovrascrittura dei redolog solo dopo che sono stati archiviati.

Verifica se è abilitata la modalità Archivelog 

# sqlplus /nolog
SQL> conn sys/<pwd> as sysdba
SQL> select log_mode from SYS.V$DATABASE;
oppure
SQL> archive log list;
Database log mode                        Archive Mode
Automatic archival                        Enabled
Archive destination                        /u01/app/oracle/archive/S11TEST1/
Oldest online log sequence            77
Next log sequence to archive         79
Current log sequence                      79

Directory contente gli archive log
La directory di destinazione degli archive di default è la flash recovery area che si individua con il comando

SQL> show parameter db_reco
NAME TYPE VALUE
---------------------------------------------------
db_recovery_file_dest string .../flash_recovery_area
db_recovery_file_dest_size big integer    2G

Oppure usare la query seguente.

select name, value 
from v$parameter 
where name like 'db_recovery_file_dest%';

>>>>>>>>>>> IMPORTANTE <<<<<<<<<<<<<<<<<<<<<<<<<
Nell'esempio 2G è il limite di occupazione dell'area dopodiché il sistema si ferma, pertanto non conviene usare la FRA ma piuttosto impostarla altrove usando questo parametro log_archive_dest_1
In questo modo non siamo più legati alla size della FRA ma alla size del file system.

1) Creare la directory
mkdir /u01/app/oracle/archive/<SID>

2) Inserirlo nel parameter file.
SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archive/<SID>' scope=both;

3) Verificare che sia abilitata la nuova destinazione.
SQL> show parameter log_archive_dest_state_1

NAME                      TYPE        VALUE
--------------------------------------------
log_archive_dest_state_1  string      enable

Altrimenti abilitarla con l'istruzione
alter system set log_archive_dest_state_1 = enable;

4) Verificare che gli archivelog vengono scritti nella suddetta direcorty
alter system switch logfile;


Se si vuole salvare i file su un altro database remoto STB2 impostare il parametro seguente:
alter system set log_archive_dest_2='SERVICE=STB2';


Come attivitare la modalità Archivelog

Per oracle 10g e 11g
SQL> shutdown immediate; (parte il checkpoint globale)
SQL> startup nomount;
SQL> alter database mount;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> alter database open;



Per Oracle 9i 
SQL> ALTER SYSTEM SET log_archive_start=true SCOPE=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> archive log start;
SQL> alter database archivelog;
SQL> alter database open;

Il parametro log_archive_start è stato deprecato dalla versione 10g, infatti la seguente query restituisce i valori "false" e "true" rispettivamente.

SQL> select value ,isdeprecated 
 from v$system_parameter where name = 'log_archive_start'

VALUE              ISDEP                                                      
----------------------------------
FALSE              TRUE 



Nome e directory dei file Archivelog 

SQL> show parameter format;

NAME                               TYPE            VALUE
------------------- ----------- --------------- --------------------------------------
log_archive_format              string            ARC%S_%R.%T
log_archive_dest_1                  LOCATION=/u01/app/oracle/flash_recovery_area/SID1F/archivelog


E S E M P I O
Popoliamo i file archivelog eseguendo lo switch dei Redolog file.

SQL> select group#, status, sequence# from v$log;
GROUP# STATUS SEQUENCE#
---------- ---------------- ----------
1 CURRENT 346
2 INACTIVE 344
3 INACTIVE 345

Passiamo dal redolog1 a 2.

SQL> ALTER SYSTEM SWITCH LOGFILE;

SQL> select group#, status, sequence# from v$log;

GROUP# STATUS SEQUENCE#
---------- ---------------- ----------
1 ACTIVE      346
2 CURRENT  347
3 INACTIVE  345

Il redolog 1 ha ancora modifiche di dati nel Database Buffer Cache e che non sono stati scritti nei Datafiles.
Il redolog 2 è il file in cui stiamo scrivendo.
Il redolog 3 contiene modifiche dei blocchi Database Buffer Cache già scritte nei Datafiles.

In modalità ARCHIVELOG , ogni volta che si verifica un log switch, si avvia il processo ARCn che effettua una copia dei file redolog inattivi perchè devono essere archiviati prima di essere sovrascritti.

In modalità NOARCHIVELOG il recovery è possibile fino all'ultimo backup. 
Tutte le successive transizioni sono perse.
Invece con la modalità ARCHIVELOG il recovery è possibile fino all'ultimo commit e quindi permette il point-in-time Recovery.


USE_DB_RECOVERY_FILE_DEST è una variabile che indica al db di usare come path per gli archivelog il parametro DB_RECOVERY_FILE_DEST
Oracle in automatico svuota i file obsoleti dalla FRA quando non c'è più spazio. Se si usa invece il parametro USE_DB_RECOVERY_FILE_DEST i file di archivelog non vengono cancellati anche se non c'è spazio sufficiente nella FRA e il sistema si blocca.

SQL> archive log list;

Database log mode                      Archive Mode
Automatic archival                      Enabled
Archive destination                      USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence          6954
Next log sequence to archive       6956
Current log sequence                   6956


SQL> show parameter log_archive_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string LOCATION=USE_DB_RECOVERY_FILE_DEST


Il parametro di prima è visibile dal comando seguente:

SQL> show parameter db_reco;
NAME TYPE VALUE
------------------------------------ ----------- ----------------------------------
db_recovery_file_dest string /home/oracle/rm_flashrecoveryarea


Come si imposta la variabile?
SQL> alter system set log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST';

Per cancellare la variabile
SQL> alter system set DB_RECOVERY_FILE_DEST='' ;


Per disabilitare la modalità Archivelog

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;


Per Oracle 9i 
SQL> ALTER SYSTEM SET log_archive_start=false SCOPE=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;

Verifica:
SQL> archive log list

Database log mode                  No Archive Mode
Automatic archival                  Disabled
Archive destination                 /u01/app/oracle/archive/CDB12S06/
Oldest online log sequence      87
Current log sequence               89


Calcolare la dimensione dei redolog
 
SQL >  select group#, sum(bytes)/1024/1024
       from v$log
       group by group#;

Esempio dimensione 100 MB.

Calcolare la dimensione degli archivelog

Quanti switch fa al giorno un redolog file (verificare anche su alert file)?

SQL > select count(*),to_char(FIRST_TIME,'DD-MM-YYYY'),thread#
      from v$log_history
      where FIRST_TIME > to_date('21-01-2021','DD-MM-YYYY')
      group by to_char(FIRST_TIME,'DD-MM-YYYY'),THREAD# 
      ORDER BY THREAD#,to_char(FIRST_TIME,'DD-MM-YYYY');

Esempio count(*) = 3 cioè tre switch in un giorno.
Quindi 3 x  100 (dimensione dei redolog file) = 300 MB 
300 sarebbe la dimensione massima al giorno di archive log.

Query per controallre la dimensione giornaliera degli Archive Log.
Attenzione che non tutti gli archive log sono presenti, alcuni potrebbero essere stati cancellati dalle politiche di backup.

SQL> select trunc(COMPLETION_TIME) TIME, 
     SUM(BLOCKS * BLOCK_SIZE)/1024/1024 SIZE_MB 
     from V$ARCHIVED_LOG 
     group by trunc (COMPLETION_TIME)
     order by 1;

Post popolari in questo blog

Scheduler

Proxy User

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione