quinta-feira, 1 de maio de 2014

Adicionando e removendo redologs no banco de dados Standby


Adicionando "redo logs" no banco de dados Standby

Adicionar "redo logs" no banco de dados não afeta o banco de dados Standby. Porém durante transição alguns problemas de desempenho podem ocorrer. Logo,  sempre que um arquivo de "redo log" for adicionado ou removido do banco de dados primário, o mesmo deve ser executado manualmente no banco de dados Standby. Abaixo o procedimento.

1. Verificar os membros no banco de dados Standby.

SQL> select member from v$logfile;

MEMBER
------------------------------
+DATA/test/group/
group_3.264.3
+DATA/test/group/group_2.264.3
+DATA/test/group/group_1.264.3

2. Cancelar o processo de "recover" do banco de dados Standby.

SQL> alter database recover managed standby database cancel;

Database altered.

3. Verificar o parâmetro "standby_file_management" e configurá-lo para MANUAL.

SQL> show parameter standby_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string 
    
AUTO


SQL> alter system set standby_file_management=manual scope=both;

System altered.

SQL> show parameter standby_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string     
MANUAL


4. Uma vez alterado o parâmetro, pode-se adicionar os "redo logs" no banco de dados Standby.

SQL> alter database add logfile group 4 '+DATA' size 100M;

Database altered.

SQL> alter database add logfile group 5 '+DATA' size 100M;

Database altered.

SQL> alter database add logfile group 6 '+DATA' size 100M;

Database altered.

SQL> alter database add standby logfile group 7 '+DATA' size 100M;

Database altered.

SQL> alter database add standby logfile group 8 '+DATA' size 100M;

Database altered.

SQL> alter database add standby logfile group 9 '+DATA' size 100M;

Database altered.

SQL> alter database add standby logfile group 10 '+DATA' size 100M;

Database altered.


5. Verificação dos "redo logs".

SQL> col members for 999999999
SQL> set lines 120 pages 1000

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

    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         1          1 CLEARING
         2          1 CLEARING
         3          1 CLEARING
         4          1 UNUSED
         5          1 CLEARING_CURRENT
         6          1 UNUSED

6 rows selected.


SQL> select member from v$logfile order by 1 desc;

MEMBER
-------------------------------
+DATA/test/group/
group_6.264.3
+DATA/test/group/group_5.264.3
+DATA/test/group/group_4.264.3
+DATA/test/group/group_3.264.3
+DATA/test/group/group_2.264.3
+DATA/test/group/group_1.264.3

6 rows selected.

6. Verificação dos standby "redo logs".

SQL> set lines 300
SQL> col member format a50

SQL> select substr(a.MEMBER,1,50) MEMBER
   from v$logfile a, v$standby_log b
  where a.group# = b.group#
  order by 1;

MEMBER
-------------------------------
+DATA/test/group/
group_7.264.3
+DATA/test/group/group_8.264.3
+DATA/test/group/group_9.264.3
+DATA/test/group/group_10.264.3

4 rows selected.


7. Voltar o parâmetro "standby_file_management" para AUTO.

SQL> alter system set standby_file_management=auto scope=both;

System altered.

8. Ativar o processo de "recover" no banco de dados Standby.

SQL> alter database recover managed standby database disconnect from session;

Database altered.



Removendo "redo logs" no banco de dados Standby

1. Cancelar o processo de "recover".

SQL> alter database recover managed standby database cancel;

Database altered.

2. Verificar o parâmetro "standby_file_management" e configurá-lo para MANUAL.

SQL> show parameter standby_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string      AUTO


SQL> alter system set standby_file_management=manual scope=both;

System altered.

SQL> show parameter standby_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
standby_file_management              string      MANUAL

3. Verificar o "status" dos arquivos de "redo logs" antes de removê-lo.

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

    GROUP# STATUS
---------- ----------------
         1 CLEARING
        
2 CLEARING
        
3 CLEARING
        
4 UNUSED
         5 CLEARING_CURRENT
        
6 UNUSED

6 rows selected.

NOTA: Se os "status" dos "redo logs" estiverem em "CLEARING", "CURRENT_CLEARING" ou "ACTIVE" indica que os arquivos estão sincronizados com o banco de dados primário. Caso os "status" estejam diferentes desses, um erro poderá ocorrer, durante a execução do procedimento de remoção.


SQL> alter database drop logfile group 1;                            

alter database drop logfile group 1
ERROR at line 1:                        
ORA-01156: recovery in progress may need access to files    
           
3.1. Para sincronizar os "redo logs" deve-se executar os comandos abaixo.

SQL> alter database clear logfile group 1;

Database altered.

SQL> alter database clear logfile group 2;

Database altered.

SQL> alter database clear logfile group 3;

Database altered.

3.2. Verificar os "status" dos "redo logs" novamente.

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

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         2 UNUSED
         3 UNUSED
         4 UNUSED
         5 CLEARING_CURRENT
       
  6 UNUSED

6 rows selected.

4. Depois de sincronizados, pode-se remover os "redo logs".

SQL> alter database drop logfile group 1;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

5. Verificar os "status" dos "redologs".

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

    GROUP#    MEMBERS STATUS
---------- ---------- ----------------
         4          1 UNUSED
         5          1 CLEARING_CURRENT
         6          1 UNUSED


6. Verificar o parâmetro "standby_file_management" e alterá-lo para AUTO.

SQL> alter system set standby_file_management=auto scope=both;

System altered.


7. Ativar o processo de "recover".

SQL> alter database recover managed standby database disconnect from session;

Database altered.


Referências: Oracle® Database Administrator´s Guide 11gR2 (11.2)
         Oracle® Data Guard Concepts and Administration 11gR2 (11.2)



MSc. Rubens Oliveira
DBA Oracle Consultor