视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle坏块修复
2020-11-09 08:27:48 责编:小采
文档


欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 6.3 BBED 工具 七。如何利用dbms_repair来标记和跳过坏块 但是当数据量很大,或7*24的系统时,我们使用dbms_repair来处理。dbms_repair是从oracle8i开始提供的。 准备工作: create tablespace bloc

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

  6.3 BBED 工具

  七。如何利用dbms_repair来标记和跳过坏块

  但是当数据量很大,或7*24的系统时,我们使用dbms_repair来处理。dbms_repair是从oracle8i开始提供的。

  准备工作:

  create tablespace block datafile '/u01/block.dbf' size 5M;

  create table DMM tablespace block as select * from all_tables;

  commit;

  CREATE INDEX indx_dmm on DMM(TABLE_NAME);

  select count(*) from DMM;

  COUNT(*)

  126

  7.1.创建管理表:

  SQL> conn sys/admin as sysdba;

  已连接。

  SQL> exec DBMS_REPAIR.ADMIN_TABLES('REPAIR_TABLE',1,1,'USERS');

  PL/SQL procedure successfully completed

  SQL> exec DBMS_REPAIR.ADMIN_TABLES('ORPHAN_TABLE',2,1,'USERS');

  PL/SQL procedure successfully completed

  7.2.检查坏块:dbms_repair.check_object

  /* Formatted on 2009-12-16 23:41:32 (QP5 v5.115.810.9015) */

  Set serveroutput on;

  DECLARE

  cc NUMBER;

  BEGIN

  DBMS_REPAIR.check_object (schema_name => 'SYS', -- 注意此处是用户名

  object_name => 'DMM',

  corrupt_count => cc);

  DBMS_OUTPUT.put_line ( TO_CHAR (cc));

  END;

  正常情况下输入为0.

  如果有坏块,可以在创建的REPAIR_TABLE中查看块损坏信息:

  /* Formatted on 2009-12-17 13:18:19 (QP5 v5.115.810.9015) */

  SELECT object_name,

  relative_file_id,

  block_id,

  marked_corrupt,

  corrupt_description,

  repair_description,

  CHECK_TIMESTAMP

  FROM repair_table;

  注意:在8i下,check_object只会检查坏块,MARKED_CORRUPT为false,故需要执行第三步:定位坏块,fix_corrupt_blocks定位,修改MARKED_CORRUPT为true,同时更新CHECK_TIMESTAMP.9i以后经过check_object,MARKED_CORRUPT的值已经标识为TRUE了。所以可以直接进行第四步了。

  7.3.定位坏块:dbms_repair.fix_corrupt_blocks

  只有将坏块信息写入定义的REPAIR_TABLE后,才能定位坏块。

  /* Formatted on 2009-12-17 13:29:01 (QP5 v5.115.810.9015) */

  DECLARE

  cc NUMBER;

  BEGIN

  DBMS_REPAIR.fix_corrupt_blocks (schema_name => 'SYS',

  object_name => 'DMM',

  fix_count => cc);

  DBMS_OUTPUT.put_line (a => TO_CHAR (cc));

  END;

  7.4.跳过坏块:

  我们前面虽然定位了坏块,但是,如果我们访问table:

  SQL> select count(*) from SYS.DMM;

  ORA-01578: ORACLE 数据块损坏(文件号14,块号154)

  ORA-01110: 数据文件 14: 'D: \BLOCK.DBF'

  还是会得到错误信息。这里需要用skip_corrupt_blocks来跳过坏块:

  /* Formatted on 2009-12-17 13:30:17 (QP5 v5.115.810.9015) */

  exec dbms_repair.skip_corrupt_blocks(schema_name => 'SYS',object_name => 'DMM',flags => 1);

  SQL> select count(*) from SYS.DMM;

  COUNT(*)

  12850

  丢失了126-12850=46行数据。

  7.5.处理index上的无效键值;dump_orphan_keys

  /* Formatted on 2009-12-17 13:34:55 (QP5 v5.115.810.9015) */

  DECLARE

  cc NUMBER;

  BEGIN

  DBMS_REPAIR.dump_orphan_keys (schema_name => 'SYS',

  object_name => 'INDX_DMM',

  object_type => 2,

  repair_table_name => 'REPAIR_TABLE',

  orphan_table_name => 'ORPHAN_TABLE',

  key_count => CC);

  END;

[1] [2] [3] [4]

下载本文
显示全文
专题