Posts com tag ‘target’

Backup & Restore de controlfile com RMAN

sexta-feira, agosto 22nd, 2008

Olá,

Nesse post vamos realizar um simples backup e recover do controlfile do banco de dados utilizando o RMAN, sem a necessidade de um catálogo de recuperação.

Nos exemplos, vou utilizar a versão XE (Oracle Express Edition) que é gratuita e disponível para download no site da Oracle Technology Network e também fornacerá um pequeno treinamento na utilização do RMAN. Pois bem, vamos checar alguns pontos para iniciar nossos testes, como demostrado abaixo:

C:\>start OracleServiceXE
O sistema não pode encontrar o arquivo OracleServiceXE.
C:\>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 22 13:28:33 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> @id
HORA EXECUTADA
-------------------
22-08-2008 13:28:36
INSTANCE_NAME   HOST_NAME            STATUS
--------------- -------------------- ----------
xe              DBARODRIGO          OPEN
USER IS "SYS"
SQL> select * from v$controlfile;
STATUS     NAME                                                         IS_ BLOCK_SIZE FILE_SIZE_BLKS
---------- ------------------------------------------------------------ --- ---------- --------------
           C:\ORACLE\ORADATA\XE\CONTROL.DBF                             NO       16384            430

Atenção

Existe uma etapa que emito o comando @id, ele é apenas um script que utilizo para ver as horas, instância, servidor e o status da instância. Ele está disponível na área de script aqui do Blog, depois comento como configurar o SQLPATH para executar scripts sem a necessidade do caminho absoluto. Não confunda com um comando interno do banco de dados ou do SQL*PLUS.

Nessas etapas, estamos apenas checando informações básicas do banco e onde está seu controlfile, por padrão no XE, o controlfile veem com extensão DBF, o que pode ser um pouco diferente para quem geralmente trabalha com os controlfiles em extensão CTL (mas, não muda nada!).

Agora, vamos executar um backup atual do nosso controlfile com o RMAN, para termos um backup atualizado em casos de futuros problemas. O processo a seguir irá desativar o banco de dados pelo SQL*PLUS e posteriormente, logar-se pelo RMAN e iniciar o banco de dados no estado montado, ou seja, vou apenas abrir o controlfile do banco de dados e coletar as suas informações, porém, nesse estado, fica inutilizável para os usuários.

SQL> shutdown immediate;
Banco de dados fechado.
Banco de dados desmontado.
Instância ORACLE desativada.
SQL> exit
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
C:\>rman target /
Gerenciador de Recuperação: Release 10.2.0.1.0 - Production on Sex Ago 22 13:30:48 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
conectado ao banco de dados de destino (não iniciado)
RMAN> startup mount;
instância Oracle iniciada
banco de dados montado
Total da área Global do Sistema     146800640 bytes
Fixed Size                     1286220 bytes
Variable Size                 62918580 bytes
Database Buffers              79691776 bytes
Redo Buffers                   2904064 bytes
RMAN> list backup of controlfile;
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
Lista de Conjuntos de Backup
===================
RMAN>

Observe, executei o comando shutdown immediate para desativar o banco de dados, e logo em seguida, me conectei no RMAN usando uma autenticação pelo sistema operacional, por isso o (target /), e sem a necessidade de um catálogo de recuperação, pois o RMAN quando não usa um catálogo de recuperação pega as informações do controlfile, sobre SCN, datafiles, logs e etc.

Para uma simples conferência, acima executei o comando LIST BACKUP OF CONTROLFILE apenas para saber se já exisitia ou não um backup do controlfile. E Finalmente o mais interessante, como realizar o backup do controlfile:

RMAN> run {
2> allocate channel t1 type disk format 'c:\oracle\backup\rman\BKP_CF_%d_%t_%s.rman';
3> backup current controlfile tag 'BKP_CF';
4> release channel t1;
5> }
canal alocado: t1
canal t1: sid=35 devtype=DISK
Iniciando backup em 22/08/08
canal t1: iniciando conjunto de backup completo de arquivo de dados
canal t1: especificando arquivo(s) de dados no conjunto de backups
incluindo arquivo de controle atual no conjunto de backups
canal t1: iniciando o componente 1 em 22/08/08
canal t1: componente 1 finalizado em 22/08/08
handle de componente=C:\ORACLE\BACKUP\RMAN\BKP_CF_XE_663427972_18.RMAN tag=BKP_CF comentário=NONE
canal t1: conjunto de backups concluído, tempo decorrido: 00:00:05
Finalizado backup em 22/08/08
canal liberado: t1
RMAN> exit

No script acima, coloquei apenas um canal de I/O para realizar o backup e mandar para o destino do backup, que no exemplo, foi “c:\oracle\backup\rman\”, sempre utilizo variáveis de ambiente do RMAN para gerar o meu arquivo de backupset, no caso, %d (nome do banco de dados), %t (timestamp) e %s (sequência de backupsets gerados) junto com a extensão .RMAN, para saber que foi gerado pelo Recovery Manager.

Após realizar a tarefa, vamos ver o arquivo gerado e posteriormente os passos para simular a restauração do controlfile, todos os passos estão abaixo:

C:\>cd c:\oracle\backup\rman
C:\oracle\backup\rman>dir
 O volume na unidade C é DBA
 O número de série do volume é 7A9D-6C81
 Pasta de C:\oracle\backup\rman
22/08/2008  13:32    <DIR>          .
22/08/2008  13:32    <DIR>          ..
19/08/2008  21:58               187 afiedt.buf
22/08/2008  13:32         7.110.656 BKP_CF_XE_663427972_18.RMAN
              2 arquivo(s)  7.110.853 bytes
               2 pasta(s)  5.920.763.904 bytes disponíveis

Agora, vou para a pasta que está os arquivos de dados do Oracle XE, para deletar o controlfile.

C:\oracle\backup\rman>cd ..
C:\oracle\backup>cd ..
C:\oracle>cd oradata
C:\oracle\oradata>cd xe
C:\oracle\oradata\XE>dir
 O volume na unidade C é DBA
 O número de série do volume é 7A9D-6C81
 Pasta de C:\oracle\oradata\XE
19/08/2008  22:21    <DIR>          .
19/08/2008  22:21    <DIR>          ..
22/08/2008  13:33         7.061.504 CONTROL.DBF
22/08/2008  13:30       450.895.872 SYSAUX.DBF
22/08/2008  13:30       356.524.032 SYSTEM.DBF
19/08/2008  22:21        20.979.712 TEMP.DBF
22/08/2008  13:30        94.380.032 UNDO.DBF
22/08/2008  13:30       104.865.792 USERS.DBF
               6 arquivo(s)  1.034.706.944 bytes
               2 pasta(s)  5.920.763.904 bytes disponíveis

Vou logar no banco de dados novamente, para deletar o arquivo, pois, em ambiente windows, não é possível deletar os arquivos quando estão em uso. Então segue novamente os passos. Lembrando que meu banco de dados sempre esteve no modo MOUNT.

C:\oracle\oradata\XE>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 22 13:34:51 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> shutdown immediate;
ORA-01109: banco de dados não aberto
Banco de dados desmontado.
Instância ORACLE desativada.
SQL> exit
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
C:\oracle\oradata\XE>del /F /Q CONTROL.DBF
C:\oracle\oradata\XE>dir
 O volume na unidade C é DBA
 O número de série do volume é 7A9D-6C81
 Pasta de C:\oracle\oradata\XE
22/08/2008  13:35    <DIR>          .
22/08/2008  13:35    <DIR>          ..
22/08/2008  13:30       450.895.872 SYSAUX.DBF
22/08/2008  13:30       356.524.032 SYSTEM.DBF
19/08/2008  22:21        20.979.712 TEMP.DBF
22/08/2008  13:30        94.380.032 UNDO.DBF
22/08/2008  13:30       104.865.792 USERS.DBF
               5 arquivo(s)  1.027.645.440 bytes
               2 pasta(s)  5.927.821.312 bytes disponíveis
C:\oracle\oradata\XE>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 22 13:35:25 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a uma instância inativa.
SQL> startup;
Instância ORACLE iniciada.
Total System Global Area  146800640 bytes
Fixed Size                  1286220 bytes
Variable Size              62918580 bytes
Database Buffers           79691776 bytes
Redo Buffers                2904064 bytes
ORA-00205: erro na identificação do arquivo de controle, verifique o log de alertas para obter mais informações
SQL> @id
HORA EXECUTADA
-------------------
22-08-2008 13:35:36
INSTANCE_NAME   HOST_NAME            STATUS
--------------- -------------------- ----------
xe              PELSPOMARIO          STARTED
USER IS "SYS"
SQL> shutdown immediate;
ORA-01507: banco de dados n?o montado
Instância ORACLE desativada.
SQL> exit
Desconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Depois de todo o processo, e ao deletar o CONTROL.DBF, tentei iniciar o banco de dados e apareceu a seguinte mensagem de erro, ORA-00205, onde não foi possível encontrar um controlfile para montar o banco de dados e posteriormente abrir aos usuários.

Isso é comum quando se perde um controlfile, em ambiente corporativos o controlfile sempre estará multiplexado, ou seja, sempre terá uma cópia fiel dos controlfile na abertura do banco, porém, dependentdo do crash, o Oracle pode dizer que um controlfile está mais atualizado que o outro, e isso é um assunto para outro post. rs.

Mas, vamos em frente, o que temos que fazer agora é apenas restaurar o controlfile que fizemos backup no início do post, aquele que foi gerado no caminho “c:\oracle\backup\rman”, e o processo de restauração também é bem fácil, observe a recuperação abaixo:

C:\oracle\oradata\XE>rman target /
Gerenciador de Recuperação: Release 10.2.0.1.0 - Production on Sex Ago 22 13:36:05 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
conectado ao banco de dados de destino (não iniciado)
RMAN> startup nomount;
instância Oracle iniciada
Total da área Global do Sistema     146800640 bytes
Fixed Size                     1286220 bytes
Variable Size                 62918580 bytes
Database Buffers              79691776 bytes
Redo Buffers                   2904064 bytes
RMAN> restore controlfile from 'c:\oracle\backup\rman\BKP_CF_XE_663427972_18.RMAN';
Iniciando restore em 22/08/08
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação
canal alocado: ORA_DISK_1
canal ORA_DISK_1: sid=36 devtype=DISK
canal ORA_DISK_1: restaurando arquivo de controle
canal ORA_DISK_1: restauração concluída, tempo decorrido: 00:00:03
nome do arquivo de saída=C:\ORACLE\ORADATA\XE\CONTROL.DBF
Finalizado restore em 22/08/08
RMAN> alter database mount;
banco de dados montado
canal liberado: ORA_DISK_1
RMAN> alter database open resetlogs;
banco de dados aberto.
C:\oracle\oradata\XE>sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Sex Ago 22 13:38:15 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Conectado a:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> @id
HORA EXECUTADA
-------------------
22-08-2008 13:39:41
INSTANCE_NAME   HOST_NAME            STATUS
--------------- -------------------- ----------
xe              PELSPOMARIO          OPEN

 

 PRONTO! Olhe no início do LOG que ao se conectar ao RMAN, peço para realizar a restauração do controlfile pelo arquivo gerado pelo backup, ou seja, do arquivo ‘c:\oracle\backup\rman\BKP_CF_XE_663427972_18.RMAN’, e assim sendo após a restauração com sucesso é só mandar abrir o banco de dados com a opção RESETLOGS (será gerado uma nova incarnação) e permitir o acesso novamente dos usuários.

A ideia do post, vou comentar de maneira bem rápida e de fácil entendimento, como podemos realizar um backup e restore do controlfile de um banco de dados. Espero que tenham gostado.

Abraços,

 Rodrigo Almeida

 

Monitorando o RMAN

segunda-feira, julho 28th, 2008

Olá,

Vou passar 2 dicas preciosas para quem trabalha no dia-a-dia com o RMAN, e quer monitorar os processos realizados por ele. Segue as dicas.

1° Dica

A primeira dica é monitorar os processos de servidor (Channels) do RMAN ao efetuar um backup ou recover na instância de destino (TARGET), pois, nunca sabemos se irá demorar ou não para realizar o backup, para acabar com esse problema, existe o SELECT abaixo:

SQL> l
  1  select sid,
  2         serial#,
  3         context,
  4         sofar,
  5         totalwork,
  6         round(sofar/totalwork*100,2) “%_complete”
  7  from
  8         v$session_longops
  9  where
 10         opname like ‘RMAN%’
 11         and opname not like ‘%aggregate%’
 12         and totalwork != 0
 13*        and sofar <> totalwork
SQL> /
  SID   SERIAL#   CONTEXT     SOFAR   TOTALWORK %_complete
 ----   -------  --------   ------- ----------- ----------
  312     54367         1    455672     1044904      43,61
  295     58222         1    435192     1076910      40,41

 Para cada canal (channel) alocado no banco de dados para realização da tarefa de backup ou recover, representa uma sessão no resultado acima. Para exemplificar, o script de RMAN utilizado para realizar o backup (de archives), segue abaixo:

RMAN> print script bkp_archives_diario;
printing stored script: bkp_archives_diario
 {
  allocate channel t1 type disk format '/u02/backup/rman/BKP_ARCHIVES_DIARIO_%d_%t_%s.rman';
  allocate channel t2 type disk format '/u02/backup/rman/BKP_ARCHIVES_DIARIO_%d_%t_%s.rman';
  sql 'alter system checkpoint global';
  backup archivelog all tag 'BKP_ARCHIVES_DIARIO';
  release channel t2;
  release channel t1;
}

Como nosso script acima está usando 2 canais (Channel t1 e Channel t2), será exibido o progresso de cada sessão que é o ”%_complete” de cada canal utilizado. Resumindo, com esse simples SELECT feito na instância TARGET, conseguimos monitorar as tarefas básicas do RMAN.

2° Dica

Para acompanhar o status das tarefas realizadas pelo RMAN na sua base target, o SELECT abaixo pode lhe auxiliar, veja:

SQL> l
  1  select operation as “OPERACAO”,
  2         object_type as “TIPO”,
  3         status,
  4         output_device_type as “MEDIA”,
  5         to_char(end_time,’DD-MM-RRRR HH24:MI:SS’) as “DATA”,
  6         round(MBYTES_PROCESSED/1024,2) as “TAMANHO(MB)”
  7  from
  8         v$rman_status
  9  where
 10         operation <> ‘CATALOG’
 11         and trunc(end_time)>=trunc(sysdate-1)
 12  order by
 13*        end_time
SQL> /
OPERACAO                                 TIPO          STATUS          MEDIA             DATA              TAMANHO(MB)
---------------------------------------- ------------- --------------- ----------------- -------------------- -----------
CONTROL FILE AND SPFILE AUTOBACK                       COMPLETED       DISK              27-07-2008 20:08:27          ,01
BACKUP                                   DB FULL       COMPLETED       DISK              27-07-2008 20:08:31        22,21
RMAN                                                   COMPLETED                         27-07-2008 20:08:31        22,21
CONTROL FILE AND SPFILE AUTOBACK                       COMPLETED       DISK              27-07-2008 22:00:34          ,01
BACKUP                                   ARCHIVELOG    COMPLETED       DISK              27-07-2008 22:00:38          ,53
RMAN                                                   COMPLETED                         27-07-2008 22:00:38          ,54
CONTROL FILE AND SPFILE AUTOBACK                       COMPLETED       DISK              27-07-2008 23:00:22          ,01
BACKUP                                   ARCHIVELOG    COMPLETED       DISK              27-07-2008 23:00:22           ,3
RMAN                                                   COMPLETED                         27-07-2008 23:00:26          ,31
CONTROL FILE AND SPFILE AUTOBACK                       COMPLETED       DISK              28-07-2008 15:40:08          ,01
BACKUP                                   ARCHIVELOG    COMPLETED       DISK              28-07-2008 15:40:12         1,02
RMAN                                                   COMPLETED                         28-07-2008 15:40:12         1,03
RMAN                                                   COMPLETED WITH                    28-07-2008 16:32:24            0
                                                       ERRORS

O resultado será todas as atividades feitas pelo RMAN que foram registradas pelo catálogo de recuperação, perceba que para cada atividade, a coluna TIPO nos mostra qual atividade foi feita na instância junto  com o seu respectivo status. Deste modo conseguimos ter mais controle sobre as operações do RMAN em cada banco de dados gerenciado por ele.

A view v$rman_status fornece mais informações importantes que você poderá adaptar a sua necessidade, as outras opções existente estão abaixo, quando realizo o select abaixo, veja:

SQL> select column_name from dba_tab_columns where table_name = 'V_$RMAN_STATUS';
COLUMN_NAME
------------------------------
SID
RECID
STAMP
PARENT_RECID
PARENT_STAMP
SESSION_RECID
SESSION_STAMP
ROW_LEVEL
ROW_TYPE
COMMAND_ID
OPERATION
STATUS
MBYTES_PROCESSED
START_TIME
END_TIME
INPUT_BYTES
OUTPUT_BYTES
OPTIMIZED
OBJECT_TYPE
OUTPUT_DEVICE_TYPE

Espero que essas dicas possa ajudar.

 Rodrigo Almeida