sexta-feira, 10 de julho de 2009

Utilizando o Pacote "DBMS_REPAIR".

Olá á todos, irei falar um pouco sobre uma experiencia que tive , onde precisei usar este Pacote Oracle chamado DBMS_REPAIR, mostrarei também o procedimento de como configura-lo e usa-lo.

DBMS_REPAIR.

Conceito : Este utilitario vem junto com a versão Oracle Standard, e auxilia o DBA na detecção de blocos corrompidos e também na limpeza dos mesmos.

Configurando o Ambiente.

Antes de iniciarmos precisaremos criar 2 (duas) tabelas de apoio para este processo, essas tabelas devem ser criadas debaixo do usuário SYS. Dentro do pacote DBMS_REPAIR ha uma procedure chamada ADMIN_TABLES, que fará este trabalho para nós, não necessitando que fiquemos perdendo tempo procurando por scripts no diretório de RDBMS ( $ORACLE_HOME/rdbms/admin ). Veja com proceder:


dbms_repair.ADMIN_TABLES(

table_name in varchar2,

table_type in binary_integer,

action in binary_integer,

tablespace in varchar2 DEFAULT NULL);




  • table_name : recebe o nome da tabela que sera criada por meio do parametro action.

  • table_type : recebe os tipos que podem ser ORPHAN_TABLES ou REPAIR_TABLES.

  • action : pode ser do tipo CREATE_ACTION, PURGE_ACTION ou DROP_ACTION. De acordo com cada tipo teremos uma tarefa distinta a ser executada, no caso do CREATE sera criada uma tabela abaixo do esquema SYS, se usarmos o PURGE os registros das tabelas criadas serão eliminados e por fim o DROP que ira apagar os objetos envolvidos no processo de criação.

  • tablespace : aqui informamos em qual tablespave ficaram essas tabelas que serão usadas neste processo, a tablespace que for escolhida se ainda não existir na relação de tablespace ela deverá ser criada.

Obs: Neste ponto em que ha necessidade de um Tablespace , sugiro que criem uma a parte das demais, porque após o sucesso do processo, basta que remova esta mesma tablespace sem causar quaisquer transtorno.

Iremos agora então, dar inicio ao processo de utilização da DBMS_REPAIR, como primeiro passo a criação das tabelas que usaremos em nosso processo, veja :

begin

dbms_repair.admin_tables(

table_name => 'REPAIR_TEST',

table_type => dbms_repair.repair_table,

action => dbms_repair.create_action,

tablespace => 'REPAIR_TBS');

end;

Agora criaremos a Orphan_table :

begin

dbms_repair.admin_tables (

table_name => 'ORPHAN_TESTE',

table_type => dbms_repair.orphan_table,

action => dbms_repair.create_action

tablepsace => 'REPAIR_TBS');

end;

Pronto, as tabelas de administração estão criadas,a tabela de REPAIR conterá os blocos corrompidos que forem identificados no processo, e as ORPHAN tables serão usadas e caso de indices com dados corrompidos.

ENCONTRANDO OS BLOCOS CORROMPIDOS

Primeiramente, antes de iniciarmos a caçada aos blocos comprometidos, vamos dar uma breve olhada na estrutura da procedure CHECK_OBJECT, que compõe o pacote da DBMS_REPAIR :

dbms_repair.check_object(

schema_name IN varchar2,

object_name IN varchar2,

partition_name IN varchar2 DEFAULT NULL,

object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT,

repair_table_name IN varchar2 DEFAULT 'REPAIR_TABLE',

flags IN BINARY_INTEGER DEFAULT NULL,

relative_fno IN BINARY_INTEGER DEFAULT NULL,

block_start IN BINARY_INTEGER DEFAULT NULL,

block_end IN BINARY_INTEGER DEFAULT NULL,

corrupt_count OUT BINARY_INTEGER);

Vamos entender um pouco mais dobre essa Procedure, e descrever o que cada opção desta significa :

  • schema_name - o nome do usuário que tera seu objeto analisado.
  • object_name - o nome do objeto em questão a ser analisado
  • partition_name - caso seja uma partição aqui vai o nome da partição analisada
  • object_type - tanto pode ser tabela ou indice
  • repair_table_name - nome da tabela administrativa do processo
  • flags - não é usado
  • relative_fno - numero do arquivo que contera o range de blocos analisados
  • block_start - o primeiro bloco do range que será analisado
  • block_end - o ultimo bloco a ser analisado no range
  • corrupt_count - o numero de blocos corrompidos descobertos.

Bem agora que já entendemos a dinamica da procedure, e ficamos por dentro do que cada campo dela executa, vamos agora ao processo de reparação dos blocos.

REPARANDO OS BLOCOS CORROMPIDOS

A dbms_repair,possui uma procedure própria para reparar os blocos corrompidos, onde na verdade os blocos serão marcados e não corrigidos, o nome da procedure é : DBMS_REPAIR.FIX_CORRUPT_BLOCKS.

É isso pessoal agora que já sabemos como fazer um breve repair em blocos corrompidos, poderemos ficar menos preocupados com esse problema, lembrando sempre que com o RMAN também é possivel via BMR ( Block Media Recover ) ferramenta poderosissima diga-se de passagem.

Espero que gostem e apreciem.

Abraço á todos!!!!!

Bibliografia: Oracle in Focus - Oracle Utiliies - Ed. Rampant - Autor : Dave Moore