NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Database TCP Trace Tool. (Transmission Control Protocol 추적하는 방법 - ORA-02020: 너무…

    페이지 정보

    본문

    ORA-02020에 대한 근본적인 문제는 Oracle의 DB Link갯수가 부족하여 발생되는 문제입니다. 기본값이 4이므로 동시에 5개 이상 DB Link를 오픈하려 한다면 발생되죠. 이 근본적인 문제에 대한 해결 방법은 조금만 검색 해보면 많이 찾을 수가 있기 때문에 여기에서 이 문제에 대한 해결 방법은 적어두지 않았습니다.

    O5oqFud.jpg

     

     

    안녕하세요. 소심비형입니다. 요즘 이천에 있는 S사에서 SmartFX를 4.0으로 업그레이드하고 있습니다. 약 1~2시간이면 완료될 줄 알았던 작업이 의외로 많은 문제를 발생시키는군요-_-; 대부분 쉽게 처리가 되었지만, 파일 인코딩으로 인해 발생된 문제는 엉뚱한 에러 메시지를 보여줘서 해결하는데 시간이 오래 걸렸습니다. 근본적인 문제는 DBConnection.xml 파일의 BOM¹이였습니다.

     

    에러 메시지 처리가 얼마나 중요한지 다시한번 깨닫게 되는 계기가 되었습니다-_-;

    ※ BOM(Byte Order Mark): 유니코드에서 엔디안을 구별하기 위해 사용되는 문자로, 문자 값은 U+FEFF입니다. UTF-16, UTF-32와 같은 인코딩에서는 엔디안의 종류에 따라 문자열의 값이 완전히 달라지므로, 문자열의 엔디안을 구별할 수 있는 표식이 필요하죠. 이에 따라 유니코드 문자열 앞에 BOM 문자를 붙여, 맨 처음에 읽히는 값에 따라 엔디안을 구별하게 됩니다. 하지만, UTF-8의 경우에는 엔디안 문제가 발생되지 않기 때문에 UNIX 계열의 OS에서는 문서를 UTF-8로 저장할 때 BOM을 추가하지 않습니다. 이와는 반대로 윈도우 메모장의 경우 BOM을 추가하여 저장합니다.

    - 참고: 위키백과

     

     

    CMD와 Notepad의 고질적인 호환성 문제였죠. 별 의미도 없는 UTF-8의 BOM 때문에 아까운 시간만 낭비하고 말았습니다-_-; 여하튼, 이 문제로 인해 "ORA-02020: 너무 많은 데이터베이스 링크들이 사용되고 있습니다."와 같은 에러가 나고 있었죠. 그런데 여기에서 문제는 랜덤하게 발생한다는 것입니다. 또한, 같은 수의 DB Link를 사용함에도 운영 서버에서와 개발자 각각의 PC에서는 에러가 나지 않는다는 것이었습니다-_-; 여기에서 멘붕에 빠지기 시작했습니다. SmartFX 프레임워크 클라이언트 담당자에게 전화했습니다. 항상 그렇지만 전후좌우 설명은 들으려 하지 않고 위 에러 메시지에만 집중하더라구요. 결국 답변은 DBA에게 물어보라는 것이었습니다. 에러가 발생하게 된 원인과 같은 데이터베이스와 같은 수의 디비 링크라고 해도 듣질 않더라구요^^; 설명하는데 계속 말을 짜르기만 합니다. 아무튼 어떻게든 DBA에게 연락할 문제는 아니라고 설득한 후 이번에는 서버 담당자의 연락처를 받았습니다. 하지만, 무슨 교육이라도 받았는지 같은 말만 반복합니다-_-;

    NyHrHw5.jpg

     

     

    프레임워크에 대해 기술지원을 받기는 무리라 판단하고, 클라이언트와 서버 그리고 데이터베이스간 메시지가 어떻게 전송되는지 직접 확인해보기로 했습니다. 물론, 그전에 FxMessage와 FxMessageRequest라는 클래스를 리플렉션(디어셈블러)해서 코드를 확인했죠. 별거 없더라구요. 혹시나 해서 dataaccess.jar도 까봤습니다. 별거 없었습니다-_-;

     

    설정 파일을 보니 HTTP와 TCP로 되어 있길래 먼저 피들러(Fiddler)를 이용하여 추적 시도... 역시 TCP로 메시지를 주고 받는다는것을 확인하고 RawCap으로 메시지를 잡아봤습니다. 뭐 예상했다시피 로그에 기록되는 내용이 그대로 표시되더라구요. 뭔가 더 많은 정보를 보여주긴 했지만 문제 해결에 도움이 될만한 내용은 없었습니다. 마지막으로 부트스트랩을 이전 버전으로 돌려놓고 실행하자 DBConnection.xml을 읽을 때 에러가 발생되더라구요. xml 문서의 첫 행에 알 수 없는 문자열 어쩌구 저쩌구 였던거 같습니다. 정확한 에러 메시지가 기억이 안나네요^^;

    MUtYRXL.jpg

     

     

    아무튼 비주얼 스튜디오에서 DBConnection.xml 파일을 "서명 없는 UTF-8"로 저장하고 실행시키니 잘 돌아갑니다. 물론, 개발자들 로컬에서 실행할 때는 문제가 발생되지 않았습니다. 이클립스에서는 UTF-8 인코딩을 맞춰주기 때문인듯 합니다. 아무튼 문제는 해결이 되었고 마음 편한 금요일 퇴근길이었습니다.

     

    TCP 를 통해서 주고받는 메시지를 확인하려면 아래 홈페이지에서 RawCap을 다운로드 받아서 실행하세요. 이 툴의 사용법은 너무 간단하기에 주소만 남겨 드립니다-_-;

    http://www.netresec.com/?page=RawCap

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.