정보과학 IT

(Oracle) ORA-29275 : 부분 다중 바이트 문자

물곰탱이 2013. 11. 12. 09:57

(Oracle) ORA-29275 : 부분 다중 바이트 문자

 

 

 

 

오라클 서버의 CHARACTERSET과 클라이언트의 CHARACTERSET이 서로 다르고 호환도 되지 않는 경우 발생하는 오류.

 

 

서버의 CHARACTERSET  확인

SQL> select *
         from sys.props$
         where name = 'NLS_NCHAR_CHARACTERSET';

NAME                                      VALUE$               COMMENT$
------------------------------------------------------------
NLS_NCHAR_CHARACTERSET    KO16KSC5601       NCHAR Character set

 

SQL> select parameter, value
         from nls_database_parameters
         where parameter like '%CHARACTERSET%';


PARAMETER VALUE
------------------------------------------------------------
NLS_NCHAR_CHARACTERSET KO16KSC5601
NLS_CHARACTERSET KO16MSWIN949 

 

 

 클라이언트의 CHARACTERSET  확인


레지스트리 편집기에서 "NLS_LANG" 을 찾아보자.
HKEY_LOCLA_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10G_home1
NLS_LANG 값이 KOREAN_KOREA.KO16MSWIN949 이거로 되어있다.

 

 

문제 해결

 

일반 개발자에게 서버에 CHARSET을 변경할 권한은 당연히 없을것이고 DBA라고 하더라도 너무 무모한 짓이다.  로컬 PC의 레지스트리의 NLS_LANG 값을 KOREAN_KOREA.KO16KSC5601로 바꾸는 방법이 한 방법이다. 그렇지만 여러 사용자 컴에서 레지스트리를 수정하라면 전산담당자는 뒤집어질 것이다.

 

조회할 때 문제라면 프로그램 코딩에서 보통 2BYTE 문자가 포함된 경우기 때문에 2byte 문자 포함이 의심되는 필드에 to_single_byte 함수를 사용하면 응용프로그램은 정상적으로 작동된다.

 

문제가 되는 행을 찾아서 값을 변경해 준다.
SQL> select to_single_byte(field_name) from table_name;
update table_name set field_name = to_single_byte(field_name) where ..;  

 

 

'정보과학 IT' 카테고리의 다른 글

온톨로지(Ontology)  (0) 2013.11.13
Equiv-Join 과 Outer-Join  (0) 2013.11.12
(Oracle) PCTFREE와 PCTUSED  (0) 2013.11.11
Windows7 확장자 연결 프로그램 삭제 방법  (0) 2013.11.08
메타데이터 (metadata)  (0) 2013.11.07