[Oracle]DBMS_REPAIR包修复损坏数据块(1)

文章作者 100test 发表时间 2007:03:14 13:53:48
来源 100Test.Com百考试题网


1 、DBMS_REPAIR包的使用

Oracle提供的DBMS_REPAIR包可以发现、标识并修改数据文件中的坏块。

DBMS_REPAIR包的工作原理比较简单——将检查到的坏块标注出来,使随后的dml操作跳过该块。同时,DBMS_REPAIR包还提供了几个过程,可以用来保存索引的键值(这些键值指向被标注为坏块的block)的过程,以及修复freelists和segment bitmap的过程。

DBMS_REPAIR包不但可以检测出坏块,根据表被索引的情况,还可以用来在一定程度上恢复坏块中的数据。

需要注意,DBMS_REPAIR包没有进行授权,默认情况下,只有sys用户可以执行。

下面通过一个完整的例子来说明DBMS_REPAIR包的使用。

第一步:构造测试环境

首先建立一个测试用表空间,由于需要用UltraEdit打开数据文件修改部分内容来模拟错误,因此数据文件要建的小一些。

SQL> CREATE TABLESPACE TEST DATAFILE E:\ORACLE\ORADATA\TEST\TEST.DBF SIZE 1M

2 EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT MANUAL.

表空间已创建。

SQL> CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(30)) TABLESPACE TEST.

表已创建。

SQL> INSERT INTO TEST SELECT ROWNUM, OBJECT_NAME FROM DBA_OBJECTS.

已创建6232行。

SQL> COMMIT.

提交完成。

SQL> CREATE INDEX IND_TEST_ID ON TEST (ID).

索引已创建。

SQL> CREATE INDEX IND_TEST_NAME ON TEST (NAME).

索引已创建。

为了确保数据库已经把刚才插入的数据写到数据文件中,现在重起数据库。

SQL> CONN /@TEST AS SYSDBA

已连接。

SQL> SHUTDOWN

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> STARTUP

ORACLE 例程已经启动。

Total System Global Area 89201304 bytes

Fixed Size 453272 bytes

Variable Size 62914560 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

第二步:模拟错误的产生

用UltraEdit打开数据文件,只要修改了数据文件中任意的一个位置,都会造成数据文件错误。但我们测试需要将错误发生位置定位在TEST表中。

SQL> CONN YANGTK/YANGTK@TEST


相关文章


[Oracle]DBMS_REPAIR包修复损坏数据块(3)
[Oracle]DBMS_REPAIR包修复损坏数据块(4)
使用新的list分割方法提高灵活性
Oracle9i新特性研究系列之七
[Oracle]DBMS_REPAIR包修复损坏数据块(1)
[Oracle]DBMS_REPAIR包修复损坏数据块(2)
监控和跟踪索引使用情况
在9i里对基于函数的索引进行仅索引扫描
Oracle10g中新的SQLoptimizerhints
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛