태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Windows Oerr 만들기

오라클 2009.03.09 14:37
Windows 용 Oracle에는 oerr command가 제공되지 않는다. 그래서 Windows에서 ORA-01555 와 같은 에러를 만났을 때 도움말을 바로 보기가 어렵다.

여기서 Windows oerr을 구현해서 제공하고 있다.

나같은 경우는 100% Pure SQL로 구현된 Oerr 명령을 사용하고 있다. 다음과 같이 구현한다.
(Unix용 Oracle 설치 파일에서 @ORACLE_HOME/rdbms/mesg/oraus.msg 파일을 복사해서 사용!)

1. oraus.msg 파일이 존재하는 Director 객체를 만든다.

create or replace directory dir_oraus
as 'C:\Documents and Settings\exem'
;


2. oraus.msg 파일을 로딩할 External Table을 만든다.

create table ext_oraus(
  line    varchar2(4000)
) organization external
(
  default directory dir_oraus
  access parameters
  (
    records delimited by newline
    fields terminated by '~'
  )
  location ('oraus.msg')
)
reject limit unlimited
;


3. External Table의 Data를 Copy해서 저장할 Permanent Table을 만든다.

create table t_oraus (
  err_code  varchar2(5),
  message   varchar2(1000),
  texts     clob
);


4. 다음과 같이 External Table를 통해 oraus.msg 파일을 읽으면서 Permanent Table에 적절한 포맷으로 데이터를 생성한다.


declare
  v_err_code  varchar2(4000);
  v_message  varchar2(4000);
  v_texts    clob;
 
begin

  for r in (select line from ext_oraus) loop
    if substr(r.line, 6, 1) = ',' then
      -- record new data
      if v_err_code is not null then
        insert into t_oraus(err_code, message, texts)
          values(v_err_code, v_message, v_texts);
      end if;
         
      v_err_code := substr(r.line, 1, 5);
      v_message := substr(r.line, 14);
      v_texts := '';
    elsif substr(r.line, 1, 2) = '//' then
      v_texts := v_texts || r.line || chr(13)|| chr(10);
    end if;
  end loop;
 
  -- last record
  insert into t_oraus(err_code, message, texts)
          values(v_err_code, v_message, v_texts);
 
  commit;
 
end;
/


5. 조회 속도를 위해 Index를 만든다.

create index t_oraus_n1 on t_oraus(err_code);


6. 다음과 같이 oerr.sql 파일을 만든다.

set long 10000

select err_code, message, texts
from t_oraus
where err_code = lpad(to_char(&1), 5, '0')
;


7. 이제 다음과 같이 oerr을 사용할 수 있다.

UKJA@ukja102> @oerr 1555
old   3: where err_code = lpad(to_char(&1), 5, '0')
new   3: where err_code = lpad(to_char(1555), 5, '0')

ERR_C
-----
MESSAGE
---------------------------------------------------------------------------------
--------------------
TEXTS
--------------------------------------------------------------------------------
01555
 "snapshot too old: rollback segment number %s with name \"%s\" too small"
// *Cause: rollback records needed by a reader for consistent read are
//         overwritten by other writers
// *Action: If in Automatic Undo Management mode, increase undo_retention
//          setting. Otherwise, use larger rollback segments



8. 한 가지 장점 중 하나는 RDBMS Table에 저장되어 있기 때문에 검색이 매우 편리하다는 것이다.

UKJA@ukja102> set pause on
UKJA@ukja102> select * from t_oraus
  2  where texts like '%index%rebuild%';


ERR_C
-----
MESSAGE
---------------------------------------------------------------------------------
--------------------
TEXTS
--------------------------------------------------------------------------------
08104
 "this index object %s is being online built or rebuilt"
// *Cause:  the index is being created or rebuild or waited for recovering
//          from the online (re)build
// *Action: wait the online index build or recovery to complete


08106
 "cannot create journal table %s.%s"
// *Cause:  The online index builder could not create its journal table
// *Action: Rename the conflicting table or rerun the SQL statement. There
// *        may be a concurrent online index rebuild on the same object.
// *Action: rename your table in conflict or rerun the SQL statement
// *        there may be a concurrent online index rebuild on the same object.


08115
 "can not online create/rebuild this index type"
// *Cause:  User attempted to create index type that online doesnot support
// *Action: use offline index create/rebuild command

...


그런데 왜 Oracle은Windows 버전에 oerr command를 제공하지 않는 것일까?





tags : ,
Trackback 0 : Comments 3
  1. extremedb 2009.03.09 20:36 신고 Modify/Delete Reply

    사용자들이 너무 온순해서 그런것은 아닐까요?
    참고로 일본같은 경우에 메뉴얼을 일본어로도 번역해서 배포한다고 합니다.
    유용한 정보 감사합니다.

  2. 그와함께 2009.03.11 19:10 신고 Modify/Delete Reply

    역시!!

  3. 다솜여우 2009.04.19 11:15 신고 Modify/Delete Reply

    유용한 팁인데요..
    개인적으로 사용하는 oracle은 vmware에 리눅스 올려서 사용하는데, 개발서버인 윈도우에 적용해야겠습니다.
    감사합니다.

Write a comment