Arquivo de março, 2015

Para efetuar backups online (hot backup), isto é, fazer backup do banco de dados com ele UP, não havendo necessidade de parar o banco para fazer (cold backup). Você precisa ativar o modo archivelog, desta maneira, os redo logs online são arquivados, criando arquivos de log de todas as transações do banco de dados.

O Oracle grava nos arquivos de redo log online de maneira cíclica: após preencher o primeiro arquivo de log, ele começa a gravar no segundo, até que ele esteja cheio, e em seguida, começa a gravar no terceiro. uma vez que o último arquivo de redo log online esteja cheio, o processo em segundo plano LGWR (log write) começa a sobrescrever o conteúdo do primeiro arquivo.

Por default o modo NOARCHIVELOG vem como padrão, ele protege a integridade do banco de dados no caso de falha de uma instância ou uma queda de sistema, porque todas as transações encerradas com commit, mas que ainda não foram gravadas nos arquivos de dados estarão disponíveis nos arquivos de redo log online.

Quando o Oracle está executando no modo ARCHIVELOG, o processo em background ARCn (archiver process) faz uma cópia de cada arquivo de redo log antes de sobrescrevê-lo. Exemplo: se o disco que esta os data files der algum problema, com os archives logs podemos reconstruir o banco de dados até o momento anterior ao problema, devido a um backup recente dos data files e aos arquivos de redo log que foram gerados desde que ele ocorreu. Abaixo, uma imagem para ilustrar o processo ARC, copiando os arquivos do redo log e passando para a localização do archive log.



Chega de teoria e vamos para a pratica; verificando se esta ativado o archivelog:

SQL> select log_mode from v$database;

LOG_MODE
————
NOARCHIVELOG

 

Com esta seleção, percebemos que a resposta é que não esta com o archive log mode ativado, outra forma de verificar se esta em archive log mode é:

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     61
Current log sequence           63

 

Caso queira mudar a localidade dos archives logs, você pode mudar com o seguinte comando:

alter system set LOG_ARCHIVE_DEST_1=’LOCATION=/u01/app/oracle/flash_recovery_area/ mandatory’ scope=both;

 

Ok, vimos que o modo archivelog esta desabilitado, para habilitar precisamos parar o banco:

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

 

Subindo a base no estado mount:

SQL> startup mount;
ORACLE instance started.

Total System Global Area  535662592 bytes
Fixed Size                  1337720 bytes
Variable Size             327157384 bytes
Database Buffers          201326592 bytes
Redo Buffers                5840896 bytes
Database mounted.
SQL>

 

Alterado o banco para o modo archivelog:

SQL> alter database archivelog;
Database altered.

 

Abrindo o banco:

SQL> alter database open;
Database altered.

 

Verificando o estado do archive log:

SQL> archive log file;
SP2-0718: illegal ARCHIVE LOG option
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     78
Next log sequence to archive   80
Current log sequence           80

 

Forçando a troca do archive log, com isso, podemos ver se já foi gerado o arquivo de archive log:

SQL> alter system switch logfile;
System altered.

 

Descobrindo a onde estão sendo salvos os archives logs:

SQL> show parameter DB_RECOVERY_FILE_DEST

NAME                                 TYPE        VALUE
———————————— ———– ——————————
db_recovery_file_dest                string      $ORACLE_BASE/flash_recovery_area
db_recovery_file_dest_size           big integer 2G

 

Agora podemos verificar se foi gerado o archivelog, com o comando pwd mostro o diretório corrente e com o ls eu listo os arquivos da pasta:

[oracle@oracle11g 2011_07_13]$ pwd
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_07_13

[oracle@oracle11g 2011_07_13]$ ls -lah
total 22M
drwxr-x— 2 oracle oinstall 4.0K Jul 13 10:08 .
drwxr-x— 3 oracle oinstall 4.0K Jul 13 09:59 ..
-rw-r—– 1 oracle oinstall 21M Jul 13 09:59 o1_mf_1_80_71v96hr3_.arc
-rw-r—– 1 oracle oinstall 978K Jul 13 10:08 o1_mf_1_81_71v9pr0h_.arc

 

Algumas views importantes para informações do archive log:

Views Descrição
V$DATABASE Mostra se a base de dados esta em ARCHIVELOG ou NOARCHIVELOG
V$ARCHIVED_LOG Exibe historico dos ARCHIVELOGS do CONTROL FILES. Se você usar um catálogo de recuperação, a view RC_ARCHIVED_LOG contém informações semelhantes.
V$ARCHIVE_DEST Descreve o estado atual da instância, todos os destinos dos archives e o tamanho atual.
V$ARCHIVE_PROCESSES Exibe informações sobre o estado dos processos de arquivo diferentes para uma instância.
V$BACKUP_REDOLOG Contém informações sobre todos os backups dos archived logs. Se você usa o recovery catalog, o RC_BACKUP_REDOLOG contém informações similares.
V$LOG Exibe todos os grupos de redo log para o banco de dados e indica que precisam ser arquivados.
V$LOG_HISTORY Contém informações de logs registros, que marca os archives com o range de SCN, para cada archive log.

 

 

Fonte: http://aprenderoracle.com/2011/07/habilitando-o-archivelog-mode-no-oracle-11g/

Problema: ORA-00257: archiver error. Connect internal only, until freed.

Sintoma: Aceita apenas conexões internas e rejeita externas,

o banco está aberto, mas não aceita transações em razão de um redo log travado

1° – Shut a Database

SQL> SHUTDOWN IMMEDIATE;

ORACLE instance shut down.

2° – Start o banco em esta Mount (manutenção)

SQL> STARTUP MOUNT

ORACLE instance started.

Total System Global Area 1191182336 bytes

Fixed Size 2020320 bytes

Variable Size 318770208 bytes

Database Buffers 855638016 bytes

Redo Buffers 14753792 bytes

Database mounted.

3° (não execute) – Ocorrera o  erro ao tentar “abrir” a database, ira mencionar que não

pode gravar o arquivo de redo.

SQL> ALTER DATABASE OPEN;

ALTER DATABASE OPEN

*

ERROR at line 1:

ORA-16038: log 1 sequence# 53 cannot be archived

ORA-19809: limit exceeded for recovery files

ORA-00312: online log 1 thread 1:

‘/u01/app/oracle/product/10.2.0/oradata/desenvl/redo01.log’

4° – Veja o destino e se está em modo archive e veja que o espaço da Flash

Recovery Area está lotado, causa do problema.

SQL > SELECT * FROM V$RECOVERY_FILE_DEST;

NAME

——————————————————————————–

SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

———– ———- —————– —————

/u01/app/oracle/product/10.2.0/flash_recovery_area/ 2147483648 2141670912 0 50

5° – Mude os archives antigo da Flash Recovery Area para outras pastas. E inicie o

RMAN.

$ rman target sys/senha@oracle_sid

6° – No RMAN valide os archives e apague os antigos.

RMAN > CROSSCHECK ARCHIVELOG ALL;

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=280 devtype=DISK

RMAN > DELETE EXPIRED ARCHIVELOG ALL;

7° – Saia do RMAN e conectado na instância localmente altere o tamanho da Flash

Recovery Area.

RMAN > exit;

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=4294967296 SCOPE=BOTH;

8° – Start o database, alterando o estado dele para ‘OPEN’.

SQL> ALTER DATABASE OPEN;

Database altered

Pronto o Banco Volta a funcionar !!

 

Fonte: http://hdconsultoria.com/blog/item/6-ora-00257-solucionado.html