Oracle DBMS_REPAIR包修复损坏数据块
日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]-
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
已连接。
SQL> SELECT SUBSTR(ROWID, 10, 6), ID, NAME FROM TEST WHERE ID = 123;
SUBSTR(ROWID ID NAME
------------ ---------- ------------------------------
AAAAAG 123 ALL_REPCONFLICT
如何在数据文件中找到TEST表的数据呢?可以通过ROWID来定位的记录在数据文件中的位置。任意选择一条记录(如上面ID = 123),取得它的ROWID,我们知道,ROWID中10~15位表示这条记录所在的BLOCK是数据文件的第几个BLOCK。
- [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
-
- Oracle DBMS_REPAIR包修复损坏数据块 相关文章:
- ·Oracle DBMS_REPAIR包修复损坏数据块
- Oracle DBMS_REPAIR包修复损坏数据块 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:[Oracle]手工转移数据库Step By Step
精品推荐
热点TOP10
- ·Oracle用户权限的管理
- ·解读Oracle 9201的控制文件
- ·利用Oracle9i XML DB 来解决复杂编码问题
- ·Oracle数据操作和控制语言问题详解
- ·Oracle数据库密码文件的使用和维护
- ·如何在Oracle里用存储过程定期分割表
- ·杜绝安全隐患 容易忽视Oracle安全问题
- ·Oracle SQL 内置函数的使用方法及结果
- ·用Oracle的解析函数发现序列间隙
- ·Oracle初学者入门指南-什么是DUL?
- ·深刻理解 Oracle 数据库的启动和关闭
- ·Oracle DBA数据库结构试题精选
- ·SQL Server与Oracle链接服务器应用
- ·Oracle利用UTL_MAIL发送电子邮件
- ·[Oracle]探讨数据库的数据导入方法
- ·[Oracle]进程结构和内存结构的实例
- ·[Oracle]Redo log日志组故障分析
- ·[Oracle]用函数格式化EXPLAIN PLAN
- ·[Oracle]手工转移数据库Step By Step
- ·Oracle DBMS_REPAIR包修复损坏数据块
