as interrupções do banco de dados podem ser tremendamente caras para organizações orientadas por dados, paralisando sua empresa. Uma das causas mais comuns de interrupções no banco de dados é a corrupção do bloco de dados. Neste artigo, discutiremos como você pode detectar e reparar o problema de corrupção de bloco em seu banco de Dados Oracle.

o que é uma corrupção de bloco de dados?

as corrupções do bloco de dados ocorrem sempre que os dados não estão em seu estado esperado. O bloco pode ter conteúdos que não são internamente consistentes, ou pode ter sido alterado para ser irreconhecível como parte do formato de banco de Dados Oracle.

algumas corrupções de blocos de dados são relativamente pequenas, afetando apenas um único bloco. Outros corrompem uma parte significativa do banco de dados, tornando-o inutilizável e levando à perda de informações críticas.

por que ocorrem corrupções de bloco de dados?

as corrupções dos blocos de dados podem ocorrer sempre que os dados forem alterados e podem ser rastreados até problemas de hardware e software. Problemas com qualquer um ou todos os seguintes componentes pode resultar em bloco de dados corrupções:

  • unidade de disco Rígido
  • controlador de Disco
  • sistema Operacional
  • rede de área de Armazenamento (SAN)
  • dispositivo de Armazenamento

Como você pode evitar a bloco de dados corrupções?

as corrupções dos blocos de dados são difíceis de prevenir porque são inerentemente imprevisíveis. De fato, as corrupções são inevitáveis nos ambientes de banco de dados altamente complexos de hoje.

no entanto, você ainda pode trabalhar para mitigar os efeitos de corrupções de bloco de dados com uma estratégia robusta de backup e recuperação. A Oracle fornece uma variedade de ferramentas e soluções para esses fins, incluindo:

  • Oracle Data Guard: protege bancos de dados corporativos em caso de desastre ou corrupção.
  • Data Recovery Advisor: diagnostica perda ou corrupção de dados e realiza reparos.
  • Oracle Flashback: restaura tabelas ou linhas de banco de dados para um estado anterior.
  • Oracle Recovery Manager: faz backup e recupera bancos de Dados Oracle.
  • Oracle Secure Backup: faz backup de dados do sistema de arquivos e arquivos de banco de Dados Oracle para fita.

como você detecta e monitora a corrupção do bloco de dados?

apesar de seus melhores esforços, a corrupção do bloco de dados pode ocorrer a qualquer momento. Felizmente, existem várias maneiras pelas quais a Oracle pode detectar e reparar a corrupção do bloco de dados:

  • o Oracle Recovery Manager (RMAN)
  • DBVerify
  • ANALISAR comando
  • DB_BLOCK_CHECKING parâmetro
  • Block media recovery (TMB)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

Para verificar um banco de dados físico e lógico de corrupção, execute o seguinte comando dentro do Oracle RMAN:

  • CÓPIA de segurança de VALIDAR a VERIFICAÇÃO de BANCO de dados LÓGICO ARCHIVELOG ALL;

O comando VALIDAR no Oracle RMAN pode ser usado para validar arquivos, tablespaces, e até mesmo bancos de dados inteiros. Por exemplo:

  • valide DATAFILE ‘ / u01/oradata/ORCL / system01.dbf’;
  • validar usuários de TABLESPACE;
  • validar banco de dados;

se o Oracle RMAN detectar quaisquer corrupções de bloco de dados, elas serão mostradas na visualização V$DATABASE_BLOCK_CORRUPTION.

DBVerify

DBVerify é um utilitário de linha de comando externo para validar bancos de dados e arquivos online e offline, incluindo backups. O exemplo abaixo demonstra o uso do comando dbv:

  • arquivo dbv = / u01 / oradata / ORACL / system01.dbf feedback = 10000 blocksize=8192

observe que você não pode usar o DBVerify para arquivos de controle Oracle ou refazer logs.

ANALYZE command

você pode usar o ANALYZE… VALIDATE STRUCTURE construction para verificar os blocos de dados em um objeto. Assim que a análise for concluída, verifique a tabela INVALID_ROWS para ver os dados corrompidos.

para criar primeiro a tabela INVALID_ROWS, execute o seguinte comando no SQL:

  • @$ORACLE_HOME / rdbms / admin / UTLVALID.SQL

em segundo lugar, valide a estrutura da tabela e do índice com o seguinte comando:

  • analise a tabela scott.EMP VALIDATE STRUCTURE CASCADE;

db_block_checking parâmetro

definindo o parâmetro DB_BLOCK_CHECKING para, você pode ter Oracle verificar blocos de banco de dados para auto-consistência. Observe que isso pode adicionar até 10% de sobrecarga ao servidor, portanto, use essa opção apenas se o desempenho não for de grande importância.

Block media recovery(BMR)

Block media recovery (BMR) permite recuperar um ou mais blocos de dados sem afetar o arquivo como um todo. Como resultado, você experimentará um tempo médio menor para reparar (MTTR) e desfrutará de maior disponibilidade, já que você só precisa colocar os blocos afetados offline.

esta tática é útil quando apenas um número limitado de blocos de dados foram corrompidos. Você pode executar o BMR somente no Oracle RMAN usando o comando BLOCKRECOVER.

DBMS_REPAIR

o pacote DBMS_REPAIR da Oracle pode detectar e reparar a corrupção. Para fazer isso, primeiro você precisa criar duas tabelas de administração. Essas tabelas conterão uma lista de blocos corrompidos e as teclas de índice apontando para esses blocos:

comece

DBMS_REPAIR.como baixar e instalar Minecraft 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.repair_table,

ação = > DBMS_REPAIR.como baixar e instalar Minecraft no minecraft 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.como baixar e instalar Minecraft 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.orphan_table,

ação = > DBMS_REPAIR.create_action,

tablespace => ‘UTILIZADORES’);

END;

O segundo passo é utilizar o CHECK_OBJECT procedimento para examinar a tabela de:

SET SERVEROUTPUT ON

DECLARE

v_num_corrupt INT;

BEGIN

v_num_corrupt := 0;

DBMS_REPAIR.check_object (

schema_name => ‘SCOTT’,

nomedoobjeto => ‘DEPARTAMENTO’,

repair_table_name => ‘REPAIR_TABLE’,

corrupt_count => v_num_corrupt);

DBMS_OUTPUT.put_line (“número corrompido:’ || TO_CHAR (v_num_corrupt));

END;

em seguida, use o FIX_CORRUPT_BLOCKS procedimento para marcar os blocos corrompidos:

SET SERVEROUTPUT ON

DECLARE

v_num_fix INT;

BEGIN

v_num_fix := 0;

DBMS_REPAIR.fix_corrupt_blocks (

schema_name => ‘SCOTT’,

nomedoobjeto => ‘DEPARTAMENTO’,

object_type => Dbms_Repair.table_object,

repair_table_name => ‘REPAIR_TABLE’,

fix_count => v_num_fix);

DBMS_OUTPUT.put_line (“numérico correcção:’ || TO_CHAR(v_num_fix));

END;

A próxima etapa é verificar órfão chaves, que são os principais entradas que apontam para um bloco de dados corrompido:

SET SERVEROUTPUT ON

DECLARE

v_num_orphans INT;

BEGIN

v_num_orphans := 0;

DBMS_REPAIR.dump_orphan_keys (

schema_name => ‘SCOTT’,

nomedoobjeto => ‘PK_DEPT’,

object_type => DBMS_REPAIR.index_object,

repair_table_name => ‘REPAIR_TABLE’,

orphan_table_name => ‘ORPHAN_KEY_TABLE’,

key_count => v_num_orphans);

DBMS_OUTPUT.put_line(‘Contagem de chaves órfãs:’ || TO_CHAR(v_num_orphans));

END;

se houver 1 ou mais chaves órfãs, você precisará reconstruir o índice do banco de dados com o procedimento REBUILD_FREELISTS:

BEGIN

DBMS_REPAIR.rebuild_freelists (

schema_name => ‘SCOTT’,

nomedoobjeto => ‘DEPARTAMENTO’,

object_type => DBMS_REPAIR.table_object);

END;

Finalmente, use o SKIP_CORRUPT_BLOCKS procedimento para garantir que os corruptos blocos são ignorados durante as consultas:

BEGIN

DBMS_REPAIR.skip_corrupt_blocks (

schema_name => ‘SCOTT’,

nomedoobjeto => ‘DEPARTAMENTO’,

object_type => DBMS_REPAIR.table_object,

flags = > DBMS_REPAIR.skip_flag);

fim;

conclusão

embora a corrupção do bloco de dados seja um fato lamentável da vida, a Oracle tem um conjunto maduro e abrangente de ferramentas para proteger e recuperar seus dados corporativos. O uso de software como Oracle Data Guard e Oracle RMAN, além de realizar verificações regulares de corrupção, ajudará você a neutralizar o problema da corrupção de bloco de dados.

Deixe uma resposta

O seu endereço de email não será publicado.