TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-16 |
제목 | File 번호/Block 번호와 DBA 사이의 변환 script | ||
---|---|---|---|
File 번호/Block 번호와 DBA 사이의 변환 script
---------------------------------------------------------- block dump나 block corruption 등의 해결을 위해 file 번호와 block 번호를 DBA로 변환하거나 그 반대의 경우가 필요한 경우가 종종 있다. 여기에서는 이를 수행하기 위한 간단한 script를 제공한다. 아래의 script를 각각 별도의 file로 save한 후 file을 실행하여 procedure를 생성시킨 후 usage에 적힌대로 수행하면 된다. usage 내의 procedure의 input 값은 단지 예이므로 실제 사용 시에는 적당한 값을 사용하도록 한다. (주의)여기에서 dba값은 십진수이므로, 0x로 시작하는 값은 십진수로 변환한 후 작업하여야 한다. 1. DBA를 이용하여 file#, block# 를 찾아내는 procedure rem ************************************************************* rem * * rem * usage : 1. procedure 생성 * rem * 2. SQL> set serveroutput on * rem * 3. SQL> exec dba_to_file(123456789) * rem * * rem ************************************************************* create or replace procedure dba_to_file(in_dba number) is file_num integer; block_num integer; begin file_num := dbms_utility.data_block_address_file(in_dba); block_num := dbms_utility.data_block_address_block(in_dba); dbms_output.put_line('--------------------------------'); dbms_output.put_line('File number => '|| file_num); dbms_output.put_line('Block number => '|| block_num); dbms_output.put_line('--------------------------------'); dbms_output.put_line('Good luck to you'); end; / 2. file#, block#를 가지고 DBA를 계산해 내는 procedure rem ************************************************************ rem * * rem * usage : 1. procedure 생성 * rem * 2. SQL>set serveroutput on * rem * 3. SQL>exec file_to_dba(10, 100) * rem * * rem ************************************************************ create or replace procedure file_to_dba(file_num number, block_num number) is dba number; begin dba := dbms_utility.make_data_block_address(file_num, block_num); dbms_output.put_line('--------------------------------'); dbms_output.put_line('DBA => '|| dba); dbms_output.put_line('--------------------------------'); end; / 3. file#, block#를 이용하여 해당 object를 알아내기 위한 script select owner, segment_name, segment_type, blocks, block_id from dba_extents where file_id = &file_number and &block between block_id and (block_id + (blocks - 1)); |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |