利用RMAN检测数据库坏块的脚本
2013-12-27 00:52
169 查看
虽然我们也可以通过dbv(db file verify)工具做到对单个数据文件的坏块检测,但是直接使用RMAN的”backup validate check logical database;”结合V$DATABASE_BLOCK_CORRUPTION视图要方便地多。
Script:
Script:
1) $ rman target / nocatalog 2) RMAN> run { allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; allocate channel d4 type disk; backup validate check logical database; } 3) select * from V$DATABASE_BLOCK_CORRUPTION ; REM www.oracledatabase12g.com & www.askmaclean.com 4) If V$DATABASE_BLOCK_CORRUPTION contains rows please run this query to find the objects that contains the corrupted blocks: SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#, greatest(e.block_id, c.block#) corr_start_block#, least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) corr_end_block#, least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) - greatest(e.block_id, c.block#) + 1 blocks_corrupted, null description FROM dba_extents e, v$database_block_corruption c WHERE e.file_id = c.file# AND e.block_id <= c.block# + c.blocks - 1 AND e.block_id + e.blocks - 1 >= c.block# UNION SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#, header_block corr_start_block#, header_block corr_end_block#, 1 blocks_corrupted, 'Segment Header' description FROM dba_segments s, v$database_block_corruption c WHERE s.header_file = c.file# AND s.header_block between c.block# and c.block# + c.blocks - 1 UNION SELECT null owner, null segment_type, null segment_name, null partition_name, c.file#, greatest(f.block_id, c.block#) corr_start_block#, least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) corr_end_block#, least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) - greatest(f.block_id, c.block#) + 1 blocks_corrupted, 'Free Block' description FROM dba_free_space f, v$database_block_corruption c WHERE f.file_id = c.file# AND f.block_id <= c.block# + c.blocks - 1 AND f.block_id + f.blocks - 1 >= c.block# order by file#, corr_start_block#; SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = &fileid and &blockid between block_id AND block_id + blocks - 1;
相关文章推荐
- MySql避免全表扫描
- oracle常见的等待事件说明
- ubuntu安装mongodb实战
- oracle表空间表分区详解及oracle表分区查询使用方法
- mysql使用教程之分区表的使用方法(删除分区表)
- mysql开启远程连接(mysql开启远程访问)
- mysql动态游标学习(mysql存储过程游标)
- mysql
- mysql 优化
- MongoDB学习系列6: mongodump
- MongoDB学习系列7: mongorestore
- MongoDB学习系列8:连接mongodb进行查询处理
- sql join 初步理解
- mysql的锁表问题
- Oracle优化Java字符串内部表示
- Mysql分页查询通用存储过程 - 阿影的黄金时代 - 博客频道 - CSDN.NET
- 关系型数据库
- mysql存储过程读书笔记2(control and conditional logic)
- 关于重建SQL SERVER 2008R2 和 单用户恢复master 和恢复QAS
- 卸载安装失败的sqlserver2008 R2