首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 入门基础 >> 正文

Oracle数据库应用程序中RAID的级别

六、使用DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块

SKIP_CORRUPT_BLOCKS用来决定在对指定object的index和table做搜索时是否跳过坏块。

如果index和table不同步,那么一个‘SET TRANSACTION READ ONLY'的transaction可能会出现不一致的情况,例如一个查询仅仅指向index,而它的子查询却同时指向index和table。 如果table的block已经被标识为坏了,那么这两个查询将会返回不同的结果。

建议:如果SKIP_CORRUPT_BLOCKS被enable,那么必须重建orphan_key_table中确定的所有indexes(或所有与该object相关的indexes,如果在DUMP_ORPHAN_KEYS被忽略的情况下)。

SQL> @skipCorruptBlocks

SQL> declare

2 begin

3 dbms_repair.skip_corrupt_blocks (

4 schema_name => 'SYSTEM',

5 object_name => 'T1',

6 object_type => dbms_repair.table_object,

7 flags => dbms_repair.skip_flag);

8 end;

9 /

PL/SQL procedure successfully completed.

下列查询显示跳过坏块已经enable。

SQL> select table_name, skip_corrupt from dba_tables

2 where table_name = 'T1';

TABLE_NAME SKIP_COR

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

T1 ENABLED

坏块中的记录被跳过后,全表扫描不再显示错误。

SQL> select * from system.t1;

COL1 COL2

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

4 dddd

5 eeee

注意此时pk index还没有被修正。不能往t1 table中插入数据

SQL> insert into system.t1 values (1,'aaaa');

insert into system.t1 values (1,'aaaa')

*

SQL> select * from system.t1 where col1 = 1;

no rows selected

七、使用DBMS_REPAIR.REBUILD_FREELISTS重建freelists

REBUILD_FREELISTS重建指定object的freelists。

SQL> declare

2 begin

3 dbms_repair.rebuild_freelists (

4 schema_name => 'SYSTEM',

5 object_name => 'T1',

6 object_type => dbms_repair.table_object);

7 end;

8 /

PL/SQL procedure successfully completed.

八、重建Index

在orphan_key_table中确定的每一个index都必须重建,以保证查询结果的一致。

SQL> alter index system.t1_pk rebuild online;

Index altered.

重建index后,就能往t1 table中插入数据。

SQL> insert into system.t1 values (1, 'aaaa');

1 row created.

SQL> select * from system.t1;

COL1 COL2

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

4 dddd

5 eeee

1 aaaa

以上的insert语句只是提供一个简单的例子。如果我们真能知道丢失的数据内容,那当然是最好的。临时表(temp_t1)应该用来存放所有从坏块中抽取的记录。

到此时table T1已经可以被再用,但同时数据也有丢失。一般来说,在使用DBMS_REPAIR package之前,应认真考虑数据的丢失问题,因为从index segment和table dump中采集信息非常复杂,同时逻辑上的不一致也可能被引入。要记住:在DBMS_REPAIR package 初始版本中,“修补坏块”的功能仅仅是“将块标识为由软件引起的坏块”而已。

在进行上述操作前,必须先阅读〈Oracle8i Administrator's Guide〉中“Detecting and Repairing Data Block Corruption"章节,同时对风险进行评估。所有操作最好是在Oracle工程师的指导下进行。

上一页  [1] [2] [3] [4] [5] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航