728x90
Last night, I have got request from my customer. He wanted to know how many XML nodes are there in XML log table placed in Oracle. I tried to find sufficient oracle function but couldn`t. So I make slightly dirty SQL query but it was very helpful to reduce manual job. Let`s see SQL query first.

SELECT xml_seq, 
       to_char((length(xml_recv)-length(replace(xml_recv,'<ITEM>',''))) / length('<ITEM>')) as item_count
  FROM tbl_xml_log
Look above SQL carefully. It looks dirty calculation about length of column but very simple. You can change <ITEM> to string that you want to count on specific column. It would be helpful for guys who want to count repeated character in specific column.

- NoPD -
728x90
728x90
오라클의 테이블에 DML 관련 작업을 하다보면 ORA-00054 에러를 종종 만나게 된다. (종종 만나지 말아야 하나, 어쩔 수 없이 만나는 듯) 인덱스 관련된 작업의 Lock 이나 기타 DML 작업에서 Lock 이 걸린 경우 이같은 증상을 많이 만날 수 있다.

STEP 1 : Lock 이 발생한 OBJECT 확인
SELECT object_id, object_type
    FROM dba_objects
  WHERE object_name='테이블 / 인덱스 이름';

STEP 2 : Lock 을 잡고 있는 세션 ID 확인
SELECT *
    FROM v$locked_object
  WHERE object_id='STEP1에서 검색한 object_id';

(오라클 사용자 이름과 세션 ID 를 기억해 둔다)

STEP 3 : Lock 을 잡고 있는 세션의 Serial 번호 확인
SELECT sid, serial#, command, taddr
    FROM v$session
  WHERE sid='STEP2의 세션 ID 번호';

STEP 4 : 세션 강제 종료
ALTER SYSTEM KILL SESSION '<세션 ID, Serial#>';

STEP 5 : 세션 종료 확인 및 Rollback 체크
SELECT used_ublk
    FROM v$transaction
  WHERE ADDR='<STEP3의 TADDR>';

참고 URL : http://kr.forums.oracle.com/forums/thread.jspa?messageID=1457903

- NoPD -
728x90
728x90
근래 몇 년간 웹서비스로 개발된 API 들은 항상 웹폼에서만 호출했었습니다. 이번에 개인적으로 사용할 서버 모니터링 프로그램을 만들면서 웹서비스를 사용하고 있었는데, 윈폼에서 호출이 1회 이상 되지 않는 문제가 발생하더군요.

처음 프로그램이 웹서비스를 호출하면 값을 잘 받아오지만, 이후부터는 값을 받아오지 못하는 문제더군요. 에러 메시지는 "기본 연결이 닫혔습니다" (영어로는 The Underlying Connection was Closed 더군요. 번역이 괜찮게 된건지 모르겠군요) 개발자의 친구, 구글신에게 물어보니 역시 좋은 해결 방안들이 있었습니다.


웹서비스 Proxy 를 생성하면 reference.cs 파일이 생기는데요, 일단 이 파일을 열어서 아래의 코드를 추가해 줍니다. 환경에 따라 다른 것인지 모르겠으나, keepalive 를 true 로 해서 해결이 된다는 이야기도 있었는데 제 경우에는 해당사항이 없었습니다.


해결 방법이 조금 꽁수이긴 하나 (ConnectionGroup 이름을 계속 새로운 GUID 로 할당해주는 -_-;;) 일단 해결이 되었고 크게 누군가에게 부담을 주는 방식이 아니라 일단 사용하기로 했습니다. 유경상님의 블로그에 이 에러와 관련하여 WCF와 Fiddler의 문제를 언급한 글도 한번 읽어 보시면 유사한 상황에서 도움이 되실 것 같습니다.

 
- NoPD -
728x90
728x90
개인적인 용도로 오라클 리모트 쿼리를 하기 위한 간단한 웹서비스를 만드는데 엉뚱한 문제에 봉착을 했습니다. 로컬에 설치된 Toad, Aqua Data Studio 할 것 없이 오라클 서버에 아주 잘 접속하는 환경에서, 개발 작업을 진행하고 있었는데, 계속 " ORA-12154 : TNS:could not resolve the connect identifier specified " 에러가 발생하더군요.

일반적으로 오라클을 DB로 사용하는 개발업무 초기 / 환경설정 작업시에 늘 겪는 것과 마찬가지로 tnsnames.ora 파일등의 설정이 잘못된건가 싶어 확인을 해봤습니다. 아무런 이상이 없더군요. (Toad, Aqua가 도니 당연하겠네요;;;) 한참을 헤메인 끝에 원인을 엉뚱한 곳에서 찾았네요. (참고 URL : http://hoons.kr/Board.aspx?Name=Free&Mode=2&BoardIdx=14754&Key=&Value=)

처음 프로젝트를 생성했던 경로 이름에 "한글"이 포함되어 있는 것이 원인이었습니다. OracleClient 가 왜 프로젝트의 경로명에 영향을 받는지 까지는 정확히 원인을 모르지만 (사실 알고 싶지도 않고 ;;;) 따지지도 말고 묻지도 말고 이름이 영문으로만 구성된 경로로 이동시키니 아주 깔끔하게 오라클 DB에 엑세스를 하기 시작했습니다.

가끔 업무 편의를 위해서 간단한 프로그램을 만들다가 본의 아니게 이번 경우처럼 삼천포로 빠져서 색다른 사실들을 접하는 경우가 있습니다. 우리나라 개발자 여러분들의 생산성 향상! 을 위해서 이런 말도 안되는 팁은 적극적으로 공유를 해야할 것 같습니다. 되도 않는 네이뇬의 지식인보다 훈스 닷넷의 게시판에서 더 주옥같은 정보를 얻게 되서 나름 기쁜 마음을 감추기가 힘들군요. (경훈님께 막 아부하고 막이래?) 비슷한 원인불명의 오류로 고생하시는 분들, tnsnames.ora 파일 탓하지 마시고 경로 한번 확인해 보세요!

- NoPD -
728x90

+ Recent posts