Tag Archives: oracle

Toad – Query Formatting

다른 사람이 작성한 10줄 내외의 짧은 쿼리라면 읽기쉽고, 이해하기도 쉽겠지만……. 내가 작성한 것도 아니고, 다른 사람이 작성한 수백라인의 쿼리를… 그것도 들여쓰기 조차 일정하지 않은 쿼리를 한눈에 읽고 이해 하기란…. DBA가 아닌 나로서는 멘붕…또 멘붕의 상황만 계속된다.

작성한 놈… XXX 라고 욕을 하며, 다시  쿼리를 부분 부분 뜯어서 들여쓰기로 정렬하고, 실행해보며 무슨짓을 하고 있는지 찾아가는 과정이 여간 답답하고, 짜증나는 일이 아닐 수 없다.

동일한 이유로 오늘 작업을 하다보니 이젠 들여쓰기가 개판인것도 어느정도 눈에 들어오기는 하지만, 이대로 쓸수는 없고 뭔가 또 고쳐야 하니….깔끔하게 정렬하기로 마음을 먹고 하나씩 고칠까 했는데….토드에 쿼리 자동 정렬하는 기능이 있다길래 검색해보니 Ctrl + Shift + F 로 간단하게 정렬이 되는게 아닌가….;;;;;

Toad의 View – Formatting Options 메뉴에서 formatting 관련 옵션을 입맛에 맞게 변경할 수도 있다고 하지만, 쓸줄모름…;;;;

쿼리가 보기좋게 정렬되는건 좋지만 기존에 사용되던 수백줄짜리 쿼리를 한방에 시도하니 몇가지 문제가 있어서 일단 부분부분..쪼개서 정렬해야 할듯….

oracle characterset 확인.

ORA-29275
서버와 클라이언트 간의 characterset이 상이한 경우에 발생한다고 하는데…이 경우에는 아래와 같은 방법으로 서버측의 characterset을 확인해서 client의 characterset을 변경하거나…..아니면 서버측의 characterset을 변경하는 방법이 있으나….서버측의 characterset을 변경하면 해당 DB에 접근하는 모든 사용자들이 로컬 환경에서 characterset을 변경해야 하니, 서버측의 characterset을 확인하고 자신의 로컬 캐릭터셋을 변경하는게 정신 건강에 이롭다.

select *
  from nls_database_parameters
 where parameter like '%CHARACTERSET%'

위의 쿼리를 실행해보면 NLS_CHARACTERSET 이 조회되는데, 이게 서버에 현재 설정된 캐릭터셋이니, 이대로 로컬 환경을 설정을 변경해주면 된다.

개인적으로 Windows 7 64bit 버전을 사용하는 관계로 regedit로 레지스트리 편집기를 실행하면 아래 경로에서 NLS_LANG의 값을 서버측과 동일하게 변경해주면 된다.

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1
32bit OS를 사용중이라면 Wow6432Node가 없고, SOFTWARE바로 아래에 ORACLE이 존재한다.

서버측의 NLS_CHARACTERSET에 UTF8 이라면 NLS_LANG 값을.. KOREAN_KOREA.UTF8 처럼 변경하면 된다.

 

오라클 에러코드만 보고 검색을 하면 위와 같은 내용이 대부분이고… 실제로 서버와 클라이언트 간에 characterset이 일치함에도 불구하고 계속 동일한 에러코드를 반환하는 경우에는 컬럼 내부에 해당 characterset으로 인식이 안되는 문자가 포함된 경우라 볼 수 있다.

일단 어떤 컬럼에 데이터가 문제인지를 찾기 위해, 테이블 내 컬럼중 의심되는 컬럼만 제외하고 조회를 해서 정상적으로 조회가 안되는 컬럼명을 찾고…… 그 다음으로 대략적인 조건으로 조회건수를 조절해서 문제가 되는 row를 찾아서 해당 컬럼의 값을 update시키거나, 삭제하면…잘 작동함.