ALTER SYSTEM ARCHIVE LOG CURRENT vs ALTER SYSTEM SWITCH LOGFILE

Ambos comandos forzan el Switch de los grupos de Redo Log Online, pero
ALTER SYSTEM SWITCH LOGFILE: Es asíncrono, no espera la confirmación que los archivos de redolog online se hayan sido archivados, mientras que
ALTER SYSTEM ARCHIVE LOG CURRENT: Es síncrono y espera la confirmación que los Redo Log Online fueron archivados por el ARCHIVER.

00.- Nuestro ambiente: Un RAC de 2 nodos con 3 grupos de Redo Log Online en cada Instancia de Base de Datos.

SQL> select inst_id, instance_name from gv$instance;
   INST_ID INSTANCE_NAME
---------- ----------------
         1 CURSO1
         2 CURSO2

select thread#, group#, status,bytes/1024/1024 size_mb from v$log order by  thread#, group#;
   THREAD#     GROUP# STATUS          
---------- ---------- ----------------
         1          1 INACTIVE        
         1          2 INACTIVE        
         1          3 CURRENT     <---Grupo que esta siendo escrito por el Log Writter.
         2          4 INACTIVE        
         2          5 INACTIVE        
         2          6 CURRENT 
01.- ALTER SYSTEM SWITCH LOGFILE: Solo forza el switch de grupo de Redolog en la instancia donde se ejecuta el comando. Aquí vemos como el CURRENT cambio del GROUP# 3 al GROUP# 1 en el THREAD# 1 (Nodo 1)
SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.
Elapsed: 00:00:00.05

SQL>  select thread#, group#, status,bytes/1024/1024 size_mb from v$log order by  thread#, group#;

   THREAD#     GROUP#  STATUS          
---------- ----------  ----------------
         1          1  CURRENT             
         1          2  INACTIVE        
         1          3  INACTIVE        
         2          4  INACTIVE        
         2          5  INACTIVE        
         2          6  CURRENT     <--- En el THREAD# 2 no hubo cambio del grupo que estaba CURRENT
02.- ALTER SYSTEM SWITCH ALL LOGFILE: Con la opción no documentada de ALL hace que cambien todos los grupos de Redolog en todas las instancias. El grupo de redolog en estado CURRENT cambio del GROUP# 1 al GROUP# 2 en el THREAD# 1 (Nodo 1); En el THREAD# 2 (Nodo 2), el CURRENT cambio del GROUP# 6 al GROUP# 4. Es importante observar que debido a que este comando es asíncrono y no espera la confirmación del ARCHIVER se ejecuta sumamente rápido, solo tardó 0.05 Segundos.
SQL>  ALTER SYSTEM SWITCH ALL LOGFILE;

System altered.
Elapsed: 00:00:00.05

SQL>  select thread#, group#, status from v$log order by  thread#, group#;

   THREAD#     GROUP# STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         1          2 CURRENT
         1          3 INACTIVE
         2          4 CURRENT
         2          5 INACTIVE
         2          6 INACTIVE
03.- Vemos que este comando es similar al anterior, forza el switch de Redo log en todas las instancias, sin embargo tardo 03,69 segundos, porque debió esperar la confirmación del ARCHIVER y que todos los redolog fueron archivados correctamente.
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.
Elapsed: 00:00:03.69

SQL> select thread#, group#, status from v$log order by  thread#, group#;
   THREAD#     GROUP# STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         1          2 INACTIVE
         1          3 CURRENT
         2          4 INACTIVE
         2          5 CURRENT
         2          6 INACTIVE
NOTA: Si la base de datos no esta en modo ARCHIVE el comando ALTER SYSTEM ARCHIVE LOG CURRENT o ALTER SYSTEM SWITCH ALL LOGFILE van a fallar con un error: "ORA-00258: manual archiving in NOARCHIVELOG mode must identify log."
SQL> ARCHIVE LOG LIST
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/12.1.0/db_home1/dbs/arch
Oldest online log sequence     3109
Current log sequence           3111


SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM ARCHIVE LOG CURRENT
*
ERROR at line 1:
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log

Comments