Força validação do banco de dados:
RMAN> backup validate check logical database;
O comando acima irá popular a v$database_block_corruption com informações relativas a corrupção.
A partir da versão 11g é possível verificar partes do banco de dados:
RMAN> backup validate check logical datafile 5 SECTION SIZE 1024M;
RMAN> validate check logical datafile 1 BLOCK 5 TO 20;
A query a seguir identifica os segmentos com base nos blocos da view acima:
SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#
, greatest(e.block_id, c.block#) corr_start_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(e.block_id+e.blocks-1, c.block#+c.blocks-1)
- greatest(e.block_id, c.block#) + 1 blocks_corrupted
, null description
FROM dba_extents e, v$database_block_corruption c
WHERE e.file_id = c.file#
AND e.block_id <= c.block# + c.blocks - 1
AND e.block_id + e.blocks - 1 >= c.block#
UNION
SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#
, header_block corr_start_block#
, header_block corr_end_block#
, 1 blocks_corrupted
, 'Segment Header' description
FROM dba_segments s, v$database_block_corruption c
WHERE s.header_file = c.file#
AND s.header_block between c.block# and c.block# + c.blocks - 1
UNION
SELECT null owner, null segment_type, null segment_name, null partition_name, c.file#
, greatest(f.block_id, c.block#) corr_start_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1) corr_end_block#
, least(f.block_id+f.blocks-1, c.block#+c.blocks-1)
- greatest(f.block_id, c.block#) + 1 blocks_corrupted
, 'Free Block' description
FROM dba_free_space f, v$database_block_corruption c
WHERE f.file_id = c.file#
AND f.block_id <= c.block# + c.blocks - 1
AND f.block_id + f.blocks - 1 >= c.block#
order by file#, corr_start_block#;
Mais informações: How to identify all the Corrupted Objects in the Database reported with RMAN [ID 472231.1]
Dúvidas e procedimentos do dia a dia de um DBA. Desde anotações bem simples até procedimentos complexos.
segunda-feira, 2 de abril de 2012
Recriando standby controlfile quando usamos OMF
Quando utilizamos OMF (Oracle-managed files) em uma configuração Dataguard, os datafiles no Primary e Standby terão nomes diferentes. Quando por acaso precisamos recriar o controlfile do standby, isso torna-se um problema (simples de resolver).
O procedimento para recriar o CF é o mesmo, porém apenas temos que indicar ao Standby quais são seus arquivos:
-- Primary:
backup current controlfile for standby format '/tmp/primary.cf';
Copiar o arquivo do Primary para o standby.
-- Standby:
startup nomount;
restore standby controlfile from '/tmp/primary.cf';
alter database mount;
O comando abaixo irá catalogar os OMF
catalog start with '+DG_DATA/SID/datafile/';
Caso seu database tenha também arquivos não-OMF, estes precisam ser catalogados individualmente (consulte a v$datafile), através do comando:
catalog datafilecopy '+DG_DATA/SID/datafile/nome_datafile.dbf';
switch database to copy;
Caso os parâmetros de CONVERT não estejam setados, é necessário limpar os redos manualmente:
select group# from v$log;
select group# from v$standby_log;
alter database clear logfile group ${NUMEROS_ACIMA}
Pronto, já pode iniciar o processo de recover!
Mais informações: Step By Step Guide On How To Recreate Standby Control File When Datafiles Are On ASM And Using Oracle Managed Files [ID 734862.1]
O procedimento para recriar o CF é o mesmo, porém apenas temos que indicar ao Standby quais são seus arquivos:
-- Primary:
backup current controlfile for standby format '/tmp/primary.cf';
Copiar o arquivo do Primary para o standby.
-- Standby:
startup nomount;
restore standby controlfile from '/tmp/primary.cf';
alter database mount;
O comando abaixo irá catalogar os OMF
catalog start with '+DG_DATA/SID/datafile/';
Caso seu database tenha também arquivos não-OMF, estes precisam ser catalogados individualmente (consulte a v$datafile), através do comando:
catalog datafilecopy '+DG_DATA/SID/datafile/nome_datafile.dbf';
switch database to copy;
Caso os parâmetros de CONVERT não estejam setados, é necessário limpar os redos manualmente:
select group# from v$log;
select group# from v$standby_log;
alter database clear logfile group ${NUMEROS_ACIMA}
Pronto, já pode iniciar o processo de recover!
Mais informações: Step By Step Guide On How To Recreate Standby Control File When Datafiles Are On ASM And Using Oracle Managed Files [ID 734862.1]
Assinar:
Comentários (Atom)