Oracle 12c, xử lý sự cố file bị corrupt

Tham khảo:

http://www.dba-oracle.com/t_repair_corrupt_blocks.htm

https://oracle-base.com/articles/misc/detect-and-correct-corruption

Dealing with Oracle Database Block Corruption

https://jhdba.wordpress.com/2010/04/14/identifying-corrupt-blocks/

https://blog.dbi-services.com/rman-backup-is-failing-due-to-qcorrupt-blocksq/

 

Thường gặp lỗi này là do ổ đĩa bị lỗi

Oracle cung cấp view đê chúng ta kiểm tra

select * from v$database_block_corruption

Hoặc nếu ta biết chính xác file và block bị lỗi có thể chạy query sau để biết chính xác khối bị lỗi:

select 
   relative_fno, 
   owner, 
   segment_name, 
   segment_type
from 
   dba_extents
where 
   file_id = 6
and 
   437 between block_id and block_id + blocks – 1;

Lệnh này mapping luôn ra segment bị lỗi

SELECT DISTINCT owner, segment_name
FROM v$database_block_corruption dbc
JOIN dba_extents e ON dbc.file# = e.file_id AND dbc.block# BETWEEN e.block_id and e.block_id+e.blocks-1
ORDER BY 1,2;

Như mô tả của link

Dealing with Oracle Database Block Corruption

RMAN > validate check logical database

Thấy có dòng validate found one or more corrupt blocks

RMAN > blockrecover corruption list

Một lần nữa cùng nguyên nhân trên, ta lặp lại validate check logical database & blockrecover corruption list trong rman để giải quyết vấn đề

Cập nhật quan trọng trong trường hợp không có backup

Ta cần dùng lệnh scan toàn bộ database oracle tìm corrupt:

sau khi thực hiện lệnh này thì lỗi corrupt sẽ được tổng hợp trong view:

select * from V$DATABASE_BLOCK_CORRUPTION

Thường khối corrupt sẽ liên quan đến table hoặc index cụ thể, ta có lệnh sau để tổng hợp ra chúng:

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#;

Từ đó ta sẽ cần tạo lại table hoặc index để fix lỗi

Để kiểm tra fix được lỗi hay chưa ta nên lặp lại quy trình check

RMAN> BACKUP CHECK LOGICAL VALIDATE DATABASE;

Thật không may là việc chặn lại không thể sử dụng vì nó đòi hỏi một phiên bản Oracle Enterprise Edition và chúng tôi đang chạy Oracle Standard Edition.
Tôi cũng đã cố gắng để sửa chữa khối này với dbms_repair gói, nhưng dbms_repair không có bất kỳ tùy chọn để sửa chữa một khối bị hỏng có sản phẩm nào.
Sau một số phân tích sâu hơn, tôi quyết định để lại khối trống rỗng bị rạn nứt này vào cơ sở dữ liệu, như một khối không sử dụng bị hỏng không có hại.  Khi Oracle sẽ sử dụng lại khối này để gán nó cho một phân đoạn, Oracle sẽ tự động định dạng lại khối này, và vấn đề sẽ được giải quyết.

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s