SQL> col dir_name new_value dir_name
SQL> select value as dir_name
from v$parameter
where name = 'user_dump_dest';
SQL> create or replace directory my_dump_dest as '&dir_name';
SQL> col tracefile_name new_value tracefile_name
SQL> select i.value || '_ora_' || p.spid || decode(t.value,null, '','_'||t.value)||'.trc' as tracefile_name
from v$process p, v$session s,
(select value from v$parameter where name = 'instance_name') i,
(select value from v$parameter where name = 'tracefile_identifier') t
where p.addr = s.paddr and s.sid = userenv('sid');
SQL> var cur_pos number;
SQL> declare
file_no utl_file.file_type;
v_exists boolean;
v_blk_size number;
begin
file_no := utl_file.fopen( 'MY_DUMP_DEST', '&tracefile_name', 'R', 32767);
utl_file.fgetattr('MY_DUMP_DEST', '&tracefile_name',v_exists, :cur_pos, v_blk_size);
// 파일의 속성정보를 가져온다. 존재하는지 크기는 얼마인지, 블럭 사이즈는 어떻게 되는지.
utl_file.fclose(file_no);
end;
/
UTL_FILE.GET_LINE
프로시져를 이용해서 트레이스 파일을 한줄 씩 읽으면서 db file sequential read 대기 이벤트의 발생 횟수를 카운트 하는 프로시져를 생성해 보자.SQL> set serveroutput on
SQL> declare
file_no utl_file.file_type;
v_len number;
v_line varchar2(32767);
v_count number := 0;
begin
file_no := utl_file.fopen('MY_DUMP_DEST', '&tracefile_name','R',32767);
utl_file.fseek(file_no, :cur_pos);
loop
begin
utl_file.get_line(file_no, v_line);
if v_line like '%db file sequential read %'
then v_count := v_count +1;
end if;
exception
when no_data_found then exit;
end;
end loop;
utl_file.fclose(file_no);
dbms_output.put_line('count of db file sequential read = ' || v_count);
end;
/
- 강좌 URL : http://www.gurubee.net/lecture/4281
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.