Ignorar blocos corrompidos - Amazon Relational Database Service

Ignorar blocos corrompidos

Para ignorar blocos corrompidos durante as verificações de índices e tabelas, use o pacote rdsadmin.rdsadmin_dbms_repair.

Os procedimentos a seguir encapsulam a funcionalidade do procedimento sys.dbms_repair.admin_table e não usam parâmetros:

  • rdsadmin.rdsadmin_dbms_repair.create_repair_table

  • rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table

  • rdsadmin.rdsadmin_dbms_repair.drop_repair_table

  • rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table

  • rdsadmin.rdsadmin_dbms_repair.purge_repair_table

  • rdsadmin.rdsadmin_dbms_repair.purge_orphan_keys_table

Os seguintes procedimentos usam o mesmo parâmetro que seus equivalentes no pacote DBMS_REPAIR para bancos de dados Oracle:

  • rdsadmin.rdsadmin_dbms_repair.check_object

  • rdsadmin.rdsadmin_dbms_repair.dump_orphan_keys

  • rdsadmin.rdsadmin_dbms_repair.fix_corrupt_blocks

  • rdsadmin.rdsadmin_dbms_repair.rebuild_freelists

  • rdsadmin.rdsadmin_dbms_repair.segment_fix_status

  • rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks

Para ter mais informações sobre como lidar com a corrupção de banco de dados, consulte DBMS_REPARE na documentação do Oracle.

exemplo Responder a blocos corrompidos

Este exemplo mostra o fluxo de trabalho básico para responder a blocos corrompidos. Suas etapas dependerão do local e da natureza da corrupção do bloco.

Importante

Antes de tentar reparar blocos corrompidos, revise atentamente a documentação DBMS_REPARE.

Como ignorar blocos corrompidos durante as verificações de índices e tabelas
  1. Execute os procedimentos a seguir para criar tabelas de reparo se elas ainda não existirem.

    EXEC rdsadmin.rdsadmin_dbms_repair.create_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table;
  2. Execute os procedimentos a seguir para verificar registros existentes e depurá-los, caso seja apropriado.

    SELECT COUNT(*) FROM SYS.REPAIR_TABLE; SELECT COUNT(*) FROM SYS.ORPHAN_KEY_TABLE; SELECT COUNT(*) FROM SYS.DBA_REPAIR_TABLE; SELECT COUNT(*) FROM SYS.DBA_ORPHAN_KEY_TABLE; EXEC rdsadmin.rdsadmin_dbms_repair.purge_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.purge_orphan_keys_table;
  3. Execute o procedimento a seguir para verificar blocos corrompidos.

    SET SERVEROUTPUT ON DECLARE v_num_corrupt INT; BEGIN v_num_corrupt := 0; rdsadmin.rdsadmin_dbms_repair.check_object ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', corrupt_count => v_num_corrupt ); dbms_output.put_line('number corrupt: '||to_char(v_num_corrupt)); END; / COL CORRUPT_DESCRIPTION FORMAT a30 COL REPAIR_DESCRIPTION FORMAT a30 SELECT OBJECT_NAME, BLOCK_ID, CORRUPT_TYPE, MARKED_CORRUPT, CORRUPT_DESCRIPTION, REPAIR_DESCRIPTION FROM SYS.REPAIR_TABLE; SELECT SKIP_CORRUPT FROM DBA_TABLES WHERE OWNER = '&corruptionOwner' AND TABLE_NAME = '&corruptionTable';
  4. Use o procedimento skip_corrupt_blocks para habilitar ou desabilitar a ação de ignorar as tabelas afetadas. Dependendo da situação, também pode ser necessário extrair dados para uma nova tabela e, depois, descartar a tabela que contém o bloco corrompido.

    Execute o procedimento a seguir para permitir que sejam ignoradas as tabelas corrompidas.

    begin rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', object_type => rdsadmin.rdsadmin_dbms_repair.table_object, flags => rdsadmin.rdsadmin_dbms_repair.skip_flag); end; / select skip_corrupt from dba_tables where owner = '&corruptionOwner' and table_name = '&corruptionTable';

    Execute o procedimento a seguir para não permitir que sejam ignoradas as tabelas corrompidas.

    begin rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', object_type => rdsadmin.rdsadmin_dbms_repair.table_object, flags => rdsadmin.rdsadmin_dbms_repair.noskip_flag); end; / select skip_corrupt from dba_tables where owner = '&corruptionOwner' and table_name = '&corruptionTable';
  5. Quando tiver concluído todos os trabalhos de reparação, execute os procedimentos a seguir para descartar as tabelas reparadas.

    EXEC rdsadmin.rdsadmin_dbms_repair.drop_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table;