Leonardo Pedroso Costa
MongoDB | SQL Server | Oracle

Identificando blocos corrompidos nos bancos Oracle e SQL Server

Os 2 principais bancos de dados do mercado possuem alguns meios eficazes de identificar se há blocos corrompidos na base de dados. A intenção é mostrar de maneira simples e clara os métodos utilizados para checar se há algum problema de corrupção de dados, arquivos, dentre outros.

Oracle

Utilizando a view: v$database_block_corruption. É preciso rodar o comando backup validate check logical database para popular a view v$database_block_corruption!

[code lang=”sql”]

su – oracle
rman target /

Recovery Manager: Release 11.2.0.4.0 – Production on Fri Jan 24 21:33:50 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: CAM (DBID=354984621)

RMAN>
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
backup validate check logical database;
}

[/code]

Após rodar o comando acima você receberá uma mensagem parecida com essa abaixo que basicamente informando que o validate foi executado:

[code lang=”sql”]

Starting backup at 24-JAN-20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=869 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00134 name=+DATA_ASM_DG/cam/datafile/cam_copa_br_2014.dbf
input datafile file number=00068 name=+DATA_ASM_DG/cam/datafile/cam_liberta_2013.1164.1014261749

List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
—- —— ————– ———— ————— ———-
1 OK 0 14488 393235 333147726939
File Name: +DATA_ASM_DG/cam/datafile/cam_copa_br_2014.dbf
Block Type Blocks Failing Blocks Processed
———- ————– —————-
Data 0 172981
Index 0 184618
Other 0 21129

File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
—- —— ————– ———— ————— ———-
4 OK 0 88152 163840 332369926878
File Name: +DATA_ASM_DG/cam/datafile/cam_liberta_2013.1164.1014261749
Block Type Blocks Failing Blocks Processed
———- ————– —————-
Data 0 0
Index 0 74697
Other 0 991

Finished backup at 24-JAN-20
released channel: d1
released channel: d2
released channel: d3
released channel: d4

RMAN>

[/code]

Por fim, execute o comando abaixo para verificar se algum bloco está corrompido. É sempre bom que essa consulta não retorne nenhuma linha.

[code lang=”sql”]
select * from v$database_block_corruption
[/code]

SQL Server

No SQL Server, é a tabela suspect_pages é usada para manter informações sobre páginas corrompidas. Existem 3 opções que populam a tabela suspect_pages do banco de dados MSDB com informações precisas:

Durante uma operação DBCC CHECKDB.
Durante uma operação de backup.
Uma query que precisa ler uma página.

Para verificar basta rodar o comando abaixo, lembrando que é sempre bom que essa consulta não retorne nenhuma linha 😀

[code lang=”sql”]

use msdb
go
select * from suspect_pages;

[/code]

 

 

 

 

 

 

 

E assim aprendemos duas maneiras simples e eficazes de fazer essa checagem!

Leonardo Pedroso

Leonardo Pedroso

Profissional de TI experiência em administração de banco de dados: SQL Server 2000 a 2019, Oracle 11g a 19c, PostgreSQL, MySQL, MongoDB, Cassandra. Atua realizando análise de desempenho, DR e HA, implantação, administração de banco de dados em cluster e implementação de projetos de banco de dados NoSQL (MongoDB, Cassandra), bem como automação de processos utilizando Shell script, Powershell (dbatools), e players de Cloud: Azure e Aws.