oracle rman 检查坏块,Oracle中使用RMAN来检验坏块
RMAN即recovery manager可以通過在執行的備份任務中,僅僅驗證數據文件中的數據塊而不生成實際的備份,這樣做的目的是純粹為了了解數據文件中是否有壞塊。
RMAN在這個環境中:
驗證數據文件是否存在
數據文件位于正確的存放位置
在RMAN嘗試檢驗這些數據文件時,將邏輯或物理訛誤的塊找出來并臨時記錄到V$DATABASE_BLOCK_CORRUPTION視圖中
具體的使用為
檢驗整個數據庫
backup check logical validate database;
檢驗個別數據文件
backup check logical validate datafile 1;
檢驗多個指定數據文件
backup check logical validate datafile 1, 2;
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;
總結
以上是生活随笔為你收集整理的oracle rman 检查坏块,Oracle中使用RMAN来检验坏块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言十六进制字符串转整数,C语言-提取
- 下一篇: java的编辑框丢失焦点_java –