오라클 성능 트러블슈팅의 기초 (2012년)
UTL_FILE 0 0 39,666

by 구루비스터디 UTL_FILE PLSQL 패키지 [2023.09.05]


UTL_FILE

  • 오라클 서버에 존재하는 파일을 읽고 쓰기 위해 이 패키지를 사용한다. 이 기능을 사용하면 오라클이 제공하는 각종 트레이스 파일과 로그 파일을 SQL문을 이용해서 접근할 수 있다.
  • 먼저 디렉토리 객체를 만든다.
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;
/

"데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 트러블슈팅의 기초 " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4281

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입