题目部分
在Oracle中,如何确定坏块的对象名?
♣
答案部分
根据绝对文件号和块号确定数据块对象的SQL语句如下:
SELECT TABLESPACE_NAME,
SEGMENT_TYPE,
OWNER,
SEGMENT_NAME,
PARTITION_NAME
FROM DBA_EXTENTS
WHERE FILE_ID = &FILE_ID
AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1
;
如下的SQL可以确定段占用的数据块:
SELECT DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT_ID,
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE_ID,
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_ID,
COUNT(1) COUNTS
FROM LHR.T_BC_LHR D
GROUP BY DBMS_ROWID.ROWID_OBJECT(ROWID),
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID),
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
ORDER BY DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);
关于坏块需要注意以下几点:
① 对于受损的数据块,仅仅坏块上的数据无法被查询或读取,其余正常块的数据依旧可以使用。
② 对于受损的表对象进行聚合等相关运算时会收到错误提示,因为坏块上的数据无法被统计。
③ 可以基于RMAN的备份文件实现块介质恢复,其数据文件无需OFFLINE,开销最小,影响最小。
④ 对于多个数据块的损坏,先执行BACKUP VALIDATE校验数据库或相应的数据文件以便标记受损的坏块后,填充V$DATABASE_BLOCK_CORRUPTION后再使用命令“BLOCKRECOVER CORRUPTION LIST;”一次性恢复所有的坏块。
⑤ 在缺省情况下,存在坏块的数据文件无法成功备份,也会导致自动备份脚本失败。
& 说明:
有关数据块的恢复的内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139709/
有关NOLOGGING引起的坏块的内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2152783/、http://blog.itpub.net/26736162/viewspace-2158170/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步