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시키거나, 삭제하면…잘 작동함.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.