原博文:

http://blog.chinaunix.net/uid-77311-id-3051382.html

使用Dbms_Repair跳过坏块

步骤1:表tb_test中有坏块(模拟坏块同方法1)

SQL> select count(1) from hxl.tb_test;

select count(1) from hxl.tb_test

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 5, block # 12)

ORA-01110: data file 5: '/u01/app/oracle/oradata/oracl/hxl01.dbf'

步骤2:创建 REPAIR_TABLE 表Declare

Begin

-- create repair table

Dbms_Repair.Admin_Tables(Table_Name => 'REPAIR_TABLE',

Table_Type => Dbms_Repair.Repair_Table,

Action     => Dbms_Repair.Create_Action,

Tablespace => 'SYSTEM');

End;

步骤3:创建 ORPHAN_KEY_TABLEDeclare

Begin

-- Create orphan key table

Dbms_Repair.Admin_Tables(Table_Type => Dbms_Repair.Orphan_Table,

Action     => Dbms_Repair.Create_Action,

Tablespace => 'SYSTEM');

End;

步骤4:找出坏块执行过程Check_Object后会将关于损坏和修补的指导信息装入Repair Table.

Declare

Rpr_Count Int;

Begin

Rpr_Count := 0;

Dbms_Repair.Check_Object(Schema_Name       => 'HXL',

Object_Name       => 'TB_TEST',

Repair_Table_Name => 'REPAIR_TABLE',

Corrupt_Count     => Rpr_Count);

Dbms_Output.Put_Line('repair count: ' || To_Char(Rpr_Count));

End;

该过程执行完成后,坏块的信息会加载到repair_table表中.SQL> select object_id,tablespace_id,relative_file_id,block_id from repair_table;

OBJECT_ID TABLESPACE_ID RELATIVE_FILE_ID   BLOCK_ID

---------- ------------- ---------------- ----------

51663             6                5         12

步骤5:修正坏块FIX_CORRUPT_BLOCKS procedure用来根据repair table中的信息修正指定objects中的坏块.

当这个块被标识为坏了以后,做全表扫描将引起ORA-1578.

Declare

Fix_Count Int;

Begin

Fix_Count := 0;

Dbms_Repair.Fix_Corrupt_Blocks(Schema_Name       => 'HXL',

Object_Name       => 'TB_TEST',

Object_Type       => Dbms_Repair.Table_Object,

Repair_Table_Name => 'REPAIR_TABLE',

Fix_Count         => Fix_Count);

Dbms_Output.Put_Line('fix count: ' || To_Char(Fix_Count));

End;

步骤6:找出坏块中记录的index entries(因为该测试表TB_TEST没有任何索引,该步骤跳过)

-- DUMP_ORPHAN_KEYS将会显示指向数据坏块中记录的index entries

Declare

Key_Count Int;

Begin

Key_Count := 0;

Dbms_Repair.Dump_Orphan_Keys(Schema_Name       => 'HXL',

Object_Name       => 'TB_A_PK',

Object_Type       => Dbms_Repair.Index_Object,

Repair_Table_Name => 'REPAIR_TABLE',

Orphan_Table_Name => 'ORPHAN_KEY_TABLE',

Key_Count         => Key_Count);

Dbms_Output.Put_Line('orphan key count: ' || To_Char(Key_Count));

End;

步骤7:跳过坏块-- 使用DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块

Declare

Begin

Dbms_Repair.Skip_Corrupt_Blocks(Schema_Name => 'HXL',

Object_Name => 'TB_TEST',

Object_Type => Dbms_Repair.Table_Object,

Flags       => Dbms_Repair.Skip_Flag);

End;

过程执行完成后,可以全扫描该表.SQL> select count(1) from hxl.tb_test;

COUNT(1)

----------

1568

备注:Dbms_Repair包只能标记坏块,但不能真正修复坏块.

oracle 11g跳过坏块,oracle 使用Dbms_Repair跳过坏块相关推荐

  1. centos 6.5 安装 oracle 11g,安装Centos6.5 安装Oracle 11g详细过程

    CentOS6.5安装oracle 11G数据库详细过程安装环境 1台l inux虚拟机 CentOS6.564位系统,内存4G,CPU 2核磁盘50G Oracle软件版本l inux.x64 ...

  2. ubuntu 14.04 安装oracle 11g,ubuntu 14.04 安装 oracle 11g

    参考:http://www.linuxidc.com/Linux/2015-03/115264.htm (1)Oracle要求swap最少为3.69G (2)apt-get install rpm l ...

  3. 玩转oracle 11g(1):Oracle 11g的安装

    由于工作需要,本人现在要对oracle 11g做一段攻坚战,先从安装开始 基本是傻瓜程序,网上也有大量教程 1 安装数据库软件 安装前准备工作 a.必须使用超级用户安装(adminstrator) b ...

  4. oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案

    参考文档: Linux环境下11.2.0.3 rac的快速卸载脚本 在Oracle 11.1和Oracle 10.1,10.2上,都是官方提供手工清理RAC环境的方法的(比如环境有问题,或者RAC安装 ...

  5. oracle 11g第二版课后答案,oracle 11g(钱慎一)课后习题答案

    oracle 11g数据库基础与应用教程(钱慎一)含1-8章课后习题答案 一.选择题 1. 若关系的某一属性组的值能唯一地标识一个元组,我们称之为( B ). A.主码 B.候选码 C.外码 D.联系 ...

  6. oracle 11g r2(64bit) for windows7,Oracle 11g R2 for Win7旗舰版(64位)的安装步骤

    1.下载Oracle 11g R2 for Windows的版本 下载地址:[url]http://www.oracle.com/technetwork/database/enterprise-edi ...

  7. Linux下Oracle 11g安装(3)—— Oracle安装篇

    文章目录 Oracle安装说明 Oracle安装 1.启动安装程序 2.选择安装选项 3.选择数据库类型 4.选择安装版本 5.选择安装目录 6.指定OraInventory目录 7.系统环境检测 8 ...

  8. oracle 11g proc/c...,Windows下Oracle 11g的下载与安装

    一.Oracle下载 二.Oracle安装 1.安装准备 Oracle的安装包下载以后是两个压缩包,同时选中两个压缩包右击进行解压 2.解压完成如下图所示 3.双击 setup.exe 文件进行安装, ...

  9. oracle 11g 逻辑备库,通过Oracle 11g 逻辑standby实现BI的需求

    逻辑standby用的很少,特别是在11g,物理standby也可以只读打开并实时应用,物理standby也可以做滚动升级.不过,最近有一个用户需求,要建一个报表系统数据库,想到可以试试逻辑stand ...

  10. oracle 11g dul,dul 10支持oracle 11g r2

    以前一直以为dul对应的版本只能恢复最高的数据库版本一致,今天测试发现dul 10可以恢复11g最新版的数据库. 模拟环境 SQL> select * from v$version; BANNE ...

最新文章

  1. 深入地下,实地探访!不用人挖煤的智能煤矿长什么样?
  2. SonarQube6.2源码解析(二)
  3. [模板]平面最近点对
  4. 终于有人把监督学习讲明白了
  5. cxf调用接口的几种方式_Java调用CXF WebService接口的两种方式实例
  6. L2C中CtempGen层语义保持证明中环境匹配的定义
  7. Flink 上传的Jar包去哪里了
  8. 直指Adobe的龌龊行径
  9. list 删除_算法面试题:一个List,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点!...
  10. 四川传媒学院计算机应用技术分数,四川传媒学院历年各专业录取文化最低控制分数线一览表...
  11. FileZilla Client中文乱码
  12. 由于找不到MSVCR100.dll,无法继续执行代码解决方法
  13. Messenger:使用消息的跨进程通信 (Message.replyTo()的使用)
  14. key mysql_调整MySQL中的key_reads
  15. (11)企业合并长期股权投资
  16. 简单三步操作实现任意用户连接云服务器中的MYSQL数据库
  17. 37岁京东程序员“被猝死”,当事人辟谣:已报警
  18. Flutter返回页面时刷新页面
  19. 共享自习室无人自习室源码
  20. Python字典操作大全

热门文章

  1. php怎么实现点卡充值,利用自动发卡程序的点卡充值传奇脚本
  2. flutter listview 滚动到指定位置_Flutter 布局原理及实战
  3. python当前时间怎么弄_python获取当前时间
  4. php如何新建xml文件,PHP中的生成XML文件的4种方法分享
  5. Latex 加空格的方法
  6. sed教程入门与实例练习(一)
  7. C# Collection was modified;enumeration operation may not execute
  8. 初始化bean(二)—— 缓存部分
  9. 《程序设计与数据结构》第八周学习总结
  10. 共享马扎的火爆,原来是一场营销!