손상된 블록 건너뛰기
인덱스 및 테이블 스캔 중에 손상된 블록을 건너뛰려면 rdsadmin.rdsadmin_dbms_repair
패키지를 사용하세요.
다음 절차에서는 sys.dbms_repair.admin_table
절차의 기능을 래핑하고 파라미터를 받아들이지 않습니다.
-
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
다음 절차에서는 Oracle 데이터베이스에 대해 DBMS_REPAIR
패키지에서 이에 상응하는 것으로 동일한 파라미터를 받아들입니다.
-
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
데이터베이스 손상 처리에 대한 자세한 내용은 Oracle 설명서의 DBMS_REPAIR
예 손상된 블록에 응답
이 예제에서는 손상된 블록에 응답하기 위한 기본 워크플로우를 보여줍니다. 단계는 블록 손상의 위치와 특성에 따라 달라집니다.
중요
손상된 블록을 복구하기 전에 DBMS_REPAIRE
인덱스 및 테이블 스캔 중에 손상된 블록을 건너뛰려면
-
다음 프로시저를 실행하여 복구 테이블을 생성합니다(아직 없는 경우).
EXEC rdsadmin.rdsadmin_dbms_repair.create_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table;
-
다음 절차를 실행하여 기존 레코드를 확인하고 필요에 따라 제거하세요.
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;
-
다음 절차를 실행하여 손상된 블록을 확인하세요.
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';
-
skip_corrupt_blocks
프로시저를 사용하여 영향을 받은 테이블에 대해 손상 건너뛰기를 활성화 또는 비활성화하세요. 상황에 따라 새 테이블에 데이터를 추출한 다음 손상된 블록이 포함된 테이블을 삭제해야 할 수도 있습니다.다음 절차를 실행하여 영향을 받은 테이블에 대해 손상 건너뛰기를 활성화하세요.
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';
다음 절차를 실행하여 손상 건너뛰기를 비활성화하세요.
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';
-
모든 복구 작업을 완료했으면 다음 프로시저를 실행하여 복구 테이블을 삭제합니다.
EXEC rdsadmin.rdsadmin_dbms_repair.drop_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table;