Meu próximo post seria sobre Backups usando RMAN.

Porém, para utilizar o RMAN é necessário que o banco esteja em modo archivelog. Por isso resolvi escrever este post antes, e assim dividir um pouquinho das tarefas, pois acredito que a leitura fica muito mais agradável em alguns posts mais curtos e simples do que um grande texto com todo o conteúdo de uma vez só.

Vamos botar a mão na massa?

Fiz o login diretamente no meu servidor:

[oracle@oraserver ~]$ sqlplus / as sysdba

Tudo ok, devidamente conectado como SYS. Hora de verificar se o banco de dados está ou não em modo archivelog:

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

NOARCHIVELOG – Isso significa que o banco não está em modo archivelog. Portanto, vamos fazer as alterações necessárias para que o banco fique em modo archivelog.

O primeiro passo é alterar um parâmetros de inicialização. O modo de fazer essa alteração vai depender de um fator de sua instância: ela é iniciada usando pfile ou spfile? Para isso, vamos fazer uma checkagem:

SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /oracle/app/oracle/product/11.
 2.0/dbhome_1/dbs/spfileinst1.o
 ra

O comando acima mostrou que a minha base, a minha instância, está subindo usando SPFILE.

Com isso posso fazer a  alteração que citei anteriormente através dos comandos abaixo:

 
SQL> alter system set log_archive_dest_1='location=/backup/archives' scope=spfile;

System altered.

Esta alteração acima é simplesmente para dizer ao Oracle: “Eu quero que os archives gerados sejam gravados no diretório /backup/archives do servidor.”

Ótimo. Mas e se a instância estivesse usando pfile ao invés do spfile?

Sem problemas, neste caso bastaria acertar estes parâmetros dentro do pfile, ou seja, no arquivo init_[nome_do_banco].ora. Onde fica esse arquivo? Bom, tanto o spfile quanto o pfile geralmente podem ser encontrados no $ORACLE_HOME/dbs. As linhas destes parâmetros dentro do pfile ficariam assim:

log_archive_dest_1=’location=/backup/archives’


Muito IMPORTANTE: o caminho especificado no parâmetro log_archive_dest_1 tem que ser válido, e com espaço disponível em disco. SEMPRE. Caso o Oracle tente gravar um archive neste diretório e ele tenha algum tipo de problema (diretório não existente, ou sem espaço em disco), o banco de dados irá simplesmente PARAR.

Feito isto, os próximos comandos são bem simples, conforme a sequência abaixo. Apesar de simples, é necessário obrigatoriamente fazer shutdown na base. Portanto, seu banco de dados ficará fora do ar por alguns instantes.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.

Total System Global Area 1870647296 bytes
Fixed Size 2214416 bytes
Variable Size 1140852208 bytes
Database Buffers 721420288 bytes
Redo Buffers 6160384 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.
SQL> alter database open;

Database altered.

Pronto, o banco de dados já está em modo archivelog. Para conferir:

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /backup/archives
Oldest online log sequence 154
Next log sequence to archive 156
Current log sequence 156

SQL> alter system switch logfile;

System altered.

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /backup/archives
Oldest online log sequence 155
Next log sequence to archive 157
Current log sequence 157

Ótimo! Agora o banco está em modo ARCHIVELOG, com isso posso fazer backups com o banco online! Em breve vou escrever sobre a ferramenta RMAN, e como fazer backups online usando o RMAN.

Algumas considerações importantes!

O meu banco de dados, no qual realizei todo esse processo acima, é versão 11gR2. Em versões anteriores, também era necessário setar o parâmetro log_archive_start, pelo comando:

SQL> alter system set log_archive_start=TRUE scope=spfile

Por que não fiz isso? Porque este parâmetro ficou obsoleto na versão 11g. Caso faça essa alteração (o que é comum acontecer, visto que vários tutoriais por aí incluem este comando), a cada startup do banco será mostrada a seguinte mensagem:

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

E aí, como resolver isto? O que fazer para sumir esta mensagem?

Bom, para resolver, basta “resetar” o valor do parâmetro log_archive_start, com o seguinte comando:

SQL> alter system reset log_archive_start scope=spfile sid='*';

Pronto!  Agora o parâmetro log_archive_start não tem mais nenhum valor associado. Mantenha sempre assim, não altere este parâmetro.