Verificando corrupção física – DBV

Para quem não conhece, o DBVerify, mais conhecido apenas por DBV é um utilitário externo via linha de comando oferecido pela Oracle para a verificação da integridade física dos arquivos de dados (datafiles). Verificação de arquivos como controlfile e redo não são suportados.

O DBV pode ser realizado tanto com o banco de dados offline como online, a grande diferença está no tempo de execução onde a verificação offline se destaca sendo significantemente mais rápida. Esta verificação se torna muito importante quando precisamos verificar a integridade de um backup (copia-imagem) antes de ser restaurado, ou como auxílio diagnóstico quando ocorrer problemas de corrupção de dados.

Existem duas interfaces de linha de comando para o DBV, uma especifica o arquivo de dados/blocos e outra onde podemos especificar um segmento para verificação, ambas serão abordadas.

Quando realizamos uma verificação dos arquivos de dados/blocos o DBV inicia um scanneamento sobre o arquivo executando validações e oferecendo a saida das verificações para diagnósticos, este processo tambem pode ser realizado sobre arquivos gerenciados pelo ASM apenas sendo necessário fornecer um USERID válido para o DBV se conectar na instance ASM.

Quando executamos uma verificação sobre um segmento, este também fornece informações para diagnóstico, no entanto vale certa cautela nesta execução pois o segmento que está sendo verificado se torna bloqueado até que a operação seja concluida, isto porque as informações são recuperadas a partir do banco de dados corrente. Necessário informar USERID com privilégios SYSDBA.

Antes de abordarmos alguns exemplos de utilização, vamos identificar as opções (parâmetros) que podem ser informados ao DBV.

Observe que o DBVerify é iniciado pelo próprio comando dbv

 

[oracle@orcl ~]$ dbv help=yes

DBVERIFY: Release 11.1.0.6.0 - Production on Thu Nov 3 09:11:26 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Keyword     Description                    (Default)
----------- ------------------------------ -----------
FILE        File to Verify                 (NONE)
START       Start Block                    (First Block of File)
END         End Block                      (Last Block of File)
BLOCKSIZE   Logical Block Size             (8192)
LOGFILE     Output Log                     (NONE)
FEEDBACK    Display Progress               (0)
PARFILE     Parameter File                 (NONE)
USERID      Username/Password              (NONE)
SEGMENT_ID  Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN    Highest Block SCN To Verify    (NONE)
            (scn_wrap.scn_base OR scn)

-> Note que todos os parâmetros foram listados, tanto para verificação de arquivo como de segmento.

PARÂMETRO     DESCRIÇÃO/ENTRADA
FILE Nome do datafile da base de dados.
START Bloco de inicio da verificação. Se não for especificado, por default o DBV inicia a verificação a partir do primeiro bloco do arquivo.
END Bloco de termino da verificação. Se não for especificado, por default o DBV verifica até o ultimo bloco do arquivo.
BLOCKSIZE Tamanho do bloco do arquivo, pode ser verificado atraves do comando show parameter db_block_size.
LOGFILE Aponta o arquivo onde será gerado a saida da verificação, por default a saida é no display do terminal.
FEEDBACK Indica o progresso da verificação (…), se for especificado 0 nenhum indicador de progresso é mostrado.
PARFILE Especifica o nome do arquivo de parâmetros a ser utilizado.
USERID Usuário e senha, necessário apenas quando o arquivo a ser verificado é um arquivo ASM ou uma verificação de segmento.
SEGMENT_ID Número de identificação do segmento a ser verificado. AS informações podem ser coletadas na SYS_USER_SEGS. (Necessário conectar como SYSDBA)
HIGH_SCN Quando um valor for especificado o DBV escreve mensagens de diagnóstico para cada bloco, cujo nível de bloco SCN exceder o valor especificado.

 

 

Verificação de arquivos de dados:

Syntax:

  dbv [ USERID=username/password ]
    FILE = filename
  | { START = block_address | END = block_address }
  | BLOCKSIZE = integer
  | LOGFILE = filename
  | FEEDBACK = integer
  | HELP  = { Y | N }
  | PARFILE = filename

-> Verificando um arquivo de dados non-ASM:

[oracle@orcl ~]$ dbv file=/u02/oradata/orcl11g/new_point01.dbf

DBVERIFY: Release 11.1.0.6.0 - Production on Thu Nov 3 09:54:36 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - Verification starting : FILE = /u02/oradata/orcl11g/new_point01.dbf


DBVERIFY - Verification complete

Total Pages Examined         : 12800
Total Pages Processed (Data) : 42
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 6
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 47
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 12705
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 2981584 (0.2981584)

NOTA:

• Pages = Blocos

• Total Pages Examined = Número de blocos no arquivo

• Total Pages Processed = Número de blocos que foram verificados (blocos formatados)

• Total Pages Failing = Número de blocos que falharam na verificação

• Total Pages Empty = Número de blocos vazios

• Total Pages Marked Corrupt = Número de blocos em que o cabeçado é inválido. Blocos corrompidos!

• Total Pages Influx = Número de blocos que estão sendo lidos e gravados ao mesmo tempo. Ocorre quando o banco de dados está aberto e o DBV não pode obter uma imagem consistente dos blocos que estão em fluxo.

 

-> Verificando um arquivo de dados ASM:

Necessário informar um USERID para o dbv se conectarna instance ASM.

[oracle@orcl ~]$ dbv USERID=SYS/***** file=+DGDADOS/datafiles/users01.dbf logfile=/usr/tmp/dbv.log

DBVERIFY: Release 11.1.0.6.0 - Production on Thu Nov 3 10:19:15 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


[oracle@orcl ~]$ cat /usr/tmp/dbv.log

DBVERIFY: Release 11.1.0.6.0 - Production on Thu Nov 3 10:19:15 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


DBVERIFY - Verification starting : FILE = +DGDADOS/datafiles/users01.dbf

DBVERIFY - Verification complete

Total Pages Examined         : 13376
Total Pages Processed (Data) : 9240
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 290
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 2548
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 1298
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 0 (0.0)

-> Verificação de Segmento:

Syntax:

  dbv USERID = username/password
  | SEGMENT_ID = tsn.segfile.segblock
  | LOGFILE = filename
  | FEEDBACK = integer
  | HELP  = { Y | N }
  | PARFILE = filename

[oracle@orcl ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.6.0 - Production on Thu Nov 3 10:22:39 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


Conectado a:
Oracle Database 11g Release 11.1.0.6.0 - Production

SQL> select us.TABLESPACE_ID, us.HEADER_FILE, us.HEADER_BLOCK
  2  from SYS_USER_SEGS us, DBA_SEGMENTS s
  3  where us.segment_name=s.segment_name
  4  and s.owner='ANDERSON'
  5  and s.segment_name='TESTE';

TABLESPACE_ID HEADER_FILE HEADER_BLOCK
------------- ----------- ------------
            6           5           11
SQL> exit
Desconectado de Oracle Database 11g Release 11.1.0.6.0 - Production

[oracle@orcl ~]$ dbv USERID=ANDERSON/****** segment_id=6.5.11

DBVERIFY: Release 11.1.0.6.0 - Production on Thu Nov 3 10:35:35 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

DBVERIFY - Verification starting : SEGMENT_ID = 6.5.11


DBVERIFY - Verification complete

Total Pages Examined         : 3
Total Pages Processed (Data) : 0
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 2
Total Pages Processed (Seg)  : 1
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 0
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 0 (0.0)

%name Verificando corrupção física   DBV

Autor: Anderson Graf

Bacharel em Sistemas de Informação e MBA em Gestão de Banco de Dados Oracle. Entusiasta da tecnologia Oracle, ACE Associate ♠, autor em vários blogs e OTN. Consultor Oracle Senior na Exímio Soluções em TI

Envolvido em soluções de:
– Implementação, migração, gerenciamento e suporte a produtos Oracle, multiplataforma
– Monitoramento de ambientes 24×7
– Backup e Recovery
– Performance e Tuning
– Alta disponibilidade (HA) – RAC, Data Guard
– EM database/grid/cloud control
– Particionamento & Advanced Compression
– Oracle Engineered Systems – ODA, Exadata

Blog pessoal: http://www.andersondba.com.br
Articulista na Oracle Technology Network (OTN) – https://goo.gl/99R6yW
ACE Associate – https://goo.gl/MBB51b
Articulista GPO – http://profissionaloracle.com.br