【DB笔试面试219】在Oracle中,如果发现有坏块,那么如何检索其它未坏的数据?
在Oracle中,如果发现有坏块,那么如何检索其它未坏的数据?
A 答案如下所示:
首先需要找到坏块的ID(dbv工具可以实现),假设坏块ID为<BID>,假定文件编号为<FID>。运行下面的SQL语句查找段名:
SELECT SEGMENT_NAME,SEGMENT_TYPE,EXTENT_ID,BLOCK_ID, BLOCKS
FROM DBA_EXTENTS T
WHERE FILE_ID = <FID>
AND <BID> BETWEEN BLOCK_ID AND (BLOCK_ID + BLOCKS - 1);
找到坏块所属的段名称,若段是一个表,则最好建立一个临时表,存放好的数据。若段是索引,则删除它,再重建。
CREATE TABLE GOOD_TABLE AS
SELECT FROM BAD_TABLE WHERE ROWID NOT IN
(SELECT ROWID FROM BAD_TABLE WHERE SUBSTR(ROWID,10,6) = <BID>);
还可以使用诊断事件10231设置在全表扫描时跳过坏块,如下所示:
SQL> ALTER SYSTEM SET EVENTS '10231 trace name context forever,level 10';
然后创建一个临时表GOOD_TABLE,将原表中除坏块的数据都检索出来:
SQL>CREATE TABLE GOOD_TABLE AS SELECT * FROM BAD_TABLE;
最后关闭诊断事件:
SQL> ALTER SYSTEM SET EVENTS '10231 TRACE NAME CONTEXT OFF ';
事件10231的说明如下:
[oracle@rhel6lhr ~]$ oerr ora 10231
10231, 00000, "skip corrupted blocks on _table_scans_"
// *Action: such blocks are skipped in table scans, and listed in trace files
关于ROWID的结构,还可以参考DBMS_ROWID.ROWID_CREATE函数。
http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w |
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
- 【DB笔试面试223】在Oracle中,如果丢失一个数据文件而且没有备份,也没有归档日志,那么应该如何打开数据库?
- 【DB笔试面试356】在Oracle数据库中,丢失归档的情况下数据文件如何恢复?
- 【DB笔试面试842】在Oracle中,如何启动Oracle数据库的监听日志?
- 【DB笔试面试561】在Oracle中,如何预估即将创建索引的大小?
- 【DB笔试面试234】在Oracle中,如何有效的删除一个大表(即表的EXTENT数很多)?
- 【DB笔试面试613】在Oracle中,和子查询相关的查询转换有哪些?
- 【DB笔试面试444】Oracle中PL/SQL的流程控制语句包括哪些?
- 【DB笔试面试389】在Oracle中,什么是绑定变量窥探?
- 【DB笔试面试624】在Oracle中,Hash Join是不是有排序?Hash Join会在什么时候慢?
- 如何在dotConnect for Oracle中检索和修改数据
- [DB][OARCLE]Oracle中树形数据(父子项数据)检索的CONNECT BY PRIOR 递归算法
- 【DB笔试面试616】在Oracle中,和“消除”相关的查询转换有哪些?
- 【DB笔试面试109】在Oracle中,Which 。。。conventional path of SQL*Loader?()
- 【DB笔试面试692】在Oracle中,V$SYSSTAT中的CLASS列分别代表什么?
- 【DB笔试面试681】在Oracle中,什么是块清除(Block Cleanout)?
- 如何根据pageNo,pageSize,和index 算出如果pageSize是1的话在数据库中的pageNo(也就是说:算出数据在Grid中的行index所对应DB中的rowNumber )
- 【DB笔试面试610】在Oracle中,SPM的使用有哪些步骤?
- 【DB笔试面试66】在Oracle中,关于锁,下列描述不正确的是()
- 如果你的数据库文件只剩下数据文件没有日志文件时,如何附加 (摘自:http://www.cnblogs.com/yukaizhao/archive/2008/07/23/sp_attach_single_file_db.html)
- 【DB笔试面试611】在Oracle中,什么是结果集缓存?