ITPub博客

首页 > 数据库 > Oracle > DBMS_REPAIR修复坏块脚本

DBMS_REPAIR修复坏块脚本

原创 Oracle 作者:oracle11111 时间:2024-06-24 14:06:44 0 删除 编辑

介绍

  oracle的坏块修复主要有rman和DBMS_REPAIR包两种方式(不考虑bbed),现在我们就DBMS_REPAIR脚本方式修复进行测试。


DBMS_REPAIR修复脚本

    
    REM Create the repair table in a given tablespace:
    
    
    
    BEGIN  DBMS_REPAIR.ADMIN_TABLES (  TABLE_NAME => 'REPAIR_TABLE',  TABLE_TYPE => dbms_repair.repair_table,  ACTION => dbms_repair.create_action,  TABLESPACE => '&tablespace_name'); END; /
    REM Identify corrupted blocks for schema.object (it also can be done at partition level with parameter PARTITION_NAME):
    set serveroutput on DECLARE num_corrupt INT; BEGIN  num_corrupt := 0;  DBMS_REPAIR.CHECK_OBJECT (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME => '&object_name',  REPAIR_TABLE_NAME => 'REPAIR_TABLE',  corrupt_count => num_corrupt);  DBMS_OUTPUT.PUT_LINE( 'number corrupt: ' || TO_CHAR (num_corrupt)); END; /
    REM Optionally display any corrupted block identified by check_object:
    select BLOCK_ID, CORRUPT_TYPE, CORRUPT_DESCRIPTION from REPAIR_TABLE;
    REM Mark the identified blocks as corrupted ( Soft Corrupt - reference Note 1496934.1 ) DECLARE num_fix INT; BEGIN  num_fix := 0;  DBMS_REPAIR.FIX_CORRUPT_BLOCKS (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME=> '&object_name',  OBJECT_TYPE => dbms_repair.table_object,  REPAIR_TABLE_NAME => 'REPAIR_TABLE',  FIX_COUNT=> num_fix);  DBMS_OUTPUT.PUT_LINE( 'num fix: ' || to_char(num_fix)); END; /
    REM Allow future DML statements to skip the corrupted blocks:
    BEGIN  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME => '&object_name',  OBJECT_TYPE => dbms_repair.table_object,  FLAGS => dbms_repair.SKIP_FLAG); END; /

       

    测试步骤:

    创建测试环境:

      
      SQL> create tablespace tt  datafile   size 
      10M  autoextend 
      on;
      
      
      
      SQL> create user tt identified by tt default tablespace tt;
      User created.
      SQL> grant dba to tt;
      Grant succeeded.
      SQL> conn tt/tt Connected. SQL> create table testtest as select * from dba_objects;
      Table created.
      SQL> create index i_test on testtest( object_id);
      Index created.
      SQL> col SEGMENT_NAME format a15 SQL>   select segment_name , header_file , header_block,blocks from dba_segments where segment_name = 'TESTTEST';
      SEGMENT_NAME  HEADER_FILE HEADER_BLOCK     BLOCKS --------------- ----------- ------------ ---------- TESTTEST     201       130       1536
      模拟坏块:



      图片


        [oracle@test ~]$ dd if=/dev/zero of=/u02/app/oracle/oradata/TEST/datafile/o1_mf_tt_m7kvq4fy_.dbf bs=8192 conv=notrunc seek=266 count=1u02/app/oracle/oradata/TEST/datafile/o1_mf_tt_m7kvq4fy_.dbf bs=8192 conv=notrunc seek=650 count=11+0 records in1+0 records out8192 bytes (8.2 kB) copied, 0.000326904 s, 25.1 MB/s[oracle@test ~]$ dd if=/dev/zero of=/u02/app/oracle/oradata/TEST/datafile/o1_mf_tt_m7kvq4fy_.dbf bs=8192 conv=notrunc seek=520 count=11+0 records in1+0 records out8192 bytes (8.2 kB) copied, 0.000262302 s, 31.2 MB/s[oracle@test ~]$ dd if=/dev/zero of=/u02/app/oracle/oradata/TEST/datafile/o1_mf_tt_m7kvq4fy_.dbf bs=8192 conv=notrunc seek=650 count=11+0 records in1+0 records out8192 bytes (8.2 kB) copied, 0.000314903 s, 26.0 MB/s
        查看测试数据:


          
          
          select * 
          from tt.testtest;
          
          
          


          ERROR:
          ORA-01578: ORACLE data block corrupted (file # 201, block # 266)
          ORA-01110: data file 201:
          '/u02/app/oracle/oradata/TEST/datafile/o1_mf_tt_m7kvq4fy_.dbf'


          通过脚本进行修复


            
            SQL> 
            @repari.sh
            
            
            
            Enter value for tablespace_name: TT
            old   6:   TABLESPACE => '&tablespace_name');
            new   6:   TABLESPACE => 'TT');


            PL/SQL procedure successfully completed.


            Enter value for schema_name: TT
            old   5:   SCHEMA_NAME => '&schema_name',
            new   5:   SCHEMA_NAME => 'TT',
            Enter value for object_name: TESTTEST
            old   6:   OBJECT_NAME => '&object_name',
            new   6:   OBJECT_NAME => 'TESTTEST',
            number corrupt: 3


            PL/SQL procedure successfully completed.




             BLOCK_ID CORRUPT_TYPE
            ---------- ------------
            CORRUPT_DESCRIPTION
            --------------------------------------------------------------------------------
                  266     6148




                  520     6148




                  650     6148






            Enter value for schema_name: TT
            old   5:   SCHEMA_NAME => '&schema_name',
            new   5:   SCHEMA_NAME => 'TT',
            Enter value for object_name: TESTTEST
            old   6:   OBJECT_NAME=> '&object_name',
            new   6:   OBJECT_NAME=> 'TESTTEST',
            num fix: 0


            PL/SQL procedure successfully completed.


            Enter value for schema_name: TT
            old   3:   SCHEMA_NAME => '&schema_name',
            new   3:   SCHEMA_NAME => 'TT',
            Enter value for object_name: TESTTEST
            old   4:   OBJECT_NAME => '&object_name',
            new   4:   OBJECT_NAME => 'TESTTEST',


            PL/SQL procedure successfully completed.
            查询修复后的数据




            图片

            select  * from 

            图片


              
              SQL> 
              
              select 
              count(
              *) 
              from tt.TESTTEST;
              
              
              
               COUNT(*) ----------     73125


              参考文档:

              DBMS_REPAIR SCRIPT (Doc ID 556733.1)

                
                
                
                ———————————————————————————— 微信公众号:天高弋猎 墨天轮:https: //https://www.modb.pro/u/3738 ITPUB:https: //blog.itpub.net/69924215/


                来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3019893/ ,如需转载,请注明出处,否则将追究法律责任。

                请登录后发表评论 登录
                全部评论

                注册时间:2019-05-19

                • 博文量
                  81
                • 访问量
                  90380