13ноя
Как зная Dba получить file# и block#?
Предположим, что Вы знаете DBA для битого (сorrupted) блока. Именно адрес DBA нам выдает утилита DBVerify. Так как нам нужно найти объект, которому принадлежит этот блок, то нам нужно знать file# и block#, чтобы выпонив следующий запрос, найти объект:
select owner,segment_name,segment_type, EXTENT_ID, BLOCK_ID from dba_extents where file_id=file# and block# between block_id and block_id+blocks-1;
Так как Data Block Address (DBA) идентифицирует блок базы данных, для работы с ним можно использовать функции dbms_utility.make_data_block_address, data_block_address_file, data_block_address_block. То с помощью запроса мы получим необходимые нам данные:
select dbms_utility.data_block_address_file([dba]) file#, dbms_utility.data_block_address_block([dba]) block# from dual;